GeoAI 教程:使用 U-Net、Grounding DINO、SAM 和 Mask R-CNN 从 NAIP 影像中提取建筑足迹
本教程演示了从高分辨率 NAIP 航空影像中提取建筑足迹的完整 GeoAI 工作流,涵盖环境配置、数据下载、U-Net 语义分割模型训练、滑窗推理、矢量化与规则化、精度评估,以及基于 Grounding DINO 和 SAM 的零样本分割和 Mask R-CNN 实例分割对比。教程还展示了将流程扩展到 Microsoft Planetary Computer 和 Overture Maps 真实数据的方法。
本教程旨在构建一个完整的地理空间人工智能(GeoAI)工作流,用于从高分辨率 NAIP 航空影像中自动提取建筑足迹。作者首先配置了支持 GPU 的深度学习环境,并安装了 geoai-py、segmentation-models-pytorch 等必要的 Python 库。随后,从 Hugging Face 数据集下载了示例 NAIP 影像(训练与测试场景)以及对应的建筑标注 GeoJSON 文件,并通过栅格信息查看、矢量文件探索等方式检查数据的空间属性,确保后续处理的坐标参考一致性。
在数据准备阶段,教程将训练影像和标签切割为 512×512 像素、步长为 256 像素的图像块(chip),并生成对应的二值分割掩膜。作者使用基于 ResNet-34 编码器的 U-Net 模型进行语义分割训练,设置了 12 个 epoch、批量大小 8、学习率 1e-3 等超参数,并在训练过程中采用早停和检查点保存策略。通过绘制训练损失和验证 IoU 曲线,用户可以直观地判断模型是否过拟合或欠拟合,并找到验证 IoU 最高的模型权重作为后续推理的输入。
完成训练后,作者利用滑窗推理方法对未参与训练的测试影像进行预测,同时输出预测掩膜和概率图。为了得到干净的矢量建筑轮廓,代码首先通过区域分组过滤掉小于 50 像素的噪声区域,然后将掩膜栅格转换为多边形,并依次进行正交化(直角化)和规则化(简化容差)处理,最终生成具有面积、周长、致密度、延伸率和方向等几何属性的建筑足迹 GeoJSON 文件。作者还对比了原始多边形化结果与规则化后的结果,展示后处理步骤对边界质量的重要提升。
为了定量评估模型精度,教程将训练影像的预测结果与真实标签进行像素级对比,计算了建筑类别的 IoU 和 F1 指标。作者特别提醒,背景类因样本数量巨大导致 IoU 虚高,真正需要关注的是建筑类别的指标。此外,教程还演示了零样本分割路径:利用 Grounding DINO 作为文本提示检测器、SAM 作为分割模型,仅通过输入“building”“house”“rooftop”等文本即可提取测试影像中的建筑区域,而无需任何额外训练。最后,作者引入了一个预训练的 Mask R-CNN 模型(building_footprints_usa.pth)进行实例分割,并对分割结果进行规则化处理,与之前的语义分割方法形成对比。
为了验证流程的实用性,教程还说明了如何将同样的管道扩展到真实世界区域:使用 Microsoft Planetary Computer 提供的 NAIP 影像以及 Overture Maps 的建筑标注数据集,只需替换数据源即可轻松应用。整个教程以模块化函数(step1 至 step10)组织,每个步骤都带有详细的代码注释和可视化输出,既适合刚接触 GeoAI 的开发者,也便于研究者快速复现和调整参数。