GeoChat
首个CVPR接收的遥感领域多模态大模型,支持图像描述、VQA、指代检测等六大任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
首个CVPR接收的遥感领域多模态大模型,支持图像描述、VQA、指代检测等六大任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

想象这样一个场景:地质勘探队员在荒野中打开手机,对着一张分辨率极高的遥感卫星图像提问——"图中标记区域的地质结构是什么?"——系统立刻用自然语言给出精准回答,甚至还能框出图中特定建筑的位置。这不是科幻,而是 GeoChat 已经实现的能力。
大模型时代,GPT-4V、Gemini 等视觉语言模型(VLM)在自然图像理解上突飞猛进,但遥感领域的专用视觉语言模型长期处于空白。遥感图像与普通照片有本质差异:分辨率更高(可达亚米级)、视角为正交俯视、光谱信息丰富、场景覆盖范围广,传统的通用 VLM 在遥感场景下往往表现欠佳。
MBZUA 大学的研究团队看准了这一痛点,联合澳国立、布莱亭大学等机构,于 2023 年 11 月发布了 GeoChat——首个专门针对遥感场景的 grounded 大视觉语言模型(Grounded Large Vision-Language Model),并在 2024 年被计算机视觉顶会 CVPR 2024 正式接收录用。

GeoChat 的能力边界远不止"看图说话",它在遥感领域实现了 零样本跨任务泛化,涵盖以下六大核心功能:
① 图像描述(Image Captioning):自动生成遥感图像的详细文字描述,识别建筑类型、道路网络、水体分布等。
② 区域描述(Region Captioning):用户框选图像中任意区域,GeoChat 针对该区域给出精准描述,适用于小范围目标分析。
③ 视觉问答(VQA):针对遥感图像的开放式或选择题式提问,如"这幅图像的左上角是什么类型的建筑?"
④ 场景分类(Scene Classification):自动判断遥感图像所属场景类别(城区、农田、森林、工业区等)。
⑤ 视觉对话(Grounded Conversation):在对话中穿插指代性表达,如"图中那个浅色屋顶的建筑"——GeoChat 能准确将语言指代映射到图像区域。
⑥ 指代目标检测(Referring Object Detection):给定一段文字描述,GeoChat 能在图像中检测并框出对应的目标物体,支持旋转边界框(BBox)输出。

GeoChat 基于 LLaVA-1.5 架构微调而来,整体采用「视觉编码器 + 投影层 + 大语言模型」的三阶段范式:
视觉编码器:采用 OpenAI 的 CLIP ViT-L/14 336px 作为视觉骨干网络,将高分辨率遥感图像编码为视觉特征序列。336px 输入分辨率对于遥感图像的细节捕捉至关重要。
投影层(Projector):使用两层 MLP(激活函数 GELU)将视觉特征映射到 LLM 的输入空间,实现跨模态特征对齐。投影层权重来自 LLaVA-1.5 预训练阶段在 LAION-CC-SBU 数据集(558K 图像)上的训练。
大语言模型:支持 Vicuna-7B 和 MPT-7B 两种基座。Vicuna 由 LLaMA 微调而来,MPT( MosaicML Pretrained Transformer)则来自 MosaicML,两者在对话和推理能力上各有优势。
训练策略:采用两阶段训练——第一阶段为特征对齐预训练(使用 BLIP 标注的图像-文本对),约 3.5 小时;第二阶段为视觉指令微调,使用团队自建的 GeoChat_Instruct 数据集(318K 图像-指令对),基于 Vicuna 格式的对话模板进行监督微调。训练配置:3×A100 40GB,Global Batch Size 144,Learning Rate 2e-5,Max Length 2048。
项目代码结构遵循 LLaVA 范式,核心模块如下:
geochat/
├── conversation.py # 对话模板管理(Vicuna格式)
├── constants.py # 特殊Token定义
├── mm_utils.py # 图像预处理工具
├── model/
│ ├── builder.py # 模型加载入口
│ ├── geochat_arch.py # 核心架构(encode_images等)
│ ├── consolidate.py # 模型权重合并工具
│ ├── apply_delta.py # Delta权重应用(来自OpenChat)
│ └── language_model/
│ ├── geochat_llama.py # Vicuna后端
│ └── geochat_mpt.py # MPT后端
└── eval/ # 批量评测脚本
├── batch_geochat_grounding.py # 指代目标检测评测
├── batch_geochat_referring.py # 指代描述评测
├── batch_geochat_scene.py # 场景分类评测
└── batch_geochat_vqa.py # VQA评测
GeochatMetaForCausalLM 中定义了 encode_images() 方法,负责调用视觉编码器提取特征并通过投影层映射;prepare_inputs_labels_for_multimodal() 则处理多模态输入的融合逻辑,是整个模型的核心入口。
项目提供了 geochat_demo.py 脚本,通过 Gradio 构建交互式 Web 界面。启动后支持两种输入模式:
demo.py 中包含完整的旋转边界框处理逻辑(bbox_and_angle_to_polygon、rotate_bbox),这是为了支持遥感图像中常见的非轴对齐目标(如斜向建筑)。部署时只需准备好模型权重路径,通过以下命令即可启动:
python geochat_demo.py --model-path <huggingface_model_path> --device cuda
模型权重可从 HuggingFace 的 MBZUAI/GeoChat 下载。
GeoChat 是一款高资源依赖的研究级项目:
不支持 Windows 系统,Linux/macOS 环境为佳。
GeoChat_Instruct 数据集是本项目的核心资产之一,团队通过以下方式构建 318K 高质量指令数据:
① VQA 数据增强:从现有遥感 VQA 数据集(RSICD、UCM、Sydney等)中提取问答对,用 Vicuna 7B 扩写为更自然、更丰富的对话形式。
② 区域指代生成:给定图像中的目标标注,Vicuna 生成描述该目标的自然语言指代表达。
③ 图像描述增强:用 BLIP 生成的初始描述作为种子,Vicuna 改写为多角度、多层次的详细描述。
最终数据集保存在 HuggingFace:https://huggingface.co/datasets/MBZUAI/GeoChat_Instruct
GeoChat 并非完美,其局限性值得关注:
训练数据偏向特定遥感场景:318K 数据集中在公开遥感数据集上,对极端天气条件、军事设施等敏感场景覆盖有限。
旋转目标检测精度待提升:尽管支持旋转边界框输出,但在密集小目标场景(如城市高密度建筑区)中召回率仍有提升空间。
依赖 CLIP 视觉编码器的固有问题:CLIP 在遥感图像上的预训练数据以自然图像为主,对某些特定地物(如油罐区、光伏电站)的识别能力受限于 CLIP 本身的预训练知识。
不支持视频/时序遥感数据:当前版本仅支持单帧静态图像分析,不能处理多时相遥感变化检测等任务。
GeoChat 的发布标志着遥感智能分析正式进入「对话式」时代。传统遥感解译依赖专业人工,效率低、成本高;而基于大模型的交互式遥感分析,使得非专业用户也能快速获取遥感图像洞察。
从技术趋势看,遥感 VLM 将沿着以下方向演进:
GeoChat 作为该方向的开创性工作,为后续遥感多模态研究奠定了重要基础,值得 AI 研究者和遥感从业者重点关注。
项目链接:GitHub | arXiv | HuggingFace