Galileo:一台真正“全能”的遥感预训练模型
“
给地球做一次多维度体检,只需要一个模型
目录
-
为什么要用 Galileo? -
Galileo 到底“看”到了什么 -
模型结构:像搭积木一样灵活 -
自监督学习:两套任务,一张答卷 -
预训练数据:127 155 个真实场景 -
实测结果:11 个基准任务全面领先 -
上手即用:3 行代码跑起来 -
常见疑问(FAQ)
1. 为什么要用 Galileo?
遥感领域一直面临两个老大难问题:
问题 | 场景举例 |
---|---|
数据类型太多 | 光学、雷达、高程、天气、夜间灯光…… |
目标尺度差异大 | 一艘小船 1–2 像素,一座冰川上万像素 |
过去的做法是给每种任务、每种分辨率单独训练一个模型——成本高、迁移差、维护难。
Galileo 用一个统一的 Transformer 框架同时解决“多模态 + 多尺度”两大难题。
2. Galileo 到底“看”到了什么
下图把支持的 9 类遥感输入一次性列清:
数据类别 | 具体来源 | 变化维度 |
---|---|---|
光学 | Sentinel-2 全波段(除 B1/B9/B10) | 空间 × 时间 |
雷达 | Sentinel-1 VV/VH 极化 | 空间 × 时间 |
植被指数 | Sentinel-2 NDVI | 空间 × 时间 |
高程 & 坡度 | SRTM 30 m DEM | 空间 |
地表覆盖概率 | Dynamic World 10 m | 空间 |
农作物分布 | World Cereal 10 m | 空间 |
气象 | ERA5 降水/气温,TerraClimate 蒸散发等 | 时间 |
夜光 | VIIRS Nightlights | 时间 |
人口密度 | LandScan 1 km | 静态 |
“
一句话:只要你在论文里见过的主流遥感产品,Galileo 都能吃。
3. 模型结构:像搭积木一样灵活
3.1 输入怎么变成 token?
Vision Transformer 的第一步是把图像切成 patch。
Galileo 把“空间 patch”概念扩展到“空间 × 时间 × 通道组”:
-
一个 token = 一块 10 m 像素 × 一个月 × 一组光谱通道 -
通道组举例:RGB、红边、近红外、SAR 双极化……
这样既能处理单幅图像,也能处理 24 个月的时间序列,甚至能降到单个像素的时间序列。
3.2 规模选择
版本 | 参数 | GPU 时间 (H100) | 适用场景 |
---|---|---|---|
Nano | 0.8 M | 200 h | 边缘设备、实时推理 |
Tiny | 5.3 M | 259 h | 个人工作站 |
Base | 85 M | 573 h | 服务器、研究级 |
4. 自监督学习:两套任务,一张答卷
4.1 全局任务:抓“大”特征
-
掩码策略:在空间或时间维度上挖掉大片区域 -
预测目标:用深层的 Transformer 输出做对比学习 -
适合任务:整幅图像分类、跨场景迁移
4.2 局部任务:抓“小”特征
-
掩码策略:随机打散,只遮 5 % token -
预测目标:直接把原始像素或浅层特征做对齐 -
适合任务:细粒度分割、小目标检测
4.3 一起训练
把两个损失简单平均,模型在一次前向里同时学“上下文”和“细节”。
实验显示:
-
单独全局任务 → 分类好,分割掉 9 % mIoU -
单独局部任务 → 分割好,分类掉 18 % Top-1 -
联合训练 → 两者都接近最优,训练稳定性 ↑
5. 预训练数据:127 155 个真实场景
5.1 采样思路
-
把全球 WorldCover 10 m 土地覆盖图切成 10 km × 10 km 瓦片 -
用 k-means 聚类 150 000 个中心,保证地理 + 语义多样性 -
成功导出 127 155 个实例,每个实例覆盖 96 × 96 像素 × 24 个月
5.2 实例长什么样?
输入张量维度:
• space_time_x : [B, 96, 96, 24, 17] # 17 组时空波段
• space_x : [B, 96, 96, 4] # 高程、坡度、土地覆盖
• time_x : [B, 24, 8] # 气象、夜光
• static_x : [B, 5] # 人口、坐标、均值类别
6. 实测结果:11 个基准任务全面领先
6.1 图像分类(Top-1 Accuracy)
数据集 | 训练数据量 | Galileo-Base | 最强对比模型 |
---|---|---|---|
EuroSat | 100 % | 93.0 % | CROMA 85.6 % |
EuroSat | 1 % | 56.6 % | SoftCon 27.2 % |
“
在 1 % 标签的低资源场景,优势最大。
6.2 语义分割(mIoU)
数据集 | 模态 | Galileo-Base | 次优模型 |
---|---|---|---|
MADOS 海洋垃圾 | 光学 | 67.6 % | CROMA 64.2 % |
Sen1Floods11 洪水 | SAR | 79.4 % | CROMA 78.9 % |
6.3 时间序列作物分类
任务 | Galileo-Tiny | Presto |
---|---|---|
Togo 作物 vs 非作物 | 74.7 % | 75.5 % |
Brazil 咖啡 vs 其他 | 97.2 % | 98.8 % |
Kenya 玉米 vs 其他 | 85.4 % | 84.0 % |
“
时间序列专用模型 Presto 只略胜 1–2 个点,而 Galileo 还能顺手做图像任务。
7. 上手即用:3 行代码跑起来
7.1 安装
git clone https://github.com/nasaharvest/galileo.git
cd galileo
pip install -e .
7.2 加载模型
from single_file_galileo import Encoder
model = Encoder.load_from_folder("data/models/nano", device="cpu")
7.3 构造输入
from src.data.utils import S2_BANDS, construct_galileo_input
s2 = torch.randn(2, 4, 4, len(S2_BANDS)) # 2 个月, 4×4 像素
inputs = construct_galileo_input(s2=s2, normalize=True)
7.4 获取嵌入
with torch.no_grad():
emb = model(inputs) # [B, L, D]
8. 常见疑问(FAQ)
Q1:我只用光学和雷达,Galileo 会不会太重?
A:不会。
-
预训练时用了 9 类输入,推理时你完全可以只喂光学 + 雷达,其余填 0 即可。 -
Nano 版 0.8 M 参数,树莓派也能跑。
Q2:模型输出的 token 怎么对应回原图?
A:token 顺序 = 逐行扫描的空间 patch × 时间步 × 通道组。
-
空间 patch 编号容易反算:
row = token_id // (W/P)
col = token_id % (W/P)
Q3:我想微调自己的 1 m 无人机数据,该怎么办?
A:
-
把 1 m 图像重采样到 10 m(或把 patch 大小改成 1 m 对应像素)。 -
保留原有通道顺序,缺失波段补 0。 -
用 1 %–5 % 标签做线性探测或微调即可,Galileo 在低资源场景优势明显。
Q4:如何引用?
@misc{tseng2025galileolearninggloballocal,
title={Galileo: Learning Global and Local Features in Pretrained Remote Sensing Models},
author={Gabriel Tseng and Anthony Fuller and Marlena Reil and Henry Herzog and Patrick Beukema and Favyen Bastani and James R. Green and Evan Shelhamer and Hannah Kerner and David Rolnick},
year={2025},
eprint={2502.09356},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2502.09356}
}
结语
Galileo 把遥感领域长期割裂的“图像 vs 时间序列”“光学 vs 雷达 vs 气象”统一到一个模型里,而且小到一个 USB 棒都能跑。
无论你是做农作物监测、洪水预警还是海洋垃圾检测,都可以先用 Galileo 跑一次,拿到 90 % 基线,然后再按需微调。
代码、权重、数据全部开源,地球观测的门槛,从今天开始又低了一点。