遥感影像提取建筑物?深度学习模型咋训练?

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

很多同学第一次做遥感影像提取建筑物?深度学习模型咋训练?这个任务时,最容易卡在三个地方:样本怎么标、影像怎么切片、模型训练后为什么看起来“能跑但提不准”。这篇文章按 GIS 项目的真实流程,讲清楚用遥感影像提取建筑物时,深度学习模型从数据准备到结果检查应该怎么做。

遥感影像提取建筑物 深度学习模型训练流程
遥感影像提取建筑物的典型深度学习训练流程:从标注样本到模型预测,再到矢量化和精度检查。

引言:先明确建筑物提取到底要输出什么

在开始训练深度学习模型之前,先不要急着装框架、找代码。遥感影像提取建筑物通常有两类输出目标:

  • 栅格掩膜:每个像元被判断为“建筑物”或“非建筑物”,适合后续做面积统计、覆盖率分析。
  • 建筑物矢量面:输出一个个建筑物轮廓 Polygon,适合入库、制图、空间查询和人工审核。

深度学习模型本身通常先输出栅格掩膜,后续再通过栅格转面、边界简化、孔洞处理等步骤得到建筑物矢量。因此,训练阶段不要只看模型 loss 是否下降,更要关注最终 GIS 成果是否能被使用。

背景:为什么遥感影像提取建筑物不只是“跑一个模型”

建筑物在遥感影像中看似明显,但模型训练会遇到很多 GIS 相关问题。比如同一个城市中,老城区屋顶密集,新区建筑间距大,工厂屋顶和道路颜色接近,阴影又会覆盖建筑边缘。模型如果只在少量样本上训练,很容易出现漏提、粘连、边界粗糙等问题。

常见的输入数据包括:

  • 0.2 米到 1 米分辨率的航空影像或卫星影像。
  • RGB 三波段影像,或包含近红外波段的多光谱影像。
  • 人工勾绘的建筑物面数据,通常为 Shapefile、GeoPackage 或 GeoJSON。
  • 已有建筑物底图,如自然资源调查数据、OSM 建筑物数据、历史测绘成果。

如果你的目标是做生产级建筑物提取,建议优先保证标注质量和影像一致性,而不是一开始就追求复杂模型。很多失败项目不是模型太弱,而是训练样本空间参考错了、标注边界不准、训练区和预测区差异太大。

原理:深度学习模型如何从遥感影像中识别建筑物

遥感影像提取建筑物常用的是语义分割。语义分割的意思是:模型对影像中的每个像元进行分类,判断它属于建筑物还是背景。常见模型包括 U-Net、DeepLabV3+、PSPNet、SegFormer 等。

训练时,模型需要两类数据:

  • 影像切片:例如 512×512 或 1024×1024 像素的小图。
  • 标签掩膜:与影像切片一一对应,建筑物像元为 1,背景像元为 0。

模型通过不断比较预测掩膜和真实标签掩膜之间的差异,调整参数。训练完成后,模型可以对新的遥感影像切片进行预测,再拼接回完整区域。

从 GIS 角度看,深度学习只是中间环节。真正可交付的成果还需要坐标正确、边界可用、属性完整、精度可解释。

步骤:遥感影像提取建筑物深度学习模型训练流程

步骤一:准备遥感影像并统一坐标系

首先检查影像是否有正确的空间参考。建筑物标注数据和遥感影像必须在同一个坐标系下,否则生成标签时会整体偏移。

  • 在 QGIS 或 ArcGIS Pro 中加载影像和建筑物矢量。
  • 检查两者是否重叠。
  • 查看坐标系是否一致,例如 CGCS2000、WGS 84、UTM 或地方投影坐标系。
  • 如果不一致,先重投影矢量数据,不要简单修改坐标系定义。

建议训练用影像采用投影坐标系,尤其是后续需要计算建筑面积时。经纬度坐标系虽然能显示地图,但直接计算面积容易产生误差。

步骤二:整理建筑物标注数据

建筑物标签质量直接决定模型上限。训练前建议对建筑物矢量做一次数据清洗。

  • 删除明显错误的建筑物面,例如落在水体、道路中央或影像外的面。
  • 修复无效几何,如自相交 Polygon。
  • 检查建筑物边界是否与影像屋顶对齐。
  • 处理重复面、极小面和异常细长面。
  • 确保标签只包含建筑物,不要把硬化地面、广场、停车棚全部混入。

如果使用 OSM 建筑物数据作为标签,要特别小心。OSM 覆盖范围不均匀,部分城市建筑缺失较多,直接训练可能会把未标注建筑当成背景,导致模型学错。

步骤三:把矢量建筑物转成训练掩膜

深度学习训练通常需要栅格标签,因此要把建筑物面转换成与遥感影像同分辨率、同范围、同坐标系的二值掩膜。

可以使用 GDAL、QGIS 栅格化工具或 ArcGIS Pro 的 Polygon to Raster 工具。关键参数包括:

  • 输出像元大小必须和原始影像一致。
  • 输出范围必须和影像切片范围一致。
  • 建筑物像元值设为 1,背景设为 0。
  • NoData 区域要明确处理,不要混入正常背景。
gdal_rasterize -burn 1 -tr 0.5 0.5 -te xmin ymin xmax ymax 
  -ot Byte -of GTiff buildings.gpkg building_mask.tif

上面的命令只是示意。实际使用时,需要把 xmin ymin xmax ymax 替换为影像范围,并确保 -tr 的分辨率与遥感影像一致。

步骤四:切分影像和标签

大幅遥感影像不能直接丢进模型训练,需要切成固定大小的小块。常见切片尺寸为 256、512 或 1024 像素。建筑物提取一般推荐从 512×512 开始,兼顾上下文信息和显存占用。

  • 影像切片和标签切片必须一一对应。
  • 切片时可以设置重叠,例如 64 或 128 像素,减少边缘预测断裂。
  • 删除几乎全是 NoData 的切片。
  • 不要只保留建筑物很多的切片,也要保留一定比例的背景样本。

如果背景样本太少,模型会把道路、裸地、停车场误判为建筑物。如果建筑物样本太少,模型又容易倾向于全部预测为背景。

步骤五:划分训练集、验证集和测试集

不要随机把所有切片打散后简单划分。遥感影像切片之间存在空间相邻关系,随机划分可能导致训练集和验证集非常相似,验证精度虚高。

更合理的做法是按空间区域划分:

  • 训练集:用于模型学习,约占主要样本区域。
  • 验证集:用于调参和观察过拟合。
  • 测试集:独立区域,用于最终评估。

如果要把模型用于另一个城区或另一个城市,测试集最好选择与训练区不同的区域,这样更接近真实应用。

步骤六:选择模型和训练参数

入门训练建筑物提取模型,可以从 U-Net 或 DeepLabV3+ 开始。它们资料多、实现成熟,适合 GIS 学习和项目原型验证。

参数 建议 说明
切片大小 512×512 多数建筑物提取任务的稳妥起点
批大小 根据显存设置 显存不足时优先减小 batch size
损失函数 BCE、Dice Loss 或组合损失 建筑物与背景不平衡时 Dice Loss 更常用
学习率 从较小值开始 过大会震荡,过小会训练很慢
数据增强 翻转、旋转、亮度变化 提高模型对不同屋顶和光照的适应能力

如果使用 Python 训练,常见技术栈包括 PyTorch、TensorFlow、Rasterio、GDAL、OpenCV 和 Albumentations。GIS 数据读写建议保留地理参考信息,预测后再写回 GeoTIFF。

步骤七:预测整幅影像并拼接结果

模型训练完成后,需要对完整遥感影像进行滑窗预测。由于输入仍然是切片,预测结果要重新拼接回原始空间位置。

  • 使用与训练阶段相同的归一化方式。
  • 预测时设置重叠区域,降低切片边界断裂。
  • 对重叠区域可以取平均概率或中心区域结果。
  • 输出概率图和二值图,方便后续调整阈值。

不要只保留 0/1 二值结果。概率图能帮助你判断哪些区域模型不确定,比如阴影边缘、屋顶材质复杂区域、建筑和道路颜色接近区域。

步骤八:后处理为建筑物矢量

很多 GIS 项目最终需要建筑物面。模型预测得到二值栅格后,可以进行以下后处理:

  • 去除小斑块,过滤面积过小的噪声。
  • 填补建筑物内部小孔洞。
  • 栅格转面,生成 Polygon。
  • 边界简化,减少锯齿。
  • 按面积、形状、位置进行二次筛选。

但要注意,边界简化不能过度。过度简化会让建筑物轮廓偏离真实屋顶,影响后续面积统计和空间分析。

常见坑:模型能训练但建筑物提取结果很差

坑一:影像和标签有轻微偏移

即使偏移只有几个像素,也会严重影响建筑物边界学习。模型会学到模糊边缘,预测结果容易变粗、变散。

  • 在 QGIS 中放大到建筑物边界检查。
  • 对比屋顶角点和矢量角点是否对齐。
  • 检查是否存在错误投影、错误基准面或影像配准问题。

坑二:训练样本只覆盖一种城市形态

如果训练样本只来自高层住宅区,模型到工业园区、城中村、农村居民点时可能明显失效。建筑物提取任务需要覆盖不同屋顶颜色、建筑密度、阴影条件和地物背景。

坑三:把未标注建筑当成背景

这是遥感影像提取建筑物中非常常见的问题。标签漏标时,模型会被迫学习“这个明显是建筑物的地方也属于背景”,最终导致漏提。

坑四:只看总体准确率

如果背景区域很多,即使模型几乎不提建筑物,总体准确率也可能很高。建筑物提取更应该关注 IoU、Precision、Recall 和 F1-score。

  • Precision:提取出来的建筑物有多少是真的。
  • Recall:真实建筑物有多少被提取出来。
  • IoU:预测建筑物和真实建筑物的重叠程度。
  • F1-score:综合考虑 Precision 和 Recall。

方法比较:传统方法、深度学习和人工矢量化怎么选

方法 适用场景 优点 限制
人工矢量化 小范围、高精度成果 边界质量高,可人工判断复杂场景 成本高,速度慢,不适合大范围更新
规则方法 影像条件稳定、建筑特征明显 实现简单,解释性强 对阴影、屋顶颜色变化、复杂背景适应差
深度学习语义分割 大范围建筑物自动提取 适应复杂纹理,效率高,可批处理 依赖高质量样本,需要训练和验证
深度学习加人工审核 实际生产项目 兼顾效率和成果质量 需要建立审核流程和质检标准

如果你只是学习遥感影像提取建筑物,可以从小范围样本和 U-Net 模型开始。如果是工程项目,更推荐“深度学习初提取 + GIS 后处理 + 人工质检”的组合流程。

检查清单:训练建筑物提取模型前后要核对什么

训练前检查

  • 影像和建筑物标签是否在同一坐标系下。
  • 建筑物矢量是否与屋顶边界对齐。
  • 标签中是否存在大量漏标、错标、重复面。
  • 影像是否有 NoData、云雾、阴影或拼接色差。
  • 切片尺寸、分辨率和标签范围是否一致。
  • 训练集、验证集、测试集是否按空间区域划分。

训练中检查

  • 训练 loss 和验证 loss 是否同时下降。
  • 是否出现训练集很好、验证集很差的过拟合。
  • 预测样例中建筑物边界是否明显偏移。
  • 模型是否把道路、广场、裸地误判为建筑物。
  • 模型是否漏掉深色屋顶、小建筑或阴影区域建筑。

成果交付前检查

  • 预测栅格是否保留正确空间参考。
  • 矢量化结果是否有大量碎斑和孔洞。
  • 建筑物面是否存在明显粘连。
  • 面积统计是否使用投影坐标系。
  • 抽样区域是否经过人工目视核查。
  • 是否记录模型版本、训练样本范围和主要参数。

FAQ:遥感影像提取建筑物常见问题

遥感影像提取建筑物一定要用深度学习吗?

不一定。小范围、高精度任务可以人工矢量化;影像条件非常稳定时也可以尝试规则方法。但如果是大范围、多场景的建筑物自动提取,深度学习通常更有优势。

训练建筑物提取模型需要多少样本?

没有固定数量。比数量更重要的是样本多样性和标注质量。样本应覆盖不同建筑类型、屋顶颜色、密度、阴影和背景环境。少量高质量、多场景样本往往比大量重复样本更有价值。

为什么模型把道路也识别成建筑物?

常见原因是道路、硬化地面和屋顶在影像中颜色纹理相似,或者训练样本中背景类型不够丰富。可以增加道路、广场、停车场等负样本,并使用更好的数据增强和后处理规则。

建筑物边界锯齿很多怎么办?

这是栅格分割转矢量后的常见现象。可以提高输入影像分辨率、优化标签边界、使用重叠预测,并在矢量化后做适度边界简化。但不要为了好看而过度简化,否则会影响面积和位置精度。

可以直接用网上预训练模型提取本地建筑物吗?

可以作为初步测试,但不建议直接用于正式成果。不同地区的建筑样式、影像分辨率、传感器和季节差异很大。更稳妥的做法是在本地样本上微调模型,并用独立测试区评估效果。

建筑物提取结果如何做精度评价?

建议同时做像元级和对象级评价。像元级可以看 IoU、Precision、Recall、F1-score;对象级可以抽样检查建筑物是否漏提、误提、粘连,以及轮廓是否满足项目要求。

结论:训练模型前先把 GIS 数据流程理顺

遥感影像提取建筑物并不是简单地下载一个深度学习模型就能完成。真正影响成果质量的,是影像坐标、标签质量、切片策略、样本划分、模型训练、后处理和精度检查这一整套流程。

对 GIS 学习者来说,建议先用一个小区域完整跑通流程:影像准备、建筑物标注、标签栅格化、模型训练、预测拼接、矢量化、人工检查。等你能解释每一步为什么这样做,再扩大到更大的城市区域,建筑物提取结果才会更稳定、更可用。