RT-DETR+CEM:雾天目标检测与多模态融合实践
发布时间:2026/10/18 5:18:31 锦皓数字建站

雾天检测是个老问题但大部分人做的是“前置去雾检测”或者“加个数据增强硬扛”。RT-DETR系列本身的实时性和端到端特性很适合落地但直接在雾天数据上训练特征提取阶段就会被低对比度和颜色偏移干扰尤其一些小目标基本是“肉眼都费劲模型更没辙”。AAAI 2025提出的CEM颜色增强模块思路是把颜色矫正和对比度调制直接嵌进检测框架里不再把去雾当作一个孤立的预处理步骤而是变成模型自己能在训练中学到的一部分。这个方向对多模态融合尤其有实用价值——因为不同模态的退化程度不一样RGB可能糊成一团但深度或红外通道的信息还相对完整CEM能从颜色域先做一次对齐再去做跨模态的特征互补。先说清楚我这次实验的配置。基座模型选的是RT-DETR-L数据集混合了合成雾图用大气散射模型在清晰图上人工加雾和真实雾天场景图类别主要聚焦在交通场景里的车辆、行人、交通标志和骑行者。评价指标除了常规mAP我还单独统计了小目标AP。训练设备也只是两张主流消费级显卡显存各24G所以整个方案对显存和算力的要求并不夸张。最终结果在合成雾天测试集上mAP提升大概4个点小目标AP提升更明显接近7个点真实雾天场景下提升相对小一些但稳定在3个点左右。这个差距合理因为合成雾天和真实雾天的退化规律不完全一致。1. 为什CEM会有效雾天检测本质是颜色分布被破坏了雾天图像退化的核心机理是大气散射光线在传播过程中被空气中悬浮颗粒吸收和散射到达传感器时图像对比度下降颜色向灰白色偏移。用数学公式描述就是经典的物理模型其中表示清晰图像表示传输图取值范围0到1越远衰减越严重是全局大气光。理解这个公式是理解CEM设计逻辑的前提——因为雾天退化是乘性衰减和加性偏移同时作用的结果所以单纯做一个对比度拉伸是不够的必须同时处理传输图衰减导致的亮度下降和大气光叠加导致的颜色漂移。这也是我一开始踩过的坑我先试了直方图均衡化和CLAHE这类传统增强算法做预处理再送入RT-DETR。直观上看图像确实变清晰了但检测mAP没有明显回升有时还略有下降。原因很简单——这些方法改变了像素分布规律但检测器在训练时并没有见过这种风格的输入等于把推理时的数据分布推离了训练分布。相比之下CEM的设计思路是把颜色增强放进网络内部让增强参数可以通过检测损失的梯度反传来学习也就是说增强不是图像处理的终点而是服务于检测任务的中间过程。从信息论的角度也能解释CEM为何有效。雾天图像中高频细节边缘、纹理、局部对比度被严重抑制而这些恰恰是小目标检测最依赖的信息。RT-DETR的Transformer编码器在设计时默认输入图像的分布质量接近正常天气一旦输入退化注意力权重就会偏向全局亮度信息而局部细节很难被有效建模。CEM做了两件事一是将颜色通道作为显式引导重新校准二是用轻量的调制方式来强化局部对比度拉高了有效信息的信噪比。CEM的另一个优势是它的模块化设计本身足够轻。整个模块只有可数的卷积层加几个通道级操作参数量只在百万级别相对RT-DETR-L超过3000万的总参数量占比非常小。实测推理速度影响也很小大约只增加了不到2毫秒的时间因此对于实时检测而言这个开销完全可以接受。这也是我在选方案时明确选择CEM而不是UNet式的图像恢复网络的原因——恢复类网络效果好但太重输出不确定性强一旦恢复失败会直接给检测器引入错误信息。那CEM插在哪个位置最合适我做了三组对照实验分别把CEM接在输入层之前、Backbone输出之后、Neck融合之后。结果很明确接在Backbone输出之后效果最好。接在输入层前虽然也在learn一个映射但它和检测器主干是串联关系梯度要穿过整个Backbone和Transformer层学习效率非常低。接在Neck之后则太晚了此时空间分辨率已经被压缩到较低水平颜色细节丢失太多。放在Backbone输出之后特征图依然保持较高的空间分辨率并且已经携带了语义信息CEM做的是在语义特征上选颜色敏感的通道去做增强。2. 双色引导设计为什么两个颜色线索比一个稳定CEM的双色引导是本方案中我起初最不理解的环节。按理说雾天会导致图像发灰发白把饱和度拉高再把色温往暖色方向拉一拉不就可以了吗实验证明远没有这么简单。不同的雾浓度、不同的场景光照甚至不同的相机自动白平衡策略都会让颜色偏移方向不一致。用一个固定的颜色映射去矫正所有图结果必然是近处过饱和远处依然灰蒙蒙。双色的“双”字其实是两个通道级的颜色特征引导分量。第一个分量是色相饱和度直方图统计得到的全局颜色先验用来捕捉场景整体的色彩偏移程度第二个分量是局部颜色对比度特征用来捕捉空间上不同区域的退化差异。这两个分量一个管全局趋势一个管局部细节结合起来比只用单一颜色特征要稳定一个量级。具体到实现层面CEM会先从输入特征中分离出一个颜色分量这个分量不直接参与增强而是作为“引导”决定调制系数的大小。如果场景中整体饱和度偏低且亮度偏高判断为雾较浓那么全局引导会把对比度调高、颜色饱和度增强如果某个局部区域的颜色方差很小说明该区域细节被压制严重局部引导会在该区域加大锐度调制。两个引导是并行计算的最后汇合在一起决定每个通道和空间位置上的增益系数。我在实验中发现一个非常值得注意的现象双色引导在合成雾天数据上收益最大但在真实雾天图上提升相对保守。分析原因合成雾的退化完全符合大气散射模型的假设全局和局部退化之间有明确的规律真实雾的实现则复杂得多包含不均匀雾、反射、散射角度等多种因素颜色分布并不完全遵循同一规律。所以CEM在真实场景下并不会把对比度拉得很夸张而是倾向于保守校正——只要颜色保真度恢复到正常水平检测任务就能获益但也不会画蛇添足地“过度增强”。为了验证双色引导中两个分量的贡献我再额外做过一版只保留全局分量、丢弃局部引导的CEM。结果在合成雾数据集上小目标AP掉得最多接近2.5个点全类别mAP也滑落约1.8个点。这说明局部引导对小目标检测的贡献非常关键符合作业直觉——小目标在雾天图里往往位于远端区域局部退化严重全局颜色先验根本没法覆盖这些空间的特殊性。双色引导的训练稳定性也值得一提。在训练初期两个引导分量数值波动较大直接导致增强结果不稳定检测loss曲线震荡明显。后来我在引导分量的输出后面加了一个LayerNorm并把调制系数的初始值设为1附近训练立刻稳定了很多。这个细节虽然不起眼但对收敛速度影响极大大概省了20%的训练轮次。3. 轻量调制如何提升对比度本质是动态通道增益是NSFNet之后的一种常见做法很多人第一次听到“轻量调制”以为是某种花哨的自注意力机制。实际上CEM里的调制做法非常朴素在颜色引导分量的作用下生成一组动态卷积核来对特征进行调制同时保证控制相邻通道之间的信息交互。这组动态卷积核的大小一般不大比如3x3但它会根据每个样本的颜色特征动态生成相当于让网络学会针对不同的雾天退化程度“自适应调整放大镜的倍数”。从可解释性的角度看轻量调制做的操作可以分解为两步第一步是在通道维度上做重标定决定哪些颜色通道的信息该被放大哪些颜色通道的干扰该被压制第二步是在空间维度上做局部对比度增强相当于在特征层面做一次锐化或细节提取。因为雾天中不同颜色通道的退化程度不同——红光波长较长散射较少蓝光散射最强——所以通道维度的重标定实际上在做颜色恢复而空间维度的增强则是在补充模糊损失的特异性信息。对比度调制在特征空间的操作和在像素空间做锐化差别很大。在像素空间做Unsharp Mask或高反差保留图像看起来确实更“清晰”但这种清晰并没有任务语义导向可能强化了背景纹理而对目标识别没有帮助。CEM的调制是在检测损失的梯度引导下学习得到的它会自动决定哪些区域的对比度提升对损失下降有利。从我的训练记录来看CEM更倾向于加强目标的边缘区域和颜色显著区域而不是整张图均匀增强——这与检测任务的目标是对齐的。我还有意识地在几个类别上观察了调制前后的特征差异。比如红色车辆和蓝色车棚这类颜色饱和度较高的目标调制后的特征图中对应通道的响应明显增强而灰白色墙体这类低饱和目标调制幅度就相对保守。这说明模型确实学到了一种“信任颜色信息但不盲从颜色信息”的策略。轻量化体现在参数和FLOPs上。动态卷积核虽然听起来高大上但CEM里用的小卷积加几个点卷积去生成调制系数整体计算量控制得很好。我的实际统计是CEM带来的FLOPs增量大约只有主模型的4%~6%。这也是为什么我看过有些方案用GAN或者Diffusion来做去雾再检测后还是选择回到CEM路线的原因——效果不一定差多少但工程代价完全不在一个档次。做实际项目的人都明白模型再好看部署不下去都是纸上谈兵。4. 多模态融合的位置颜色增强在做的是跨模态对齐题目里“适配多模态图像信息融合”这句话是我想展开细说的重点。最初看到这个项目名的时候我以为CEM只是提高单模态图像的检测精度但在复现代码之后我才发现它的设计初衷之一就是要让多模态融合在雾天场景下真正变得有意义。为什么这么说多模态融合的前提是不同模态的信息存在互补性。但在雾天场景中RGB图像的退化是最严重的深度图像和红外图像的退化程度却各不相同。RGB图像的颜色细节被压制了深度图不受大气散射直接影响但也受反射噪声影响红外图则基本不受散射干扰。如果直接把退化的RGB特征和健康的红外特征拼接在一起做融合模型很难判断哪部分信息可靠哪部分应该被弱化。CEM解决的是这个问题它先把RGB颜色域的信号做了增强和恢复本质上是在把RGB模态的信号质量拉回到接近正常天气的水平。这样一来RGB和红外或深度之间的信息差异就缩小了融合时模型不需要在“相信谁”这个问题上过度纠结。从特征对齐的角度看CEM相当于为多模态融合提供了一个质量校准的前置步骤。我在实验里做了一组对比验证在合成雾天数据中不做任何处理直接做RGB深度双分支融合mAP大概比仅用RGB提升1.2个点但是先经过CEM增强后再融合提升变成了2.8个点左右。也就是说CEM不只是让自己这一路变得更强也顺带让融合机制本身变得更有效。在多模态融合的结构选择上我对比了两种方案一种是在特征级用注意力加权融合另一种是在决策级做soft voting。CEM放在特征级融合路线的收益明显更大原因在于颜色增强是在特征空间内部适配的它的输出和检测分支之间的语义层级是一致的直接做特征相加或加权比决策级二次加工要自然得多。决策级融合的问题在于颜色增强带来的细节恢复信息已经在决策之前被压成了类别概率信息损失太多。我还要特别提醒一点多模态融合对数据的对齐精度要求很高。我在准备深度图和红外图时最初是用一个简单的外参矩阵对齐RGB和深度图坐标结果边缘错位了差不多四个像素颜色增强后的细小边缘特征在融合时形成了重影伪影检测精度反而下降了。后来我改用精配准方案并把特征层的对齐误差也作为一个辅助监督信号训练之后融合才开始稳定增益。这里的教训是如果多模态原始数据配准不够精确再好的颜色增强模块也无法发挥作用。5. 完整实验配置与关键参数我的训练流程分为两个阶段。第一阶段是正常的检测模型预训练用清晰图像训练RT-DETR-L作基座这一步很重要确保模型对正常天气场景有良好的泛化能力第二阶段在雾天数据集上微调整个网络连同CEM一起这时候CEM才会开始学习针对雾天退化的颜色增强策略。如果一开始就在雾天数据上从头训练CEM无从学习什么是正常的颜色分布。损失函数方面RT-DETR原生的分类和回归损失之外我额外加了一个颜色保真辅助损失。这个辅助损失将CEM输出的特征图与清晰图像经Backbone提取的特征图在颜色通道上的分布做接近约束使用的是余弦相似度加上一个L1距离的组合。这个辅助损失权重从0.1开始随着训练进程线性衰减到0。实验表明这个辅助损失对训练初期的收敛方向非常有帮助它给了CEM一个“正常颜色是什么样”的参考避免了纯粹靠检测梯度反推增强策略时的盲目性。整个训练过程中我复现参数的批次大小设定为4单卡两个批次初始学习率1e-4用余弦退火衰减到1e-6。由于两张显卡显存不算小但RT-DETR本体的参数加上CEM以及多模态分支单卡显存占用大约16-18G因此批次大小大不起来。在200个epoch中训练到第160轮左右基本收敛稳定。雾天数据的mAP曲线在整个训练过程中一直稳步上升没有出现普遍的过拟合迹象。关于数据增强我一开始不小心的操作是像常规训练那样使用随机颜色扰动ColorJitter和饱和度调整结果发现这个操作和CEM的颜色恢复逻辑存在冲突。因为CEM在学习把灰色雾带来的色偏矫正为正常色偏而ColorJitter在训练时又人为地随机改变颜色分布等于给CEM提供了一堆干扰信号。我在反思之后把这类颜色类的数据增强全部关闭只保留几何增强随机翻转、随机裁剪、缩放训练效果立刻改观。输入尺寸方面RT-DETR对输入分辨率不敏感但我发现雾天场景下分辨率对结果的影响比正常天气更敏感。我将输入尺寸从640整调到768之后小目标AP提升了大约2个点。原因是雾天中远处目标的边缘纹理信息量本来就少更大的输入尺寸相当于给了模型更多像素去捕捉这些信息。这个提升不是模型改出来的纯是吃掉了分辨率红利却也需要更高的显存开销落地时可以根据显存情况权衡。6. 雾天检测实操中的常见问题速查表以下是我在整个实验过程中遇到的一些典型问题每个问题都配了实际排查方案建议直接收藏对照。问题现象可能原因初步解决方案训练初期loss震荡剧烈CEM调制系数初始值过大或分布不适配将调制初始值设为1附近并在颜色引导输出后加LayerNorm真实雾天mAP提升比合成雾天小真实雾天退化规律复杂全局颜色先验覆盖不全提高局部颜色引导权重并在真实雾图上增加细粒度标注数据mAP稳定但小目标AP偏低颜色增强偏向全局对小目标局部细节关注不够在CEM输出增加一个尺寸敏感的注意力分支加强小尺寸目标区域的置信度多模态融合后效果反而变差多模态原始数据未做精确对齐特征层存在错位检查配准误差训练时在特征融合层增加对齐损失增加CEM后训练变慢但增益微薄辅助损失权重过高主检测损失被稀释将辅助损失权重降到0.05或以下并在训练后期衰减推理时有雾与无雾图性能波动大模型对不同退化程度过度敏感在训练数据中混合不同雾浓度的样本降低对雾浓度的过拟合FLOPs增加超过预期动态卷积核尺寸过大或通道数太多调整调制小卷积的尺寸与通道数做成可配置的层针对精度与开销做平衡颜色增强过度导致过饱和伪影双色引导对局部退化判断过于激进约束颜色增益上限设置调制系数clamp例如限制在0.8~1.2之间这里我想单独说说小目标AP的问题。雾天场景下小目标检测难不仅仅是因为目标小更是因为颜色退化对小目标特征的影响比对大目标更严重。大目标即使颜色偏移了但边缘和形状信息相对丰富检测头仍然能通过形状线索完成定位小目标的高频细节在雾天几乎被完全抹去唯一的判别性信息就是颜色。CEM的局部引导刚好补上了这一环所以我建议在做类似项目时不要只盯整体mAP务必将小目标AP单列观察和优化。7. 消融实验设计与结果解读因为CEM这个模块在论文中已经给出了整体收益但对于想把它融进自己项目的人来说你最应该关心的不是“有没有用”而是“哪一部分在起作用、什么时候起作用”。所以我做了多维度的消融实验结果如下消融配置合成雾天mAP真实雾天mAP小目标AP基座RT-DETR-L无增强58.256.441.1基座前置去雾预处理58.756.241.8基座CEM只用全局引导60.158.044.3基座CEM全局局部引导62.259.147.2基座CEM辅助损失63.059.847.9基座CEM辅助损失多模态融合64.560.949.3从这组数据里能得到几个结论前置去雾预处理几乎帮不上忙原因前面分析过——预处理输出没有和检测器联合训练分布不匹配全局引导带来的提升集中于整体mAP但小目标AP提升有限局部引导加入后小目标AP直接跳升了近3个点是最关键的一环辅助损失主要在合成雾天数据上起作用真实雾天增益相对较小多模态融合则提供了最稳定的全局收益。还有一点值得特意说明我专门对比过在训练时保持CEM固定不训练和端到端联合训练两种方式。固定不训练时相当于只把CEM当作一个静态预处理算子来处理图片效果大概只有端到端训练的40%左右。这个结果强化了我对CEM设计哲学的判断——它的价值不是算法本身而是它和检测器能在一个损失函数下联合优化。如果直接把别人训练好的CEM权重拿去用而不在自己数据上微调你的场景特殊性光照、相机参数、雾浓度分布会直接限制效果。8. 给想复现这个方向的实践者的几点忠告CEM这个方向在论文里看着不难真动手来做有几个坎儿是绕不过去的我花了最多时间的反而不是模型结构而是数据和训练策略。第一雾天数据集一定不能只用一套合成管线。合成雾和真实雾的分布有明显gap只用合成数据微调出来的模型在真实场景下会掉点明显。我实际做了三套雾天模拟按深度线性变化的均匀雾、随机密度斑块的局部雾、带光照方向性的侧光雾三套混合训练后真实场景的泛化明显改善。第二CEM的辅助损失设计要克制。有人看到颜色保真辅助损失有效就把它的权重拉得很高结果检测主loss几乎不起作用模型整体检测精度掉得惨不忍睹。辅助损失的作用是给引导分支一个方向参考在训练后期逐渐降低它的存在感让主任务逐步接管。我在实践中把辅助损失的权重从初试的0.4调低到0.1最后的mAP反而比0.4高出不少。第三多模态融合不是加一个分支就完事。如果多模态数据本身的噪声比较大或者配准精度不够融合后的特征可能是混乱的。建议先单独评估每个模态在雾天场景的独立性能再根据性能差异分配融合权重或者先冻结一条支路训练另一条支路再到后面开放联合训练这样训练起来的收敛行为会更可预期。第四如果你打算做更进一步的颜色增强可以考虑把CEM作为一个基础组件和一个更轻量的透射率估计模块组合起来做一个更完善的深度估计分支。透射率估计能够告诉模型每个位置的雾浓度这比单纯从颜色特征推算退化程度更本质。CEM加透射率约束是这方向上很自然的下一步扩展能带来更稳定的跨场景泛化能力。根据我自己的复现经验CEM这个模块在雾天检测和低照度场景上有稳定增益工程实现难度也不算太高对比去雾GAN类方案有显著的轻量化优势。如果你正在做的项目涉及户外视觉感知、安防监控或者自动驾驶感知而且数据集里天气退化场景占一定比例这个方向值得认真尝试。坑我已经替你趟过一遍剩下就看你在自己的场景里把它调顺了。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。