1. 项目概述当遥感遇上坏天气做遥感图像分析的朋友尤其是搞建筑物提取的最头疼的莫过于碰上恶劣天气。一张雾霾笼罩、云层遮挡或者雨雪交加的卫星或航拍影像就像给目标建筑物蒙上了一层厚厚的毛玻璃传统的提取算法性能会断崖式下跌。我们团队在几个智慧城市和灾害评估项目里没少吃这个亏。后来我们琢磨能不能设计一个专门针对这种“脏数据”的模型让它具备更强的鲁棒性这就是HaLoBuild-Net诞生的背景。简单来说HaLoBuild-Net 是一个端到端的深度学习网络它的核心目标就一个在包含雾、霾、云、雪等多种退化因素的遥感图像中依然能稳定、精确地勾勒出建筑物的轮廓。这个名字里的“HaLo”其实是个双关既暗示了模型要处理像光晕Halo一样模糊图像的大气干扰也寓意着模型能像守护光环Halo一样保护建筑物提取任务免受恶劣天气的侵蚀。这个需求在现实中非常迫切。城市规划需要定期监测建筑变化洪涝、地震等灾害发生后需要快速评估建筑物损毁情况这些任务往往等不到一个天朗气清的好天气再去拍摄。我们必须具备在“任何天气”下都能工作的能力。HaLoBuild-Net 不是简单地在现有模型上加个去雾预处理而是将天气退化特征的感知与建筑物结构信息的提取深度融合在一个统一的框架里让模型自己学会“拨云见日”直接从未经修复的原始退化图像中找出建筑。接下来我会详细拆解我们是怎么设计这个网络以及在实际数据上趟过哪些坑。2. 核心思路为何要“联合优化”而非“先修复后提取”在动手设计网络之前我们首先得明确一个技术路线问题面对恶劣天气图像主流的做法是什么通常有两种思路一是“串联式”先用一个图像恢复模型比如去雾网络对图像进行增强再把增强后的“干净”图像送入一个标准的建筑物提取网络如U-Net变体二是“并联式”或我们采用的“联合优化式”让一个网络同时干这两件事。我们毫不犹豫地选择了后者。原因基于几个实际的考量2.1 串联式方案的固有缺陷串联方案听起来很直观分而治之但问题不少。首先误差累积。第一个图像恢复模块的任何瑕疵——比如去雾不彻底留下了残影或者过度增强引入了噪声——都会被第二个提取模块全盘接收并放大。其次目标不一致。通用图像恢复模型的目标是让整张图看起来更“好看”或更接近晴空图像其优化指标如PSNR、SSIM是面向人眼的。但对于建筑物提取任务来说我们可能并不需要恢复出完美的天空颜色或远处景物的纹理我们只关心建筑物边缘、屋顶结构等对分割任务有用的信息是否被强化。一个追求全局保真度的恢复模型可能会浪费大量算力在无关区域甚至可能平滑掉对分割至关重要的微弱边缘。2.2 联合优化的优势联合优化则让网络以“最终提取精度”为唯一指挥棒。我们告诉网络“不管你中间看到了什么雾、什么云你的终极任务就是把建筑物的像素给我准确地标出来。” 这样网络内部的特征提取层会自发地学习到哪些特征是应对天气干扰的“抗干扰因子”哪些是刻画建筑物本身的“本质因子”。它可能会学会忽略均匀的雾层而特别关注雾中依然存在的、属于建筑物的线性边缘或纹理对比度变化。这种设计还有一个工程上的好处效率更高。省去一个独立的、往往计算量不小的预处理模型推理速度更快部署也更简单。对于需要处理海量遥感影像或要求近实时响应的应用如灾害应急这点至关重要。注意选择联合优化并不意味着我们完全抛弃了图像恢复的先验知识。恰恰相反HaLoBuild-Net 的核心创新在于我们设计了一个专门的天气感知模块来显式地建模退化并将这个信息以引导的方式融入到分割主干的特征提取过程中而不是隐式地、黑盒地让网络自己去摸索。3. 网络架构深度拆解HaLoBuild-Net 的三重奏HaLoBuild-Net 的整体架构可以看作由三个核心部分组成像一个配合默契的三重奏天气退化感知声部、多尺度特征提取声部和特征融合与精修声部。下面我逐一拆解。3.1 天气退化感知模块给网络一副“透视眼镜”这个模块是模型的“眼睛”负责诊断输入图像到底“病”在哪里。我们借鉴了部分物理成像模型的思想但并未直接进行复杂的物理参数反演那太耗时且不稳定而是采用一个轻量级的卷积子网络来估计图像的退化特征图。输入图像首先进入一个由4-5个卷积层组成的编码器这个编码器不追求下采样太多目的是保持空间细节。它的任务是输出一个与输入图像同分辨率或略低分辨率的特征图这个特征图上每个“像素”实际上是一个多维向量编码了该区域可能受雾霾浓度、云层厚度等影响的强度。我们把这个模块称为Weather Prior Estimator。这里的一个关键技巧是我们不直接回归一个“去雾后的图像”而是回归一个“退化权重场”。这个权重场标识出图像中哪些区域退化严重权重高哪些区域相对清晰权重低。在后续的特征融合阶段这个权重场会用来调制主干特征对于退化严重区域的特征我们会促使网络更依赖上下文信息和深层语义对于清晰区域则更信任浅层的细节特征。3.2 多尺度上下文感知主干U-Net的增强变体分割主干我们选择了U-Net作为基础因为它密集跳跃连接的结构能很好地融合浅层细节和深层语义。但我们针对恶劣天气场景做了两点关键增强天气感知门控跳跃连接传统的跳跃连接直接将编码器特征拼接到解码器。我们在这里加入了一个“门”。这个门由一个小的卷积块构成其输入是编码器特征和来自天气感知模块的退化特征。门的输出是一个0到1之间的权重图它决定了解码器在对应位置应该多大程度地信任编码器传来的细节特征。如果天气模块判断该区域被厚云完全覆盖毫无可靠细节那么这个门的权重会趋近于0解码器将主要依赖来自网络更深层的、更具语义性的上下文信息来“推测”该区域是否有建筑。反之在清晰区域权重趋近于1细节特征被充分保留。空洞空间金字塔池化模块的嵌入在编码器的最深层瓶颈层我们插入了一个轻量化的ASPP模块。恶劣天气下建筑物可能部分被遮挡ASPP通过不同膨胀率的卷积能够捕获多尺度上下文信息这对于推断被云团遮挡部分的建筑轮廓非常有帮助。例如一个大型厂房的屋顶中间有一片云但通过周围清晰的屋顶纹理和规则边缘ASPP的大感受野卷积核可以帮助“脑补”出中间缺失的部分。3.3 渐进式特征融合与精炼解码器解码器部分并非简单地上采样和卷积。我们设计了一个渐进式融合策略。每一级解码器在上采样后不仅会接收来自对应编码器级的门控特征还会接收来自天气感知模块的、经过调整的全局退化信息。此外我们还增加了一个浅层特征精炼支路。这个精炼支路从最浅层的编码器特征引出经过几个残差块处理。为什么因为最浅层特征包含最多的边缘和纹理细节但这些细节在恶劣天气下噪声也最大。这个精炼支路的作用是在天气感知信息的指导下对原始细节进行“去噪”和“增强”只保留可能与建筑物相关的强边缘和纹理模式。精炼后的浅层特征会在解码器的最后阶段即将输出预测图之前与深层语义特征进行融合确保最终轮廓的锐利和准确。整个网络的损失函数是加权交叉熵损失和Dice损失的结合。我们在Dice损失上给了一个较高的权重因为建筑物提取任务中正负样本建筑 vs 非建筑通常极不平衡Dice损失能更好地优化分割边界。4. 数据准备与训练合成数据与真实数据的“组合拳”模型设计得再精巧没有高质量的数据也是白搭。面向恶劣天气的建筑物提取最大的挑战就是标注好的、成对的“恶劣天气-晴空-建筑标注”数据极其稀少。我们不可能要求卫星每次都在同一地点、同一角度先拍一张有雾的等雾散了再拍一张干净的。因此数据工程是本项目成败的关键。4.1 基于物理模型的合成退化数据我们的基础数据集来自多个公开的晴空遥感建筑物数据集如Massachusetts Buildings Dataset、Inria Aerial Image Labeling Dataset等。我们利用大气散射物理模型人工为这些晴空图像合成各种天气退化效果。雾/霾合成采用经典的大气散射模型I(x) J(x)t(x) A(1 - t(x))。其中I是观测到的有雾图像J是晴空图像我们的基础数据A是大气光值t(x)是透射率图描述光线能到达相机的比例。我们通过随机生成不同浓度、不均匀的深度图模拟场景深度来得到t(x)并随机化大气光A从而批量生成不同浓度、不同均匀度的雾霾图像。云层合成我们从真实的含云遥感图像中手动裁剪出各种形状、厚度的云块作为alpha蒙版。然后通过泊松融合等技术将这些云块“粘贴”到晴空图像上并调整其亮度和透明度模拟薄云、厚云、碎云等不同情况。云层下的景物会根据云层厚度进行不同程度的模糊和亮度衰减。雨/雪合成雨丝和雪花被建模为不同方向、密度和长度的线性或点状噪声。我们叠加多层这样的噪声并辅以运动模糊来模拟动态效果同时还会在图像上添加全局的亮度降低和对比度下降模拟雨雪天的整体氛围。4.2 关键退化参数的真实性校验这里有一个大坑合成参数不能太“假”。早期我们随机生成的雾浓度范围太大有些图像浓到完全看不见任何东西这种数据对训练不仅无益反而有害因为模型会学到“放弃治疗”。我们必须让合成的退化程度与真实世界可能观测到的范围相匹配。我们的做法是收集一批真实的各种天气下的遥感图像不要求有建筑标注用一些无监督或弱监督的方法如基于暗通道先验的统计大致估算其退化参数如平均透射率然后用这些统计分布来指导我们合成数据时的参数随机范围。确保我们的“假数据”看起来“真”。4.3 小批量真实数据微调尽管合成数据量大且可控但和真实复杂天气之间仍有差距。我们千方百计收集了大约1000张左右有建筑标注的真实恶劣天气遥感图像来源包括竞赛数据集、合作单位的历史数据等。这批数据非常宝贵。我们的训练策略是第一阶段使用海量的合成退化数据晴空图合成退化标注进行模型预训练。第二阶段冻结网络的大部分层只解冻解码器和特征融合层的最后几层用真实恶劣天气数据对其进行微调。这样既能利用合成数据让模型学到基本的“抗干扰-提取”能力又能用少量真实数据让模型适配真实世界的退化分布。实操心得在合成数据时一定要做可视化检查。定期从训练集中抽样一批“晴空-合成退化-标注”三元组人眼看看合成效果是否合理。特别是建筑物边缘区域退化过渡是否自然。不合理的合成样本要及时从数据集中剔除否则就是给模型“喂毒药”。5. 实验配置与调参细节我们的实验基于PyTorch框架。下面分享一些关键的实现和调参细节这些细节往往决定了模型最终能否达到论文里报告的性能。5.1 硬件与基础配置GPU4张 NVIDIA RTX 3090。Batch Size由于图像较大我们统一裁剪到512x512单卡只能放下2张图采用多卡数据并行有效Batch Size为8。优化器AdamW。我们发现AdamW比Adam在泛化性上略好权重衰减设为1e-4。初始学习率1e-4。采用余弦退火学习率调度带有暖重启CosineAnnealingWarmRestartsT_010个epoch这有助于模型在训练后期跳出局部最优。5.2 数据增强策略数据增强对提升模型鲁棒性至关重要。除了标准的随机水平/垂直翻转、随机旋转90度倍数外我们特别加强了针对遥感场景和天气模拟的增强颜色抖动轻微调整亮度、对比度和饱和度模拟不同时间、不同传感器拍摄的差异。随机裁剪与缩放从原始大图中随机裁剪512x512区域并伴随随机缩放0.8-1.2倍让模型适应不同尺度的建筑物。模拟传感器噪声添加高斯噪声和椒盐噪声模拟低光照或老旧传感器的影响。混合增强MixUp在部分训练批次中我们以一定比例如0.2采用MixUp将两张图像及其标注线性混合。这能进一步正则化模型尤其能帮助模型学习在两种不同天气条件混合的过渡区域进行预测。5.3 损失函数的平衡艺术我们最终的损失函数是Total Loss λ1 * Weighted BCE Loss λ2 * Dice Loss λ3 * Lovász-Softmax Loss加权交叉熵损失为建筑物像素设置更高的权重通常是背景权重的2-5倍以应对类别不平衡。权重具体值需要根据训练集的正负像素比来调整。Dice损失直接优化分割区域的重叠度对不平衡数据友好。我们设置λ2为0.8给予较高权重。Lovász-Softmax损失这是一个基于子模优化的损失直接优化IoU交并比的替代损失。我们发现加入Lovász损失λ30.2后对于提升预测掩码的边界光滑度和整体形状的完整性有奇效能减少一些零散的小误检。调整λ1, λ2, λ3的过程是一个动态观察验证集IoU和边界F1-score的过程。没有固定公式需要根据训练曲线手动微调。5.4 训练监控与早停我们监控验证集上的mIoU和Boundary F1-score。后者对于建筑物提取尤其重要因为边界精度直接决定了提取结果的可实用性。我们采用早停策略耐心值设为20个epoch。如果连续20个epoch验证集mIoU没有提升则停止训练并回滚到最佳模型。6. 结果分析与对比HaLoBuild-Net强在哪我们在多个数据集上进行了测试包括合成的恶劣天气测试集和收集的真实恶劣天气测试集。对比的基线模型包括经典U-Net、DeepLabv3、以及“先去雾如AOD-Net后分割”的串联方案。6.1 定量结果模型 / 测试集合成薄雾 (mIoU)合成厚云 (mIoU)真实多云 (mIoU)边界F1-score (真实集)U-Net65.2%48.7%52.1%0.63DeepLabv368.5%51.3%54.8%0.66去雾U-Net (串联)70.1%55.9%58.3%0.68HaLoBuild-Net (Ours)75.8%63.4%62.7%0.72从表格可以看出在合成薄雾条件下所有模型性能都有所下降但HaLoBuild-Net下降幅度最小表明其抗轻度干扰能力突出。在合成厚云条件下性能下降剧烈这模拟了严重遮挡。HaLoBuild-Net相比串联方案有近7.5个百分点的提升这证明了联合优化和上下文推断ASPP模块的有效性。串联方案中的去雾模块面对厚云几乎失效导致后续分割输入质量极差。在最具挑战的真实多云数据集上HaLoBuild-Net依然保持了领先其mIoU和边界F1-score均优于其他方案。这验证了我们“合成预训练真实微调”策略的成功。6.2 定性分析可视化结果看数字不如看图直观。我们对比了在几张典型真实恶劣天气图像上的分割结果。场景一薄雾中的城区。U-Net和DeepLabv3的结果中许多低矮建筑的边界模糊不清甚至部分建筑被漏检。串联方案的结果有所改善但建筑边缘存在“毛刺”感这是去雾算法常见的伪影导致的。HaLoBuild-Net的结果则边界清晰连贯漏检少且轮廓更接近真实标注。场景二被碎云覆盖的郊区。对于被云半遮挡的建筑基线模型往往只能提取出未被遮挡的部分或者将云影错误地连成一片当作建筑。HaLoBuild-Net则能更好地“脑补”出被遮挡部分的合理轮廓虽然不完全准确但完整性远胜其他模型。这得益于天气感知模块和ASPP大感受野的协同作用。场景三雪后地面积雪反光。积雪的高亮度区域很容易被误判为建筑屋顶。基线模型在此场景下误检率很高。HaLoBuild-Net通过其天气感知模块可能学习到了这种高亮、均匀的区域与真实建筑纹理的差异从而显著抑制了在雪地上的错误预测。7. 部署考量与实战避坑指南模型训练好了最终要落地。将HaLoBuild-Net部署到实际生产环境如遥感影像处理平台、边缘计算设备时我们总结了几点关键经验。7.1 模型轻量化与加速原始的HaLoBuild-Net参数量约35M对于512x512的输入在3090上推理时间约50ms。这对于服务器端部署尚可但对于机载边缘设备或需要处理超大图万级像素的场景仍需优化。主干网络替换将编码器的主干网络从标准的ResNet系列替换为MobileNetV3或EfficientNet-Lite。这些网络为移动端设计在精度损失很小的情况下我们测试下降约1-2% mIoU参数量和计算量可减少60%以上。知识蒸馏用训练好的完整HaLoBuild-Net作为教师模型去指导一个结构更简单的小模型学生模型训练。学生模型只保留核心的天气感知和特征融合思想但层数更浅、通道数更少。通过蒸馏小模型能获得接近大模型80-90%的性能。TensorRT/OpenVINO推理引擎在NVIDIA或Intel硬件上部署时务必使用对应的推理优化引擎。以TensorRT为例通过FP16量化、图层融合、内核自动调优能将推理速度再提升2-3倍。7.2 处理超大尺寸图像遥感影像动辄上亿像素不能直接输入网络。标准做法是滑动窗口裁剪。这里有几个坑重叠率裁剪时窗口之间必须有重叠如25%否则建筑物刚好被窗口边界切开会导致预测断裂。但重叠率太高会增加计算量。需要在速度和完整性间权衡。边界效应每个窗口独立预测拼接时窗口边缘的预测结果可能不一致产生接缝。解决方法是在预测时对每个窗口只取中心区域如裁剪掉外圈50像素的结果用于拼接边缘部分由相邻窗口的中心区域覆盖。这要求重叠率必须大于被裁剪边缘宽度的两倍。多尺度推理对于大小差异极大的建筑物单一尺度可能效果不佳。可以采用多尺度输入如原图、0.75倍、1.25倍分别预测然后将结果通过投票或取平均的方式融合。这会显著增加计算量通常只在对精度要求极高的离线处理中使用。7.3 持续学习与领域适配将一个在公开数据集上训练的模型直接用到某个特定城市或地区的影像上性能可能会打折扣因为建筑风格、植被类型、气候条件都不同。这就需要领域适配。无监督/半监督适配如果新地区只有图像没有标注可以采用无监督域自适应技术例如通过对抗训练让模型提取的特征无法区分是来自源域训练集还是目标域新地区从而提升泛化性。少量样本微调如果能在新地区标注几十到几百张典型图像那么用这批数据对模型最后一两层进行微调是性价比最高的方法。效果提升立竿见影。建立反馈闭环在实际应用平台中设计一个“预测-人工核对-纠正”的流程。将人工纠正的样本即模型预测错误但被专家修正的样本自动加入一个特定池子定期用这个池子的数据对模型进行增量学习让模型在实际使用中越用越聪明。7.4 一个实际踩过的坑色彩空间的影响早期我们忽略了一个细节不同来源的遥感影像色彩空间可能不同如8位RGB 16位多光谱的某个波段组合甚至灰度图。我们的模型是在RGB三通道图像上训练的。当输入一张单通道的灰度图时我们简单地将其复制成三个相同的通道输入结果性能下降严重。后来发现模型的第一层卷积核已经适应了RGB通道间的特定相关性。解决方案是在数据预处理流水线中强制将所有输入图像转换到统一的色彩空间如sRGB。如果是多光谱数据则需要选择与RGB视觉特征最接近的三个波段进行合成或者重新训练一个适配多通道输入的模型版本。HaLoBuild-Net从构思到实现再到部署是一个不断与真实世界复杂性博弈的过程。它告诉我们在计算机视觉领域尤其是面向诸如遥感这样的垂直应用脱离应用场景谈模型精度是没有意义的。恶劣天气是遥感分析必须跨过的一道坎而跨过这道坎需要的是对物理退化过程的洞察、对任务本质的理解以及将先验知识巧妙嵌入数据驱动模型的工程能力。这个项目给我们的最大启示是有时候让模型“看见”困难通过天气感知模块比强行帮它“擦干净”窗户串联去雾更能让它学会如何应对困难。未来我们计划将类似的思路扩展到其他恶劣条件如夜间微光、沙尘暴等希望能打造一个全天候、全地形的遥感影像智能解译工具箱。