ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于可迁移深度模型的高分辨率遥感影像土地覆盖分类实战

基于可迁移深度模型的高分辨率遥感影像土地覆盖分类实战

1. 从一张高分影像说起:为什么土地覆盖分类值得用迁移学习重做一遍

手里有一景亚米级的高分辨率遥感影像,打开看第一眼,地物边界清清楚楚——建筑轮廓、道路边线、农田田埂、树冠形状,几乎肉眼可辨。但真要把这些像素逐个贴上"建筑""耕地""林地""水体"的标签,事情立刻变得棘手。传统做法是人工勾绘样本、设计特征、训练分类器,一轮下来少则几周,多则几个月,换一个城市、换一个季节、换一颗卫星,模型精度断崖式下跌。这个痛点,做遥感解译的人几乎都经历过。

这篇要聊的,就是怎么用可迁移深度模型把高分辨率遥感影像的土地覆盖分类做扎实。核心思路不复杂:先在数据量充足、标注质量高的源域上预训练一个深度网络,再通过迁移学习把它适配到目标域——可能是另一个城市、另一种传感器、另一个季节的影像。关键词里的transferable deep models、land-cover classification、high-resolution remote sensing images,对应的正是这条技术路线上的三个关键环节:模型怎么选、迁移怎么做、分类精度怎么保。

适合谁看?如果你正在做遥感影像语义分割、土地利用现状调查、城市扩张监测,或者手头标注样本少、换域泛化差,这篇内容能直接对上你的问题。如果你只是刚接触深度学习遥感,也能从里面的选型逻辑和踩坑记录里少走弯路。我不打算写成论文综述,而是按一个实际项目推进的顺序,把每个决策背后的"为什么"讲清楚,把能直接抄的参数和步骤摆出来。

2. 高分辨率影像的"三高"难题与迁移学习的切入点

2.1 高分辨率带来的不是清晰,而是类内方差爆炸

很多人以为分辨率越高分类越容易,实际恰恰相反。空间分辨率到亚米级之后,同一类地物的内部差异被急剧放大。拿"建筑"来说,独栋别墅、高层住宅、工业厂房、临时工棚,屋顶材质从红瓦、灰瓦到彩钢、沥青,光谱和纹理完全不同,但标签都是"建筑"。反过来,"道路"和"停车场"在光谱上高度相似,只是几何形态有差异。这就是高分辨率遥感分类的经典矛盾:类内方差大、类间方差小。

中低分辨率影像一个像素代表几十米,混合像元反而让类内更"平均",分类器容易学。高分辨率影像把这种平均打破了,像素级分类必须依赖空间上下文——纹理、形状、邻域关系。卷积神经网络天然擅长提取这类空间特征,这是深度模型在高分影像上碾压传统方法(如SVM+GLCM纹理、随机森林+NDVI)的根本原因。但深度模型吃数据,高分影像的像素级标注又极其昂贵,一个中等城市的精细标注动辄数月人力。数据饥渴和标注昂贵之间的矛盾,就是迁移学习要解决的核心问题。

2.2 迁移学习到底迁移的是什么

这里必须把概念掰开。迁移学习不是简单地把预训练权重拿来微调一下就完事。在遥感场景下,域差异(domain shift)来自多个维度:

  • 传感器差异:不同卫星/航空平台的光谱响应函数、波段设置、辐射定标方式不同,同样的地物在不同传感器下的DN值分布可能差出几个标准差。
  • 地理差异:南方水网密布、北方旱地连片,城市建筑密度和风格差异巨大,源域学到的纹理先验在目标域可能失效。
  • 季节差异:同一地区夏季植被茂盛、冬季落叶裸露,农田在播种期和收割期光谱完全不同。
  • 标注体系差异:源域可能用6类体系,目标域需要10类,类别定义边界不一致。

迁移学习要迁移的,是与域无关的通用视觉特征——边缘、角点、纹理基元、形状组合,以及可复用的语义先验——比如"水体通常成片连续""道路呈线状延伸"。而需要重新适配的,是域相关的统计分布和类别边界。理解这一点,后面的模型设计和微调策略才有依据。

2.3 为什么不是直接从头训练

有人会问:目标域标注少,那我少标一点从头训不就行了?实测下来,从头训练一个小样本深度模型,精度通常比迁移学习低10到20个百分点,而且极不稳定——换一次随机种子,mIoU能波动5个点以上。原因在于深度网络参数量远大于样本量,从头训练会严重过拟合,网络学到的是训练样本的噪声而非地物本质特征。迁移学习相当于给网络一个"见过世面"的起点,用源域海量数据把底层特征提取器训练好,目标域只需要调整高层语义部分。这是数据效率上的本质差异,不是调参能弥补的。

3. 源域怎么选、模型怎么定:迁移方案的设计逻辑

3.1 源域数据集的选择标准

源域选得好,迁移事半功倍。选源域不能只看数据量大,要满足几个条件。第一,传感器类型尽量接近。如果目标域是亚米级航空影像,源域最好也是航空或高分卫星影像,而不是中分辨率的Landsat。光谱波段设置越接近,底层特征迁移越顺。第二,地物类别覆盖目标域。源域类别体系最好是目标域的超集,或者至少有明确的映射关系,否则迁移后还要处理类别缺失问题。第三,标注质量要高。源域标注噪声会直接污染预训练特征,宁可选小一点但标注干净的数据集。

实际操作中,公开的高分遥感语义分割数据集是首选源域。这类数据集通常覆盖多个城市、多个季节,类别体系相对规范,标注经过多轮质检。如果目标域有特殊类别(比如光伏板、大棚),源域没有,那这部分类别只能靠目标域少量样本单独学,迁移只解决通用底层特征。

3.2 主干网络选型:编码器-解码器是主流,但细节决定成败

高分影像土地覆盖分类本质是像素级语义分割,主流架构是编码器-解码器结构。编码器负责逐层下采样提取语义特征,解码器负责上采样恢复空间分辨率。选型时我关注三个点:

架构类型代表结构优势高分遥感适配性
全卷积网络FCN系列结构简单,端到端上采样粗糙,边界模糊
编码器-解码器U-Net类跳跃连接保留细节边界精度好,适合小样本
空洞卷积DeepLab类多尺度感受野大场景上下文强,小目标弱
注意力机制Transformer类全局建模数据需求大,迁移成本高

实测下来,带跳跃连接的编码器-解码器结构在高分遥感上综合表现最稳。跳跃连接把编码器的高分辨率浅层特征直接送到解码器,弥补下采样造成的空间信息丢失,这对建筑边界、道路边线这类精细地物至关重要。主干网络可以用ResNet或EfficientNet系列,前者成熟稳定、预训练权重丰富,后者参数效率高、适合显存受限的场景。

3.3 迁移策略:冻结多少层,微调多少层

这是迁移学习最核心的决策。我的经验是分三档处理:

  • 底层冻结:编码器前1/3的层(提取边缘、颜色、基础纹理)与域无关,直接冻结,不参与训练。这既省算力,又防止小样本把通用特征带偏。
  • 中层微调:编码器中间层(提取纹理组合、局部形状)用较小学习率微调,让它们适应目标域的纹理统计。
  • 高层重训:编码器后1/3和解码器全部用正常学习率训练,这部分负责语义映射,必须充分适配目标域类别体系。

学习率设置上,微调层用预训练学习率的1/10,重训层用正常学习率。这个策略在多个跨域任务上验证过,比全网络统一微调稳定得多。如果目标域样本极少(每类几十个像素块),甚至可以只训解码器,编码器全冻结,精度损失有限但过拟合风险大幅降低。

4. 从数据到精度:一套可复现的训练流程

4.1 数据预处理:归一化和切片里的门道

高分影像预处理不是简单除以255。不同传感器的辐射范围差异大,直接归一化会让目标域和源域的数值分布对不齐。我的做法是按波段做标准化:统计源域每个波段的均值和标准差,目标域也用源域的统计量做标准化,而不是用自己的。这样能保证输入分布一致,迁移更顺。如果目标域波段数和源域不同(比如源域4波段、目标域3波段),要么裁掉多余波段,要么用波段映射矩阵对齐,不能随便补零。

切片策略上,高分影像太大不能整图输入。常用256×256或512×512滑窗切片,但要注意重叠采样。训练时切片重叠50%,增加样本量同时保证边界地物完整;推理时重叠25%到50%,最后用加权融合消除拼接缝。切片大小受显存限制,512×512在16GB显存上batch size只能到4左右,256×256能到16,训练更稳。我一般先用256×256跑通,再视情况放大。

4.2 损失函数:交叉熵不够,要加边界约束

土地覆盖分类有个特点:类别极不平衡。建筑、道路、水体的像素占比可能差两个数量级。纯交叉熵会让网络偏向多数类,小类(如水体、裸地)召回率极低。解决办法是组合损失:

  • 加权交叉熵:按类别频率倒数给权重,缓解不平衡。
  • Dice损失:直接优化区域重叠度,对小类友好。
  • 边界损失:在类别边界处加大权重,提升边界精度。

实测组合方式是0.5×加权交叉熵 + 0.5×Dice,边界损失作为可选加项。权重不能拍脑袋定,要在验证集上试。我见过有人直接上Focal Loss,结果小类精度没提多少,整体mIoU反而降了,原因是Focal Loss对难样本的聚焦在遥感场景下容易放大标注噪声。

4.3 训练参数与早停策略

一套我常用的起始配置:

# 训练超参起始配置(基于常见实践) batch_size = 8 # 256x256切片,16GB显存 learning_rate = 1e-4 # 重训层 finetune_lr = 1e-5 # 微调层 weight_decay = 1e-4 epochs = 100 optimizer = "AdamW" scheduler = "CosineAnnealing" early_stop_patience = 15

早停看验证集mIoU,连续15轮不提升就停。但要注意,迁移学习前期mIoU可能先降后升——网络在摆脱源域偏见、适应目标域,这个"阵痛期"通常5到10轮。如果10轮后还降,那才是真出问题,要检查学习率是否过大或数据对齐是否有误。

4.4 数据增强:几何增强为主,光谱增强要谨慎

高分遥感的数据增强和自然图像不同。几何增强(旋转、翻转、缩放、裁剪)安全有效,因为地物形状不随方向改变。光谱增强(亮度、对比度、色彩抖动)要小心,因为光谱是地物分类的重要依据,过度抖动会破坏类间可分性。我一般只用轻微的亮度扰动(±10%),不做大幅色彩变换。另外,CutMix和MixUp在遥感上要慎用,混合两个不同地物的切片会产生不存在的类别组合,干扰训练。

5. 跨域实测:精度掉了多少,怎么找回来

5.1 同传感器跨城市:掉点最少,微调即可

最温和的迁移场景是同传感器、同季节、不同城市。这种情况下域差异主要来自地物风格和分布,底层特征几乎不用动。实测直接加载源域权重,只微调解码器和编码器后1/3,用目标域10%的标注量,mIoU能恢复到全量训练的95%以上。如果目标域标注到30%,基本追平全量训练。这个场景下迁移学习性价比最高,几乎无脑可用。

5.2 跨传感器:光谱对齐是关键

换传感器就麻烦一些。不同传感器的波段响应不同,同样的植被在源域和目标域的NDVI分布可能错位。这时候光谱对齐比网络结构更重要。我试过两种做法:一是用直方图匹配把目标域影像的辐射分布对齐到源域,二是加一个轻量的波段适配层(1×1卷积)让网络自己学映射。前者简单但可能损失目标域特有信息,后者灵活但需要额外训练。实测直方图匹配+微调的组合最稳,mIoU损失能控制在5个点以内。

5.3 跨季节:最容易被低估的坑

跨季节迁移是精度杀手。夏季训练的模型直接用到冬季,落叶林变成裸地、农田变成收割后的茬地,mIoU能掉15到20个点。这不是网络不行,是地物本身变了。解决办法有两个:一是源域选多季节数据,让网络见过季节变化;二是目标域每个季节都标少量样本做季节适配。如果只能选一个,我选多季节源域,因为网络学到的季节不变特征(如建筑形状、道路拓扑)能迁移,而季节敏感特征(植被光谱)本来就不该硬迁。

5.4 精度诊断:别只看mIoU,要看混淆矩阵

迁移后精度不达标,很多人只盯着mIoU调参,这是盲调。正确做法是拉混淆矩阵,看错分集中在哪。常见模式和对策:

错分模式可能原因对策
建筑→道路光谱相似,边界模糊加边界损失,提高分辨率
耕地→草地纹理相似,季节混淆引入时序或多季节数据
水体→阴影光谱暗,形状相似加NDWI等指数辅助
小类全漏类别不平衡加权损失,过采样

我遇到过一次"裸地→建筑"大量错分,查了半天发现是目标域标注把在建工地标成了建筑,而源域标成裸地。这种标注体系不一致,调参永远解决不了,必须先统一标注规范。

6. 几个只有踩过才知道的实操细节

6.1 预训练权重的"隐性偏见"

公开预训练权重大多在自然图像上训的,直接拿来用会有隐性偏见。比如自然图像里"天空"常在顶部、"地面"在底部,网络可能学到位置先验。遥感影像是俯视,没有这种上下关系,位置先验反而干扰。我的做法是迁移后先用目标域数据跑几轮"预热",让网络忘掉自然图像的位置偏见,再正式微调。预热轮数不用多,3到5轮即可。

6.2 推理阶段的拼接缝处理

大图推理切片拼接时,边界处经常出现明显接缝,原因是切片边缘的上下文不完整。解决办法是重叠推理+加权融合:切片重叠50%,每个像素的预测值按到切片中心的距离加权,中心权重高、边缘权重低。这样拼接后过渡自然,mIoU能提升1到2个点。别小看这一两个点,在精细制图里就是边界能不能用的区别。

6.3 标注质量比标注数量重要

迁移学习能缓解标注少的问题,但缓解不了标注错的问题。我见过目标域只标了500个像素块,但其中20%标错,结果微调后模型比不迁移还差。小样本微调时,标注噪声会被放大。建议目标域标注至少做两轮质检,或者用模型预标注+人工修正的半自动方式,既省力又保质量。

6.4 显存不够时的梯度累积

高分影像切片大,显存经常不够。除了减小batch size,还可以用梯度累积:累积4个小batch的梯度再更新一次,等效于大batch训练。这样训练稳定性接近大batch,显存占用却小得多。注意梯度累积时要同步调整学习率,通常按累积步数的平方根缩放。

7. 这套方案能走多远:边界与扩展方向

迁移学习不是万能药。如果源域和目标域的类别体系完全无交集,或者目标域地物在源域从未出现过,迁移基本无效,只能靠目标域自己标。另外,如果目标域影像质量极差(云覆盖、阴影严重、辐射失真),再好的迁移也救不回来,预处理必须先行。

扩展方向上,自监督预训练是值得关注的路子。用大量无标注高分影像做自监督学习(如对比学习、掩码重建),学到的特征比自然图像预训练更贴合遥感域,迁移到目标域时适配成本更低。另一个方向是多源迁移:同时用多个源域(不同传感器、不同地区)预训练,让网络学到更鲁棒的域不变特征。这些方向目前还在演进,但思路和本文的迁移框架是一致的——先把通用特征学好,再低成本适配到具体任务。

我在实际项目里的体会是,迁移学习省下的不只是标注人力,更是试错时间。一个从零开始的分类项目,光调通可能就要一两个月;用迁移学习打底,一周内就能出可用的基线,剩下的时间全花在精度打磨和业务适配上。这个效率差异,做过实际交付的人都懂。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进