上周调一个边缘设备上的目标检测模型,推理时显存直接爆了。
把YOLOv11的Backbone换成轻量版,速度反而降了30%。
这让我重新审视Backbone的设计——很多论文里一笔带过的“跨阶段局部网络”,实际部署时才是性能的关键。
从梯度信息重复说起
早期YOLO的Backbone有个隐性问题:深层卷积层重复学习相同的梯度信息。
你在训练日志里可能见过这种现象——某个阶段的loss长时间不下降,但参数明明在更新。
这就是梯度流在深层网络里“撞墙”了,大量计算被浪费在重复的特征提取上。
CSPNet(Cross Stage Partial Network)的出发点很直接:让梯度流走不同的路。
不是简单地增加分支,而是把特征图拆成两部分,一部分直接穿到下一阶段,另一部分进卷积块。
最后再把这两部分拼起来。
这样设计,理论上能减少30%的计算量,同时增强特征融合能力。
classCSPBlock(nn.Module):