资讯详情

遥感影像语义分割实战:基于UNET的滑坡识别与数据集构建

📅 2026/10/20 12:22:46 | 华诺云谱 👁 阅读
遥感影像语义分割实战:基于UNET的滑坡识别与数据集构建
做遥感影像语义分割这些年我越来越觉得滑坡识别是个非常典型的落地场景数据集不好凑、标注成本高、边界还天然模糊。但只要把“数据”和“模型”这两条腿站稳了做出来的东西是真能往地质灾害预警和灾后评估系统里塞的不是那种只能跑个Demo交差的玩具。这个任务本质上要解决的是“像不像滑坡”的像素级分类问题核心产出是训练好的UNET模型以及背后支撑它的一整套高分辨率遥感影像数据集。整套东西能做的事很明确输入一张山区遥感图输出一张像素级滑坡分布图每块滑坡的边界、面积、形态一目了然。适合刚入门遥感深度学习、准备从零搭建训练数据集和分割模型的人参考也适合已经在做类似任务但精度迟迟上不去的朋友对照排查。我把一个完整的“样本UNET训练调试”思路和过程中踩过的大坑整理在下面希望对你有实际帮助。1. 先搞清楚任务本质为什么滑坡识别要用“分割”而不是“检测”1.1 滑坡体不是一个框能框住的东西很多人接手滑坡识别任务时第一反应是“这不就是个目标检测吗”——划个矩形框把滑坡框住就行。但干过遥感这行的人应该都明白滑坡体根本不是规规矩矩的矩形目标。滑坡体的形态千奇百怪有的沿着沟谷拉伸成条带状有的在坡脚堆成扇形有的分叉、断裂、被植被部分遮挡。边界线也谈不上锐利滑体与周边地物之间往往是一个渐变过渡带。这时候如果用检测框去表达框里会混入大量背景框外又会丢掉一部分真实滑坡体后续做面积量算、灾害范围评估时误差非常大。语义分割模型输出的是一张和原图同尺寸的像素级掩膜每一个像素都被判断为“滑坡”或“非滑坡”这就把目标从“大概在哪一块”升级成了“精确到哪个像素”。这个精度等级才是地质灾害预警和灾后评估需要的。1.2 UNET为什么最适合这种任务我把UNET当作用在滑坡识别上的首选基线模型理由有几点。第一UNET是U型对称结构左侧编码器不断下采样提取抽象特征右侧解码器逐步上采样恢复空间分辨率。它天然保留了一个关键机制——跳跃连接skip connection把编码器不同尺度的细粒度特征直接拼到解码器对应层。这意味着网络在做像素分类时既能“看”到高层语义这是不是滑坡又能“看”到浅层的细节纹理滑坡的边界具体画在哪对恢复滑坡边界这种需要精细定位的任务来说非常关键。第二UNET参数量相对可控对遥感小样本场景比较友好。我在实际项目中会做大量的对比实验UNET作为基线训练成本低迭代周期短一个晚上能跑好几轮配置这在数据验证阶段非常重要。第三UNET这些年衍生出大量成熟变体比如UNet、ResUNet、Attention UNet遇到任务收敛困难或精度瓶颈时可以平滑地做结构升级。先跑通数据流水线再用变体去提点比一上来就上大模型稳妥得多。1.3 高分辨率遥感数据在任务里的真正价值滑坡识别里“高分辨率”这三个字不是营销话术而是直接影响模型能力的核心参数。低分辨率影像比如十几米级别的多光谱数据能看出“这里地表裸露”“那里地形有扰动”但看不出滑坡体的纹理边界、碎石堆积结构、局部植被破坏程度。模型学的特征是粗颗粒的预测出来的掩膜也粗糙边缘经常差出好几十米。高分辨率遥感影像0.5~2米级别则能提供丰富的光谱纹理信息滑体裸露土壤与周边植被的色调差异、坡体表面冲刷纹理、堆积区块石分布等这些都是模型判断滑坡范围的关键线索。我做过的对比实验里同一套UNET结构只用影像分辨率这一个变量从10米切到1米模型mIoU能直接拉开10个点以上。1.4 数据集在整条链路里的位置很多初学者以为“模型是核心数据只是喂进去的原料”这个理解在遥感任务里害人不浅。真正做过项目的人都明白数据决定了精度的天花板模型只是决定你离天花板有多近。滑坡识别面临一个天然困境——正样本稀缺。滑坡不是随处都有天然滑坡、工程滑坡的公开数据集少得可怜。滑坡形态又高度多样化不同地质背景、不同地形、不同植被覆盖下的滑坡体看起来完全是两回事。所以构建一份高质量的遥感滑坡分割数据集是整个项目里最耗时、也最决定成败的环节。2. 高分辨率遥感滑坡数据集的构建过程2.1 影像收集与初步筛选构建数据集第一步是收集影像。我的经验是一份用于滑坡分割的数据集要从“区域覆盖、时相覆盖、形态覆盖”三个维度去圈定样本。区域覆盖指的是样本不能集中在同一地质单元。不同地区的滑坡在色调、纹理、地形组合上差异很大。如果训练集全来自同一个流域模型换到另一个地质背景的区域精度下降会非常明显。我通常按地貌单元分类收集比如高山区、中山区、丘陵区各取一部分。时相覆盖要兼顾灾害发生前后的影像。灾前影像里的滑坡位置往往还是完整植被或稳定坡体可作为负样本背景灾后影像里则呈现清晰裸露滑面。两个时相的数据搭配能让模型学到“当前状态看起来像不像滑坡”的模式而不是简单对比变化。形态覆盖要考虑不同尺度、不同活动状态的滑坡。有的滑坡体横跨数百米有的只是几十米的小型浅层滑坡有老滑坡堆积体与植被交错有新鲜滑动面几乎无植被覆盖。这些在标注时要尽量均衡纳入。初筛完成后我会做一次快速的目视检查。凡是关键区域被云、雾或阴影严重遮挡的影像直接淘汰这类样本就算强行标注也会变成模型训练时的噪声来源。2.2 标注规范单类还是细分边界怎么定遥感分割数据集的标注质量直接决定模型预测效果。这里没有“标得差不多就行”的说法。像素级标注是零和博弈一个像素标错了模型就要学着去预测这个错误。标注前必须先制定规范我建议在滑坡任务里至少明确三点。第一标签体系怎么定。如果只做“滑坡/背景”二分类会把问题简化不少但如果在后期要做灾害评估通常会把滑坡体拆成“滑源区”和“堆积区”分别标注。滑源区指滑坡体上部的滑面裸露区堆积区指滑体物质在坡脚形成的堆积体。这两类在实际预警评估里的意义不同分开标注能让模型学到更细的结构知识虽然标注成本会上升但收益也明显。第二边界怎么画。滑坡体边界是一个主观判断空间很大的事情不同标注员对同一块滑坡画出的轮廓可能差几十个像素。我的处理方式是以裸露地表与周边正常植被的过渡带中线为边界对边界上模棱两可的像素统一按背景处理。宁可少标一两个像素也不要随手把边界往外扩。第三小样本怎么补。单张影像上的滑坡可能只占全图很小一块一个512x512切片里可能只有几千个正像素。这种极度不平衡的情况需要在标注时对包含滑坡的区域做重复切片或者用裁剪的方式局部放大小滑坡样本保证每个切片里正样本占比不至于过低。标注工具我用过QGIS手动勾画和LabelMe画多边形也用过半自动分割工具先预标注再人工修正。如果样本量很大推荐先跑一个粗糙的预分割模型把“疑似滑坡”的区域先圈出来标注员只需要修正轮廓效率能提升不少。2.3 切片策略怎么把大影像切成训练样本高分辨率遥感影像非常大一张可能上万乘上万个像素直接丢进网络训练基本不可能。标准做法是切片也叫裁剪成patch。我的输入切片尺寸通常是512x512像素。切片策略里有一个非常影响精度的细节——切片重叠率。如果直接用滑动窗口无重叠切滑坡体刚好被切在窗口边缘的概率很高边缘处原本完整的滑坡形态会被截断模型学到一堆残破样本。我在训练切片的相邻窗口之间设置15%~25%的重叠率确保每个滑坡形态大概率在某一个完整窗口内部出现过。推理阶段也一样模型预测时用带重叠的滑动窗口推理然后对重叠区域做加权平均比如中心像素权重大、边缘权重小能明显减少最终拼接结果里的接缝伪影。切片划分完还要做一次清洗把那些整片都是背景、一个正像素都没有的切片删掉或者降采样保留一部分作为困难负样本。滑坡识别里的“负样本太简单”会让模型收敛到一种懒惰解——什么都不输出损失也很低因为背景占绝大多数。2.4 数据划分训练集、验证集、测试集不能乱分滑坡分割数据划分有个反直觉的坑不能按切片随机划分。因为同一景影像生成的很多切片在光照条件、地形地貌、土壤颜色上高度相似如果随机划分训练集和验证集里会混入大量来自同一影像的“近亲样本”验证指标虚高。等模型换到一张全新影像上时精度立刻打回原形。正确做法是按“影像景”划分保证同一景影像的所有切片要么全部进训练集要么全部进验证集或测试集。这样才能模拟真实使用场景——模型在完全没见过的影像上表现如何。我通常按区域锁定的方式做6:2:2的划分测试集单独保留一个完全独立的区域。数据增强方面遥感影像的增强要小心。旋转和翻转没问题滑坡几何形态翻转后仍然是滑坡。但做随机亮度、对比度扰动时要克制遥感影像的光谱响应有一定的物理一致性过度的色彩抖动会让模型依赖的光谱特征失真。我习惯统一用细微的亮度对比度扰动加水平垂直翻转再做少量随机裁剪。3. UNET模型搭建与训练配置3.1 模型结构选型Encoder怎么选经典UNET的编码器主干是从零训练的四层卷积堆叠在数据量有限时效果一般。我给滑坡识别项目选的是带预训练权重的编码器主干通常用ResNet34或ResNet50。为什么加预训练骨干遥感影像和自然图像虽然在成像机制上不同但浅层特征——边缘、纹理、颜色块、局部形状——是通用的。用ImageNet上的预训练权重做初始化相当于让模型在起点上就拥有了一个“能看懂基本视觉元素”的底座训练收敛更快、精度更高。这里有一组我非常推荐的固定配置编码器输出5个不同尺度的特征图解码器逐步上采样并与编码器对应层拼接最终通过1x1卷积输出类别分数。这种结构在处理陡峭地形、小尺度滑体时比原始UNET更有韧性。3.2 损失函数组合Dice loss与Focal loss怎么配滑坡分割最大的训练难题是极端类别不平衡大多数512x512切片里滑坡区域可能还不到总像素数的5%。如果直接用交叉熵CE损失模型很容易陷入“全预测为背景”的局部最优解因为全预测背景也有95%以上的正确率。需要设计损失函数去强制模型关注正样本。我在项目里用的是Dice loss和Focal loss的加权组合比例大约是7:3。Dice loss直接优化预测掩膜与真实掩膜的重叠程度对类别不平衡有天然抵抗力。Focal loss则能降低简单背景样本的损失权重让模型把注意力投向那些难分的滑坡区域比如部分被植被覆盖、边界模糊的滑体。一个小技巧如果想保持模型的稳定性前几个epoch可以只用CE或者Dice loss训练等模型进入稳定收敛区间再加Focal loss的权重。一开始就叠加不同损失容易让训练曲线剧烈震荡。3.3 评价指标别只盯着准确率滑坡分割模型不能用准确率评判原因和前面说的一样——背景占比太高全预测背景也有很高的准确率。没意义。我用三个核心指标评价模型mIoU平均交并比预测掩膜和真实掩膜交集面积除以并集面积严格且直观。F1分数在Dice指标上等价于F1兼顾查准率和查全率适合滑坡这类“漏检和误检都有代价”的任务。像素精度PA只做参考看个趋势即可不作为主要决策依据。实际项目中模型在滑坡区域的“边界IoU”也是我非常关注的指标。做法是只取真实滑坡体边界周围8个像素以内的区域计算那里预测的正确率。滑坡边界判定的准确度直接影响灾后评估里灾害范围的精度。3.4 训练超参数一份可以照抄的配置单直接给一份我自己在滑坡识别项目里用得比较顺手的训练配置参数配置值说明输入切片尺寸512x512兼顾细节与显存占用Batch Size8在单张24GB显卡上的稳定选择编码器主干ResNet34预训练精度/训练速度的平衡点优化器AdamW权重衰减设为1e-4学习率5e-4配合余弦退火前3个epoch用线性warmup训练轮数80~120配合早停patience15损失函数Dice loss:Focal loss 7:3针对类别不平衡数据增强翻转、细微抖动、随机裁剪不做激进色彩扰动训练过程中每10个epoch我会保存一次checkpoint并且始终保留验证集mIoU最高的一版。很多人习惯保留最后一轮模型但如果后期过拟合最后一轮往往不如中期那版。4. 训练过程中真实踩过的坑和排查思路4.1 滑坡边缘锯齿感严重轮廓不平滑第一次跑完模型预测出来的滑坡边缘明显锯齿感像低分辨率像素画完全拿不出手。排查下来有三个主要原因。一是原始标签本身边缘就标得不精细滑坡与背景边界本身存在过渡带标注时如果一味追求“一刀切”反而会放大锯齿。二是模型在边界像素上的置信度低局部起伏导致掩膜抖动。三是在推理后处理阶段用简单阈值硬切没有做空间平滑。我的解决办法分两步。第一步是数据侧在标注环节尽量让边界线条平滑用曲线工具而不是折线工具。第二步是模型侧在训练时给边界区域更高的损失权重。具体做法是计算一个边界权重图对真实滑坡掩膜做腐蚀和膨胀取差值得到边界带在边界带的像素上把损失权重乘上2。4.2 阴影、道路、裸露采石场被识别成滑坡这是滑坡识别任务里最经典的误检组合道路切坡形成的裸露岩面、河滩沙地、采石场、甚至山体阴影在影像上看起来非常像滑坡。我一开始以为这个能靠模型结构解决后来发现纯视觉信息在这类误检面前是不够的。如果数据里包含了DEM数字高程模型可以让模型额外输入坡度和坡向作为附加通道。滑坡多发生在特定坡度区间道路和采石场往往在人工修整过的平缓地带坡度特征一叠进去这类误检立刻大幅减少。如果手头没有DEM就要在数据多样性上下功夫增加大量道路切坡、采石场、裸岩的负样本让模型见过足够多“长得像滑坡但不是滑坡”的东西。经验是负样本的“像”远比负样本的“多”重要。4.3 显存溢出训练直接崩掉高分辨率影像配深编码器很容易触发显存溢出。新手第一反应是缩小输入尺寸但这会丢掉滑坡细节不推荐。我的处理顺序是先缩小Batch SizeBatch从8降到4甚至2梯度累积补偿回Batch Size的等效效果。如果还溢出检查编码器下采样倍数用ResNet34替代ResNet50。实在不行再用混合精度训练显存占用能再降三分之一而且现代显卡上训练速度反而更快。这里提醒一个细节如果开了梯度累积需要同步放大部分学习率否则模型收敛速度会变慢。4.4 验证集mIoU上下波动严重模型不稳定如果验证集上的精度一会儿0.65一会儿0.45波动幅度很大多半不是模型问题而是验证集本身不够稳定。首先要检查验证集的负样本是不是像“开盲盒”。某些切片里只有一点点滑坡模型偶发误检几个像素就会导致IoU大起大落。建议验证集切片尽量包含更多完整的滑坡形态让指标本身更稳定。其次要检查数据划分是否泄漏。前面说的按“影像景”划分如果没做到模型可能已经让训练集里的信息泄漏进了验证集导致指标忽高忽低。5. 从模型到业务的落地扩展方向5.1 多源数据融合别再只喂RGB滑坡识别做到后面单纯靠光学影像提取特征是有瓶颈的。我在后期项目中加入了几类补充数据多光谱波段特别是近红外波段对植被覆盖变化非常敏感能有效刻画滑坡导致的植被破坏。DEM衍生的坡度、坡向、地形起伏度对滑坡易发地形建模帮助很大。SAR影像纹理特征能穿透云层在灾害应急场景下尤其有价值。这些多源数据可以像附加通道一样拼接进模型输入。需要注意的是输入通道数改变了编码器第一层卷积就要做相应调整预训练权重的匹配部分需要特殊处理。5.2 结合变化检测灾前灾后一起看对于灾后快速评估场景单独分割一张灾后影像还不如“灾前灾后”联合输入的效果好。把灾前和灾后影像配对输入模型让网络同时看到变化前后的状态模型能更准地定位“新增滑坡”区域同时剔除常年裸露的旧滑坡体和稳定裸岩。这种变化检测思路在实战中非常实用。前段时间我用同一套UNET结构把输入改成双时相拼接模型在新增滑坡发现率上比单时相方案提升了大概10个百分点。代价是数据需要成对标注构建成本更高。5.3 后处理与工程化部署的细节模型训完不是终点要真正放进智慧防灾系统里跑还有几件事绕不开。一是推理接缝处理。大影像切片推理后的拼接结果重叠区域直接用平均会导致接缝模糊用加权融合中间重、边缘轻能获得平滑的过渡。二是小图斑过滤。预测出来的mask里经常存在零散的孤立小区域这些通常不是真实的滑坡体。按形态学连通域分析过滤掉像素面积低于阈值的小块能让最终成果图干净很多。三是滑坡面积量算。把预测掩膜投影到真实地理坐标按像素分辨率换算实际面积一套标准的“识别-分割-面积量算”流水线就打通了。从提出这个任务到训练集构建、模型搭建、训练调参、最终能跑出稳定可用的滑坡识别结果我最大的感受是数据质量差的时候调模型参数只是在骗自己。先花时间把数据集做实做细比什么先进结构都管用。另外滑坡识别没有放之四海皆准的模型不同地质环境下表现差异巨大先跑通流程再针对自己区域的数据特点做迭代才是效率最高的路径。最后分享一个我自己的小习惯每次训练完我会把模型预测最差的一批样本单独导出截出来一张一张看是哪里出了问题然后回到数据层补样本或调整标注。反复做几轮精度自然就上去了。这个过程没有捷径但每一轮都会有实质收益。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑