认识 Prithvi:NASA × IBM 的遥感基础模型
HuggingFace 上最受欢迎的遥感 AI 模型。读完你会用 Prithvi 提取卫星图像特征,用于分类、分割、变化检测。
Prithvi 是什么?
Prithvi(梵语「地球」)是 NASA 和 IBM 联合训练的遥感基础模型(Foundation Model)。2023 年发布后迅速成为 HuggingFace 上最受欢迎的遥感模型------初代 100M 版本获 282 次点赞,2.0 300M 版本被下载 13,000+ 次。
核心思路:在海量卫星数据上预训练一个 Vision Transformer → 学到通用的「遥感视觉」→ 任何下游任务只需微调。
模型家族
| 模型 | 参数 | 下载量 | 用途 |
|---|---|---|---|
| Prithvi-EO-1.0-100M | 100M | 2,123 · ⭐282 | 初代经典,社区最认可 |
| Prithvi-EO-2.0-300M | 300M | 13,568 · ⭐40 | 升级版,下载量最高 |
| Prithvi-EO-2.0-600M | 600M | 2,707 · ⭐15 | 大杯,精度最高 |
| Prithvi-EO-2.0-300M-TL | 300M | 17,911 | Timm 格式,推荐用于微调 |
| Prithvi-EO-2.0-300M-BurnScars | 300M | 2,962 | 火灾烧伤检测 |
| Prithvi-EO-2.0-tiny-TL | Tiny | 4,866 | 轻量版,适合快速实验 |
TL 后缀 = Timm 库格式,社区推荐用于下游微调任务。
技术特点
训练方式
- 数据:NASA HLS(Harmonized Landsat Sentinel-2),覆盖全球的多时相卫星图像
- 方法:掩码自编码器(Masked Autoencoder, MAE)------随机遮挡图像中的 patch,训练模型从剩余部分重建被遮挡内容
- 架构:Vision Transformer (ViT)
多光谱支持
Prithvi 不像普通 ViT 只能处理 RGB。它原生支持 HLS 的 6 个光谱波段:
| 波段 | 波长 | 用途 |
|---|---|---|
| Blue | 0.49 μm | 水体、大气 |
| Green | 0.56 μm | 植被 |
| Red | 0.66 μm | 植被健康 |
| NIR | 0.83 μm | 植被核心指标 |
| SWIR1 | 1.61 μm | 水分、矿物 |
| SWIR2 | 2.20 μm | 地质、土壤 |
这比 RGB 多出整整一个数量级的信息------尤其是 NIR(近红外),是计算 NDVI 等植被指数的关键波段。
多时相
Prithvi 能处理不同时间拍摄的同一地点图像。这让它天然适合:
- 变化检测(城市扩张、森林砍伐)
- 灾害响应(火灾前后、洪水前后)
- 作物物候分析(不同生长阶段)
快速上手
Prithvi 不是标准 HuggingFace 模型,不能用
AutoModel.from_pretrained()直接加载。需下载快照后用自定义类加载。
python
import torch, sys
# 从 HF 下载模型快照: huggingface.co/ibm-nasa-geospatial/Prithvi-EO-2.0-300M
SNAP = "Prithvi-EO-2.0-300M"
sys.path.insert(0, SNAP)
from prithvi_mae import PrithviMAE
# 实测参数(img_size=448, patch_size=16, 不同于默认值)
model = PrithviMAE(
img_size=448, patch_size=(1, 16, 16), num_frames=1, in_chans=6,
embed_dim=1024, depth=24, num_heads=16,
decoder_embed_dim=512, decoder_depth=8, decoder_num_heads=16,
mlp_ratio=4., norm_pix_loss=False, mask_ratio=0.0
)
# 加载权重(需要丢弃不可插值的 pos_embed)
sd = torch.load(f"{SNAP}/Prithvi_EO_V2_300M.pt", map_location="cpu")
if "model_state" in sd: sd = sd["model_state"]
for k in list(sd.keys()):
if "pos_embed" in k: del sd[k]
model.load_state_dict(sd, strict=False)
model = model.cuda().eval()
# 单图推理: ~31ms, 约32 fps (RTX 4060)
模型输出 (loss, pred, mask),mask_ratio=0 时不做掩码,pred 为 [B, N, C] 的重建图。
与 TorchGeo 互补使用
TorchGeo 负责数据加载,Prithvi 负责特征提取。由于 Prithvi 不是标准 HF 模型,需配合自定义加载流程------参考上方快速上手或 demo.py。
TorchGeo 提供标准化数据接口,Prithvi 提供预训练特征------配合使用效果最佳。
Prithvi 在技术栈中的位置
scss
数据层 (TorchGeo) → 加载 + 预处理
↓
特征层 (Prithvi) → 通用遥感特征提取
↓
时空层 (DeepEarth) → 加入时间/空间编码
↓
知识层 (EVE) → RAG 检索相关文献
↓
写作层 (SciAssistant) → 自动生成分析报告
参考
首次发布于 2026-05-24 · 掘金 / 知乎