YOLOv3 vs YOLOv4大白话对比:新手速懂指南
整个下采样流程可以清晰地表示为:
```plain
输入 416×416×3
↓
CBL(32)
↓
下采样(64) → Res×1
↓
下采样(128) → Res×2
↓
下采样(256) → Res×8 → 输出 52×52×256
↓
下采样(512) → Res×8 → 输出 26×26×512
↓
下采样(1024) → Res×4 → 输出 13×13×1024
```
#### 颈部网络
有了骨干网络提取的多尺度特征,接下来就需要把它们融合起来。YOLOv3 采用的是经典的 FPN(特征金字塔)结构,走的是自上而下的融合路径。
具体来说,从骨干网络最底层输出的13×13深层特征开始,先堆叠5层CBL模块,然后接一层CBL和卷积,得到第一组检测需要的13×13×255张量,专门负责大目标。
但工作还没完。在五层CBL之后,模型会引出一个分支,经过一层CBL调整后,立即进行上采样。上采样能将13×13的小图放大成26×26,常见的做法有最近邻插值或双线性插值。放大后的特征图,会与骨干网络倒数第二层(26×26)的浅层特征进行通道拼接融合。之后,再重复一遍“五层CBL、一层CBL、一层卷积”的结构,输出26×26×255的张量,负责检测中等目标。
同理,对融合后的26×26特征再进行一次上采样和拼接,最终就能得到52×52×255的高分辨率特征图,专门用来捕捉小目标。
通过这种多尺度上采样与跨层拼接,YOLOv3 成功地把深层语义信息和浅层细节信息结合在了一起,让大、中、小不同尺寸的物体都能被有效地检测到。
#### 检测头部
YOLOv3 最后会输出三个不同尺度的预测张量。每个尺度的特征图,其实就是把图像划分成了密密麻麻的网格(比如13×13=169个)。
每个网格单元都对应一个255维的特征张量。这个255是怎么来的?它是3×85的结果。也就是说,每个网格预先设定了3个不同形状的锚框(Anchor Box),每个锚框又对应85个预测参数,包含了坐标偏移、尺寸、置信度以及类别概率。
**举个例子:对于13×13层来说:**
- 第一段85维 → 负责修正第1号(偏宽)锚框
- 第二段85维 → 负责修正第2号(中等)锚框
- 第三段85维 → 负责修正第3号(偏高)锚框
为什么要这么设计?原因很简单:一个网格里可能同时存在多个物体,而且它们的形状千差万别。一个锚框模板肯定不够用,所以提前准备三种不同长宽比的模板,让网络去学习和修正,这样检测精度就上去了。
所以,13×13的深层特征图,因为感受野大、语义信息强,专门检测大目标;26×26的负责中等目标;52×52的高分辨率特征图,则擅长捕捉小目标。三种尺度的锚框规格也是分别匹配的,共同保障了多尺度检测的最终效果。
---
说完了YOLOv3,我们再来看它的进化版——**YOLOv4**。如果说v3是奠基之作,那v4就是把工程优化做到了极致。
YOLOv4 的主干特征提取网络变成了 **CSPDarknet-53**。名字其实已经说明了核心:它还是Darknet-53,但引入了CSP(跨阶段部分连接)模块。这个技巧很巧妙,它把计算量砍了约20%,而且训练起来更稳定。
另一个重要的改变是激活函数。YOLOv4 将CBL中的LeakyReLU换成了**Mish激活函数**。Mish函数更平滑,梯度收敛更快,虽然只用在网络的第一层,但效果立竿见影。
在残差单元内部,CBL也变成了CBM。残差模块的改动更大一些,多了几个CBM层,并且内部做了拼接操作,这就是CSP模块的精髓。
此外,YOLOv4 还在Neck部分引入了一个关键组件——**空间金字塔池化(SPP)**。它用了3个不同尺寸的池化核(比如13×13、9×9、5×5)对特征图进行处理,然后把结果拼接起来。这个操作的核心在于两点:一是大尺寸的池化核(13×13)极大地增加了感受野,二是多尺寸池化让模型能提取更丰富的特征。结果就是,小目标检测变强了,而计算量没怎么增加。
**Neck部分**
YOLOv4的Neck部分比v3复杂得多。骨干网络输出后,先经过三层CBL,接着是SPP模块,再堆叠三层CBL整合,得到13×13×512的深层特征。
然后,特征会经过一层CBL和上采样,与骨干网络的26×26层特征拼接,再经过五层CBL提纯。之后,再重复一遍上采样和拼接,得到52×52的浅层特征。
但YOLOv4 没有止步于此。它又加了一条**反向下采样分支**:从浅层特征开始,用卷积逐步缩小特征图尺寸,将浅层的定位细节反向传递给上层特征,强化深层语义。这种**自上而下 + 自下而上**的双向融合结构,就是大名鼎鼎的 **PANet**。
可以简单对比一下:YOLOv3 的FPN是单向融合,而YOLOv4的PANet是双向融合。双向融合弥补了FPN的不足,既让深层特征有了细节,也让浅层特征有了语义,大小目标的特征融合更充分,检测精度自然就上去了。