雨雾天锥桶识别掉点50%?YOLOv11+轻量去雾实战,召回率从42%提升至92%

张开发
2026/4/17 23:15:29 15 分钟阅读

分享文章

雨雾天锥桶识别掉点50%?YOLOv11+轻量去雾实战,召回率从42%提升至92%
一、项目背景恶劣天气下的自动驾驶痛点上个月在做园区自动驾驶巡检项目时遇到了一个致命问题晴天时道路锥桶识别准确率能到98%但一到小雨或者大雾天召回率直接跌到42%经常出现漏检导致车辆撞上锥桶的情况。客户要求雨雾天气下识别准确率必须达到90%以上否则项目无法验收。我试过直接用官方YOLOv11预训练权重微调也试过各种复杂的去雾算法效果都不理想。踩了无数坑后总结出雨雾天识别差不是单一问题而是数据集偏差图像退化模型特征提取能力不足三者叠加的结果。单纯靠调参或者加数据根本解决不了必须从预处理、模型结构到训练策略做全链路优化。最终我采用了轻量MSRCR去雾YOLOv11小目标优化域自适应微调的方案经过两周的调优实现了晴天准确率98.7%小雨天94.3%大雾天91.5%单张1080P图片推理速度仅18ms完全满足自动驾驶实时性要求。本文将分享所有可直接复用的代码和经验。二、技术栈选型优先保证实时性和边缘设备部署能力目标检测YOLOv11n速度最快小目标检测能力优于前代图像去雾MSRCR多尺度Retinex轻量高效CPU即可实时运行数据增强Albumentations 1.4支持雨雾模拟增强训练框架PyTorch 2.4 Ultralytics 8.3部署框架TensorRT 10.2Jetson Orin NX部署三、系统整体架构专门针对雨雾天气设计的两级处理架构将去雾增强与目标检测解耦便于单独优化车载摄像头采集图像预处理模块MSRCR实时去雾增强对比度与亮度校正YOLOv11锥桶检测非极大值抑制结果输出给自动驾驶系统四、雨雾天识别难的核心原因很多人以为雨雾天识别差只是因为图像模糊其实远不止如此大气散射效应光线被水滴散射导致目标对比度下降边缘模糊远处的小锥桶几乎和背景融为一体伪目标干扰雨滴、雾气团、路面反光会产生大量类似锥桶的纹理导致误检率飙升数据集严重偏差COCO等公开数据集中雨雾样本占比不足1%模型根本没见过这种场景特征混淆雨雾会破坏目标的形状和颜色特征模型容易把锥桶误判成垃圾桶、路牌或者树木五、核心优化方案详解5.1 第一步构建高质量雨雾锥桶数据集这是所有优化的基础没有好的数据再复杂的模型也没用。我总共构建了1500张图片的数据集其中真实雨雾样本600张在不同天气条件下实地拍摄合成雨雾样本700张用晴天图片合成晴天样本200张保证晴天效果不下降关键技巧不要只拍清晰的锥桶多拍远处的小锥桶、被雾气半遮挡的锥桶、被雨水打湿的锥桶使用Albumentations自动合成雨雾效果参数要贴近真实场景importalbumentationsasA# 真实感雨雾增强rain_fog_transformA.Compose([A.RandomRain(slant_lower-10,slant_upper10,drop_length20,drop_width1,blur_value3,brightness_coefficient0.8,rain_typedrizzle,p0.7),A.RandomFog(fog_coef_lower0.1,fog_coef_upper0.5,alpha_coef0.1,p0.6),A.RandomBrightnessContrast(brightness_limit(-0.3,0.1),contrast_limit(-0.2,0.1),p0.8)])标注时特别注意小目标小于16×16像素的锥桶也要标注这是雨雾天漏检的重灾区5.2 第二步轻量实时去雾预处理我测试了Dark Channel Prior、DehazeNet、MSRCR等多种去雾算法最终选择了MSRCR它不需要训练纯CPU即可实时运行效果足够好非常适合边缘部署。MSRCR核心代码importcv2importnumpyasnpdefmsrcr_dehaze(image,sigma_list[15,80,250],G5.0,b25.0,alpha125.0,beta46.0):多尺度Retinex色彩恢复去雾算法imagenp.float32(image)1.0# 避免log(0)retinexnp.zeros_like(image)forsigmainsigma_list:gaussiancv2.GaussianBlur(image,(0,0),sigma)retinexnp.log(image)-np.log(gaussian)retinexretinex/len(sigma_list)# 色彩恢复img_sumnp.sum(image,axis2,keepdimsTrue)img_colornp.log(alpha*image/img_sum)retinexretinex*(G*img_colorb)# 归一化min_valnp.min(retinex)max_valnp.max(retinex)retinex(retinex-min_val)/(max_val-min_val)*255returnnp.uint8(retinex)效果对比仅加入这一步预处理雨雾天召回率就从42%提升到了67%而且推理速度只增加了2ms。5.3 第三步YOLOv11模型针对性优化针对雨雾和小目标的特点对YOLOv11做三处关键修改提升输入分辨率从640×640提高到800×800小目标检测精度提升明显速度只下降15%加入CBAM注意力机制在Backbone的最后三个C2f层加入CBAM让模型自动关注锥桶区域忽略背景噪声加强P3检测头将P3层的通道数从128增加到192提升小目标特征提取能力修改yolov11n-cone.yaml配置文件backbone:-[-1,1,Conv,[64,3,2]]-[-1,1,Conv,[128,3,2]]-[-1,2,C2f,[128,True]]-[-1,1,Conv,[256,3,2]]-[-1,2,C2f,[256,True]]-[-1,1,Conv,[512,3,2]]-[-1,2,C2f,[512,True]]-[-1,1,CBAM,[512]]# 加入CBAM-[-1,1,Conv,[1024,3,2]]-[-1,2,C2f,[1024,True]]-[-1,1,CBAM,[1024]]# 加入CBAMhead:-[-1,1,Conv,[512,1,1]]-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,6],1,Concat,[1]]-[-1,2,C2f,[512,False]]-[-1,1,CBAM,[512]]# 加入CBAM-[-1,1,Conv,[192,1,1]]# P3通道数从128增加到192-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,4],1,Concat,[1]]-[-1,2,C2f,[192,False]]# P3-[-1,1,Conv,[192,3,2]]-[[-1,12],1,Concat,[1]]-[-1,2,C2f,[512,False]]# P4-[-1,1,Conv,[512,3,2]]-[[-1,9],1,Concat,[1]]-[-1,2,C2f,[1024,False]]# P5-[[15,18,21],1,Detect,[nc]]5.4 第四步域自适应微调策略先在合成雨雾数据集上预训练30轮然后在真实雨雾数据集上微调20轮微调时冻结Backbone前5层只训练后面的特征提取层和检测头。这样既可以利用合成数据的多样性又能让模型适应真实雨雾场景避免过拟合。训练命令# 第一阶段合成数据预训练yolo traindatacone_synthetic.yamlmodelyolov11n-cone.yamlepochs30imgsz800batch16# 第二阶段真实数据微调yolo traindatacone_real.yamlmodelweights/last.ptepochs20imgsz800batch8freeze5六、最终效果对比所有测试均在包含300张雨雾天图片的独立测试集上进行方案雨雾天召回率雨雾天mAP0.5推理速度(ms)误检率原生YOLOv11n 64042.1%38.7%823.5%原生YOLOv11n 80051.3%47.2%1119.8%MSRCR去雾67.5%62.3%1312.7%模型结构优化82.4%78.6%167.3%域自适应微调92.1%89.5%183.2%可以看到每一步优化都带来了明显的效果提升最终方案在保证实时性的前提下将雨雾天召回率提升了50个百分点。七、踩坑避坑指南不要用复杂的深度学习去雾算法DehazeNet、FFA-Net等虽然去雾效果好但推理速度慢而且容易引入伪影反而降低检测精度。MSRCR是工业界的最佳选择不要只在合成数据上训练合成雨雾和真实雨雾还是有差距的必须有至少30%的真实样本否则模型在实际场景中会严重掉点不要盲目提高分辨率超过1280×1280后精度提升不到5%但速度会下降50%以上800×800是最佳平衡点不要忽略误检问题雨雾天误检率很高可以通过降低置信度阈值同时提高NMS的IOU阈值来平衡不要用大模型YOLOv11n足够用YOLOv11s的速度会慢一倍精度提升不到2%完全得不偿失八、总结与展望雨雾天气下的目标检测是自动驾驶落地必须解决的问题没有银弹必须从数据、预处理、模型三个方面同时入手。本文介绍的方案已经在多个园区自动驾驶项目中落地效果稳定可靠。未来可以探索的方向实现端到端的去雾检测一体化模型进一步提升速度加入多传感器融合结合毫米波雷达的点云数据提升极端天气下的鲁棒性引入自监督学习利用大量无标注的雨雾图片提升模型泛化能力最后提醒大家工业项目的核心永远是贴近真实场景的数据只要数据足够好简单的模型也能做出惊艳的效果。

更多文章