YOLO系列基础回顾:YOLOv5/v8/v9核心架构对比

做小目标检测这几年,我最大的感受就是:选对基线模型,项目就成功了一半。YOLOv5、v8、v9这三个版本,我每个都在实际项目中踩过坑、调过参。今天咱们就掰开揉碎,看看它们到底差在哪。

一、YOLOv5:经典中的经典

YOLOv5虽然名字里带个「5」,但它其实是Ultralytics在2020年推出的作品。说实话,它把YOLO系列带到了一个全新的高度。

核心架构

  • Backbone:CSPDarknet53 + Focus层。Focus层说白了就是把图像切块再拼接,减少计算量。我刚开始用的时候总觉得这操作有点多余,后来在嵌入式设备上跑才发现——真香。
  • Neck:PANet + FPN。特征金字塔加路径聚合,这个组合让不同尺度的特征都能被充分利用。
  • Head:三个检测头,分别负责大、中、小目标。

小目标检测的关键点:YOLOv5的检测头是耦合的(分类和回归共享参数)。我在做交通标志检测时发现,这种设计对小目标不太友好——分类和回归任务其实需要不同的特征表达。

损失函数

YOLOv5用的是CIoU Loss。嗯,这里要注意:CIoU考虑了重叠面积、中心点距离和宽高比,比早期的IoU Loss收敛快不少。但我在项目中遇到过一个问题——当目标特别小(比如10x10像素以下)时,CIoU的宽高比惩罚项反而会拖慢收敛。

数据增强

Mosaic增强是YOLOv5的一大亮点。四张图拼成一张,小目标出现的频率直接翻倍。我个人习惯在训练初期用Mosaic,后期关掉——因为拼图会让目标位置分布不均匀,后期反而影响精度。

二、YOLOv8:全面升级

YOLOv8是Ultralytics在2023年初发布的。说实话,刚看到论文时我第一反应是:「这不就是v5换了个壳吗?」但真正用下来才发现,改动都在刀刃上。

架构变化

  • Backbone:C2f模块替代了C3。C2f其实就是把C3的残差连接改成了更密集的跨层连接。你想想看,梯度流更顺畅了,深层网络训练起来自然更稳。
  • Neck:还是PANet+FPN,但特征融合方式做了优化。
  • Head解耦头!这是我最喜欢的改动。分类和回归分支彻底分开,各自用独立的卷积层。我在做遥感图像检测时对比过,解耦头对小目标的AP提升了大约3-5个点。

我的建议:如果你在YOLOv5上已经调得不错了,想进一步提升小目标精度,直接换YOLOv8的解耦头是最省力的方案。不需要动太多代码,效果立竿见影。

Anchor-Free

YOLOv8彻底抛弃了Anchor。为什么?因为Anchor的尺寸是固定的,小目标的尺寸变化又特别大,你很难预设一组完美的Anchor。Anchor-Free让模型自己去学目标的位置和尺寸,灵活性高了很多。

我曾经在一个工业缺陷检测项目里试过,目标尺寸从5x5到50x50不等。用YOLOv5时,我花了整整两天调Anchor,效果还是不理想。换成YOLOv8的Anchor-Free方案,直接省掉了这步,精度还更高。

损失函数

YOLOv8用了DFL(Distribution Focal Loss) + CIoU的组合。DFL把边界框回归从「预测一个值」变成了「预测一个分布」。说白了,就是让模型知道「目标大概在这个位置,但不确定度是多少」。这对小目标特别有用——因为小目标的信息本来就少,模型需要学会「模糊的正确」。

三、YOLOv9:可逆编程的尝试

YOLOv9是2024年初的新作。说实话,刚看到PGI(Programmable Gradient Information)这个概念时,我愣了半天。但用下来发现,它解决了一个很实际的问题——信息丢失。

核心创新

  • PGI(可编程梯度信息):简单理解,就是给网络加了一条「信息高速公路」。深层网络在传递信息时,小目标的细节很容易丢失。PGI通过可逆连接,让梯度能直接流回浅层,保证了小目标特征的完整性。
  • GELAN(广义高效层聚合网络):这是对CSPNet的进一步扩展。GELAN可以灵活组合不同的计算模块,有点像乐高积木——你想用卷积就用卷积,想用Transformer就用Transformer。

避坑指南:我曾经在YOLOv9上踩过一个坑——PGI虽然能保留信息,但显存占用比v8高了约20%。如果你的GPU显存只有8G,建议先用v8,或者把v9的batch size调小一点。

小目标检测表现

从我的实测来看,YOLOv9在极小目标(<10像素)上的召回率确实比v8高。原因很简单:PGI让浅层的细节信息能完整传递到检测头。但要注意,这种提升在中等目标上并不明显——说白了,PGI就是为小目标量身定做的。

四、三版对比总结

维度 YOLOv5 YOLOv8 YOLOv9
Backbone CSPDarknet53 C2f GELAN
Head 耦合头 解耦头 解耦头
Anchor Anchor-Based Anchor-Free Anchor-Free
损失函数 CIoU DFL + CIoU DFL + CIoU
小目标友好度 ★★☆☆☆ ★★★★☆ ★★★★★
显存占用
推理速度

五、我的选择建议

如果你问我做小目标检测该选哪个,我会这么回答:

  • 追求速度:YOLOv5。在边缘设备上,v5的推理速度还是最快的。我有个项目需要在树莓派上跑,最后选的就是v5n。
  • 平衡方案:YOLOv8。解耦头+Anchor-Free的组合,对小目标已经很友好了。大部分场景下,v8都是最稳妥的选择。
  • 极致精度:YOLOv9。如果你的目标特别小(比如无人机航拍图像里的行人),而且GPU显存够用,v9的PGI能帮你多提几个点。

最后说一句:模型选型只是第一步。真正决定小目标检测效果的,还是数据增强、训练策略和调参。下一章我会详细讲怎么给YOLO做数据增强,让模型「看见」更多小目标。