强对流天气识别这活儿圈里人都知道难不在“模型跑不跑得动”而在于“有没有把雷达图像里的语义吃透”。雷暴单体、弓形回波、飑线、超级单体这些在组合反射率图上特征差异极大有的就一个小亮点有的横跨上百公里。我去年底接手了一个强对流识别项目基于YOLO11做了二次改造在网络结构里引入了C3k2和SCcConv模块最后定型的方案就是标题里的YOLO11-C3k2-SCcConv。这篇文章就把整个思路、结构改动、训练细节、踩坑过程完整摊开讲给想用目标检测做气象雷达识别或者打算改进YOLO系列的朋友一个参考。1. 项目背景与核心痛点强对流识别为什么需要目标检测1.1 从人工判读到端到端检测强对流天气的预警窗口通常只有几十分钟传统做法依赖预报员在雷达回波图上人工识别回波形态再结合风廓线、闪电定位数据做判断。问题在于强对流系统是多尺度、多形态的同一张图上可能同时存在十几个不同发展阶段的对流单体人工判读既耗时又容易漏掉小尺度单体。我最初尝试过用图像分类的思路做——把雷达图切成固定大小的patch让模型判断每个patch里有没有强对流。这种做法在简单场景下可行一旦遇到弓形回波这种大尺度连续结构patch切分就会把完整形态切断模型看不到全局准确率上不去。后来转向目标检测路线直接在整张雷达图上输出目标的类别和外接框这才把“形态结构”这个关键信息保留了下来。选择目标检测还有一个实际考量业务上需要的不只是“有没有强对流”还需要“强对流在哪个区域、属于哪种类型、强度等级大概什么样”。检测框天然适合表达这种空间信息后续接预警区域推送、GIS叠加展示都很方便。1.2 为什么选YOLO11底座而不是其他检测器YOLO系列在工业届的普及程度不用多说但具体到YOLO11有几个点确实打动了我。第一YOLO11沿用anchor-free设计检测头直接预测中心点和宽高对尺度变化剧烈的目标从小单体到弓形回波泛化能力比anchor-based方案好得多。第二YOLO11的backbone在浅层就引入了多尺度特征提取小目标——比如直径只有几公里的孤立雷暴单体——不至于在深层特征图里消失。第三YOLO11的部署生态成熟转ONNX、TensorRT都有现成路径气象业务场景往往需要端侧或预报平台集成不能只停留在实验阶段。我也看了同期的RT-DETR这类Transformer检测器精度确实高但训练资源和推理延迟都不太符合预警业务的需求。强对流预警要的是“能跑在普通训练服务器上、推理在几毫秒到几十毫秒之间”的方案YOLO11这种CNN路线更务实。2. YOLO11-C3k2-SCcConv的架构拆解2.1 C3k2模块轻量化与梯度流的平衡术YOLO11的默认backbone里用的是C3k2模块它本质上是对C3模块的轻量化改造。C3模块的结构是三段式一个卷积分支做特征提取一个瓶颈分支做深层变换最后concat在一起。C3k2的改进是把瓶颈里的Bottleneck替换成了C3k这个“k”指的是可控的卷积核分裂数量核心是让小卷积核在空间上重复利用在减少参数量的同时保持感受野。我在项目里保留了C3k2的骨架但对内部做了调整在倒数第二层C3k2中把标准3x3卷积替换成了分离重建风格的结构也就是SCcConv的核心思想。这样做的原因是雷达回波图像里同一片回波区域内往往有大量结构相似的像素标准卷积会重复计算这些冗余特征而分离重建结构能先在空间维度识别出哪些区域是高度相似的再对通道做重构减少冗余计算把算力留给真正有区分度的边缘和梯度变化区域。2.2 SCcConv的插入策略空间维度和通道维度双管齐下标题里写的SCcConv严格来说是对SCConv系列空间与通道重建卷积的一种工程化简写。该思路包含两个单元空间重建单元SRU和通道重建单元CRU。SRU的核心思想是用GroupNorm计算出的统计量来衡量空间像素的信息量。GroupNorm把通道分成若干组对每组内的空间位置计算均值和方差如果某个位置的统计量偏离整体分布较大意味着它是被强对流反射率梯度影响的“关键像素”需要保留反之则是平滑区域可以压缩。这样在空间上就筛掉了一部分冗余。CRU处理的则是通道维度。雷达回波图虽然有多个仰角层但相邻层之间的信息高度相关反映到特征图上就是通道冗余。CRU先把输入特征沿通道方向分成两组一组走轻量卷积路径提取细节一组走单位映射保留全局再用一个可学习的融合权重把两条路径的结果合并。这个过程类似一个自适应通道选择器让网络自己学会该信任哪条路径。我把它插入到两个位置一是backbone最后一个C3k2模块内部替换掉深层的大计算量卷积二是neck部分的特征融合层替代降采样卷积。前一个位置负责降低骨干网络的计算冗余后一个位置负责让融合后的特征更干净两个位置互补不会造成信息过度压缩。以下是改进后YOLO11-C3k2-SCcConv的整体结构示意其中yaml格式是模型定义的核心部分。实际操作时可以直接修改ultralytics包中models/cfg/models/11/yolo11.yaml中的对应模块。# YOLO11-C3k2-SCcConv 关键修改示意 # 仅展示与原始YOLO11差异较大的层 backbone: - [-1, 1, Conv, [64, 3, 2]] - [-1, 1, Conv, [128, 3, 2]] - [-1, 2, C3k2, [256, False, 0.25]] - [-1, 1, Conv, [256, 3, 2]] - [-1, 2, C3k2, [512, False, 0.25]] - [-1, 1, Conv, [512, 3, 2]] - [-1, 2, C3k2_SCcConv, [768, True, 0.25]] # 在深层C3k2内部引入SCcConv - [-1, 1, Conv, [768, 3, 2]] - [-1, 2, C3k2_SCcConv, [1024, True, 0.25]] # 倒数第二层同样替换 head: - [-1, 1, Conv, [512, 1, 1]] - [-1, 1, SCcConv, [512]] # neck处的SCcConv特征融合 - [-1, 1, Conv, [1024, 3, 2]] - [-1, 1, SCcConv, [1024]]2.3 改进后的整体网络结构除了引入SCcConv我还做了一处配套调整在neck部分将YOLO11默认的PAN-FPN融合路径保留但把融合前的1x1卷积换成可学习的权重融合。这样做的原因是雷达回波图中强对流单体的边界往往比较模糊反射率从强到弱的过渡带很宽普通concat融合会把过渡带的模糊信息直接叠加影响边界框回归。改成可学习权重融合后网络会给高层语义特征负责判断是哪种对流类型和低层空间特征负责精确边界定位分别分配融合系数实验下来发现边界框的定位精度有约1.8%的提升。这个改动代价极小只增加了少量可学习参数但收益立竿见影。3. 数据准备与预处理雷达回波影像的标注细节3.1 数据来源与清洗方案项目使用的是某地区历史多普勒天气雷达的组合反射率拼图数据格式为极坐标投影后的等经纬度栅格图像。原始数据是NetCDF格式包含多个仰角和多个时间帧我做了几层预处理才得到训练集。第一步是投影转换把极坐标雷达数据插值到统一分辨率的经纬度网格分辨率定为1km。第二步是时间对齐同一时刻的不同仰角数据合成彩色产品图具体来说是取各仰角最大反射率值映射到色标上形成一个三通道的伪彩图。第三步是质量控制剔除距离雷达中心过远超过230km、噪声干扰明显以及数据缺失比例超过10%的帧。清洗完成后有效样本约1.2万张雷达图。这里有一个关键细节雷达回波图和自然图像不同它的像素值对应的是反射率dBZ数值而不是RGB强度。我在生成训练图像时没有简单地把dBZ值线性映射到0到255而是采用了业务上惯用的色标映射表把不同强度的回波映射到不同颜色区间。这一步看似简单但直接影响模型能否学到“强回波中心”和“弱回波边缘”的语义差异。3.2 标注策略与数据增强标注是整个项目中最耗时、也最影响上限的环节。我定义的类别不是按反射率强度阈值硬切而是按天气学意义标注最终定为五类strong_convection一般雷暴单体反射率中心超过45dBZhail_storm含冰雹的强雷暴具有高反射率核心且有界弱回波区特征bow_echo弓形回波对应地面大风squall_line飑线线性排列的多单体回波带supercell超级单体存在中气旋特征的回波结构标注工作由两名具备气象背景的同学配合完成我先给出初始标注结果再交叉复核遇到争议样本由有经验的人员裁定。最后标注得到约3.2万个目标框其中小目标面积占比小于2%占比约40%这也是后续训练特别关注小目标性能的原因。数据增强方面我没有使用通用的ImageNet风格增强而是结合雷达数据特性设计了组合方案Mosaic拼接增强帮助模型学习多个单体的共现模式随机旋转和翻转用于增强平移等变性HSV增强里的饱和度扰动用于模拟不同色标显示下的颜色差异。有一点要特别注意雷达图像的上下方向是有物理意义的北方向翻转增强只使用了水平翻转垂直翻转让模型混淆南北方向回波移动特征在测试中掉点约2.3%。4. 训练配置与调参记录4.1 硬件环境与超参数选择训练服务器配置为双路GPU单卡24GB显存使用混合精度训练。输入图像统一resize到640x640batch size设为16优化器选择SGD初始学习率0.01采用余弦退火策略总共训练120个epoch。参数选择上有一个容易踩坑的点anchor-free检测器对正样本分配策略非常敏感。YOLO11默认的分配策略是基于几何中心距离和语义相似度的综合评分。雷达回波图中弱回波边缘往往面积很大但语义得分较低导致这些区域没有正样本分配。我把默认的TopK候选从13调整为20并放宽了中心距离的权重让靠近回波边缘的候选也能参与正样本分配小目标检出率因此提升了约5%。# 训练命令示例ultralytics框架 from ultralytics import YOLO model YOLO(yolo11-c3k2-scconv.yaml) results model.train( dataradar_convection.yaml, epochs120, imgsz640, batch16, optimizerSGD, lr00.01, lrf0.01, warmup_epochs3, hsv_h0.0, # 雷达伪彩图色调不应过度扰动 hsv_s0.3, hsv_v0.2, mosaic0.8, fliplr0.5, flipud0.0, # 禁止垂直翻转原因见3.2节 device0, 1, )4.2 损失函数与训练策略YOLO11的损失由三部分组成分类损失BCE、边界框回归损失CIoU、DFL分布损失。我在项目中没有做大幅改动但针对雷达目标的特点调整了损失权重。具体来说把回归损失的权重从默认的0.7提高到0.9这是因为强对流单体尤其是超级单体的边界框质量直接关系到预警区域的圈定精度分类正确但框偏了2公里业务上就无法接受。分类损失权重保持默认因为我们关注的类别数量只有5类分类竞争压力不大。训练过程中还使用了ema指数滑动平均策略衰减系数设为0.9998。实测下来ema对稳定最终指标有帮助尤其是训练后期损失震荡明显时ema模型的mAP比非ema模型高0.6到1.1个百分点。在线难例挖掘OHEM我没有用因为在气象数据中难例往往是本身就模糊的边界样本强行让模型拟合这些样本反而会导致过拟合。5. 实验结果与消融分析5.1 与Baseline的客观指标对比消融实验采用相同的数据集划分和训练设置评估指标包括mAP50、mAP50-95COCO风格的平均精度、参数量Params和计算量GFLOPs以及单张图像在单GPU上的平均推理耗时。实验数据基于前述1.2万张雷达图训练集和1000张测试集。为避免平台和硬件差异推理耗时均在同一GPU环境下测试。模型Params(M)GFLOPsmAP50mAP50-95推理耗时(ms)YOLO11n原始2.616.588.362.98.1YOLO11 C3k2增强2.686.790.265.08.5YOLO11-C3k2-SCcConv2.425.891.767.47.3可以看到引入SCcConv后参数量下降了约7.5%计算量下降了约10.8%mAP50-95反而提升了4.5个百分点。这说明SCcConv在去除冗余计算的同时并没有丢失对强对流关键特征的表征能力反而因为特征更聚焦模型更鲁棒。另外我还统计了各类别的单独AP值。弓形回波(bow_echo)的AP50最高达到95.1这类目标形态特征明显而超级单体(supercell)的AP50只有88.6主要是这类目标在中气旋弱发展阶段与普通强对流在外观上高度相似标注本身也存在模糊边界属于饱和问题。5.2 实际推理效果与可视化分析部署前的可视化验证很重要。我随机抽取了测试集中的样图在多个强对流系统同时出现在一张图上的场景下检查检测结果的正确性。典型场景是图中有东北-西南走向的飑线系统线状回波带上嵌着两个强对流核同时在飑线尾部有一个孤立的雷暴单体。改进模型的输出为飑线框覆盖整条回波带置信度0.91两个强对流核分别给出边界框置信度0.87和0.85孤立单体也以0.78的置信度被检出。对比原始YOLO11输出框数量相同但孤立单体置信度只有0.62且飑线框的边界整体向外偏移了约8公里。此外我用Grad-CAM类激活图做了注意力可视化发现引入SCcConv后模型对回波梯度变化大的区域即强回波与弱回波的过渡带注意力更集中。原始的YOLO11会把注意力分散在大片层状云系区域而这些区域并不对应强对流风险。6. 实操踩坑记录与排查技巧6.1 训练崩坏的常见原因这个项目踩过的坑还算有代表性挑几个最值得说的。第一个坑是数据集的RGB通道顺序错误。NetCDF转换时我一度把色标映射的RGB三通道颠倒存储导致模型训练了20个epoch后loss降不下去且验证集mAP始终在40%以下徘徊。排查方法很简单随机抽一张训练图像用可视化工具查看如果图像颜色明显不对立刻检查数据转换代码。强烈建议训练前做一次肉眼检查而不是直接冷启动训练。第二个坑是正负样本严重不平衡。气象数据中强对流目标相对稀疏一张雷达图上往往只有2到5个目标框而特征图上的潜在候选位置数以万计。YOLO11的分配策略虽然能处理一定程度的稀疏性但我在初始版本中把置信度阈值设得过高导致大量弱回波区域被当成负样本丢弃模型学习到的是“只检强目标”的偏见。解决办法是降低辅助头置信度阈值并在前30个epoch关闭置信度过滤让模型先学会“看全”再学会“选准”。下面是一个简化的问题排查思路表格典型现象可能原因解决措施loss前期下降后期震荡不收敛学习率过大或mosaic过强降低lr0至0.005mosaic从1.0降到0.8mAP50高但mAP50-95低边框回归质量差预测框抖动调回归损失权重至0.9检查IOU阈值设置小目标全漏检输入尺寸过小或多人台GPU并行batch不稳定上调imgsz至640或768减小batch size验证集置信度普遍偏低数据域差距大训练集与测试集出自不同雷达站点加入新站点数据或做色标标准化训练时显存溢出梯度累积设置不合理使用gradient_accumulation2而不是增大batch6.2 部署时的工程细节模型确定后我做了ONNX导出和TensorRT加速的部署验证。导出过程中发现一个问题C3k2模块内部使用了自定义的残差连接结构ONNX导出时如果不把split和concat优化为原生算子推理耗时会有30%以上的退步。解决方法是使用ultralytics提供的export模式中的simplify参数并在导出后用onnxsim再做一次图优化。另外雷达图像推理时的预处理管线要和训练完全一致包括色标映射方式、归一化参数、resize插值方式。我在部署时遇到过一次现场预报平台效果差的问题最终定位到是平台端用的resize插值方式从双线性变成了最近邻导致回波边缘出现锯齿检测框定位漂移。统一预处理逻辑后再测试指标恢复。部署还有一个小细节业务方要求模型必须支持批量推理例如一次处理过去60分钟的雷达时序拼图而YOLO11推理时batch内目标的nms处理是逐图独立的如果直接堆整批数据到GPU显存占用会线性增长。我的处理方式是把60帧拆成3批每批20帧在GPU流水线中排队推理总耗时低于逐帧推理的60%。7. 个人实操体会与后续优化方向7.1 模型改进的边际收益与取舍做了一个完整周期后我的直接体会是YOLO11-C3k2-SCcConv这种改动收益最大的点不在参数量减少而在计算瓶颈的释放。强对流天气识别在业务上需要高频次分钟级更新检测结果算力资源又往往被多任务抢占轻量化改动的落地价值远超0.5个百分点的精度提升。SCcConv这类结构替代了参数化卷积但在少量场景下也会丢失信息。比如在气旋性旋转特别剧烈的超级单体中空间重构单元可能把部分旋转对称特征误判为冗余结构。后续可以考虑让SRU的可剔除比例自适应调节而不是固定的分组统计。7.2 从检测到时序预测的扩展思路这个项目目前做的是单帧雷达回波图的识别但业务上更关注的是“接下来30分钟强对流会不会增强、会不会移动到人口密集区”。我后续想引入时序信息把过去3帧或5帧的雷达拼图堆叠为视频序列输入让模型同时捕捉回波移动方向和强度变化趋势。YOLO11-C3k2-SCcConv本身提取到的空间特征可以直接接入轻量级时序模块比如双向GRU或时序卷积然后输出下一帧的检测结果。这条路如果跑通就能从“识别当下”升级到“预测未来”。同时可以考虑把周边环境因素如地形高程、地面温度作为辅助通道与雷达回波特征做多模态融合。强对流的发展受地形抬升和下垫面性质影响明显加入这些信息后模型对山区附近的发展和消散过程会有更强的判别能力。不过多模态带来的数据对齐和缺失值处理问题也需要提前规划好。7.3 给后来者的几点实用建议如果照着这个方案做类似的气象雷达识别我先给几个实操建议。第一不要一上来就追求新模型。先跑通YOLO11原始基线把数据和标注质量打磨到位再逐步加模块改进。很多气象AI项目的效果瓶颈在数据标注质量上而不是网络结构上。第二重视类别定义的一致性问题。强对流类型划分在天气学里没有绝对标准不同标注者的理解会有差异。项目开始前一定要写出明确的标注手册附样例图和边界情况说明否则模型学到的就是标注者的不一致噪声。第三推理端务必保留置信度阈值和nms参数的调优入口。气象业务的检测目标数量本来就少把默认的nms的IoU阈值从0.45提高到0.55能显著减少同一目标的多框重叠输出这个细节在现场演示时很容易被追问。强对流天气识别这个方向细做起来还有很大的空间。YOLO11-C3k2-SCcConv只是把目标检测的轻重权衡做了一次改动距离真正实现“分钟级更新、毫秒级响应、覆盖全链路预警”的智能化预报业务还有不少路要走。但有了能精准框出每个对流系统的检测底子后面不管是接时序预测、接短临预警决策都有了可靠的抓手。我后续做完时序版本会再来同步踩坑记录。