5月22日复盘-YOLOV5
5月22日复盘
八、YOLOV5
从YOLOV5开始,就进到了工程化阶段了。
项目:
https://github.com/ultralytics/yolov5
1. 与YOLOV4对比
- 大体结构一致
- 主干网络是C3-Darknet53
- 网络最开始增加Focus结构
- Neck也是采用FPN+PAN,但将卷积变成了CSP
- 预测损失采用GloU损失
2. Focus模块
先分块,后拼接,再卷积
①、640 x 640 x 3的图像输入Focus结构,采用切片操作,先变成320 x 320 x 12的特征图;
②、再经过一次32个卷积核的卷积操作,最终变成320 x 320 x 32的特征图;
③、目的是加速
计算量的计算公式为:
计算量 = 卷积核尺寸 × 输入通道数 × 输出通道数 × 输出尺寸 2 \begin{aligned}&\text{计算量}=\text{卷积核尺寸}\times\text{输入通道数}\times\text{输出通道数}\times\text{输出尺寸}^2\end{aligned} 计算量=卷积核尺寸×输入通道数×输出通道数×输出尺寸2
F L O P s ( c o n v ) = 3 × 3 × 3 × 32 × 320 × 320 = 88473600 F L O P s ( F o c u s ) = 1 × 1 × 12 × 32 × 320 × 320 = 39321600 \mathrm{FLOPs(conv)}=3\times3\times3\times32\times320\times320=88473600 \\ \mathrm{FLOPs(Focus)}=1\times1\times12\times32\times320\times320=39321600 FLOPs(conv)=3×3×3×32×320×320=88473600FLOPs(Focus)=1×1×12×32×320×320=39321600
3. 整体网络结构
整体结构和YOLOV4非常接近。
3.1 SiLU 激活函数
- YOLOv5 的 Backbone 和 Neck 模块和 YOLOv4 中大致一样,都采用 CSPDarkNet 和 FPN+PAN 的结构,但是网络中其他部分进行了调整,其中 YOLOv5 使用的激活函数是 SiLU
- SiLU(x) = x·Sigmoid(x),具备无上界有下届、平滑、非单调的特性
3.2 bottleneck layery
-
Bottleneck 是用于减少参数和计算量的结构,其设计灵感来自于ResNet,结构如下:
- 1x1卷积:用于减少特征图的通道数
- 3x3卷积:用于提取特征,后接一个 Batch Normalization 层和 ReLU 激活函数
- 1x1卷积:用于恢复特征图的通道数,后接一个BN层
- 跳跃连接(Shortcut):将输入直接加到输出上,以形成残差连接
3.3 C3代替CSP
YOLOv5中的C3模块在CSP上进行了优化,非常相似但略有不同:
不同点:
- 具体实现:YOLOv4中的CSP模块通常使用残差块,而YOLOv5中的C3模块通常使用Bottleneck或BottleneckCSP块。
- 性能优化:YOLOv5中的C3模块在具体实现上进行了进一步优化,以提高计算效率和模型性能。
3.4 SPPF
- 将卷积核大小变成相同,然后将并行变成了串行+并行,2个K5池化=1 个K9池化,3个K5池化=1个K13池化,也就是结果相同的基础上,速度更 快,计算量更小
4. 输出头说明
灵活度较高,支持多种尺寸:
- 输入图像尺寸:通常为640 x 640(或者其它尺寸,如416 x 416等)
- 输出特征图:YOLOv5 使用大、中、小三个尺寸。
- 输出尺寸:
- 大目标: 通常是输入图像尺寸的 1/32
- 中目标: 通常是输入图像尺寸的 1/16
- 小目标: 通常是输入图像尺寸的 1/8
假设输入图像尺寸为640×640,具体的特征图尺寸如下:
∙ 大目标: 640 32 × 640 32 = 20 × 20 ∙ 中目标: 640 16 × 640 16 = 40 × 40 ∙ 小目标: 640 8 × 640 8 = 80 × 80 \bullet\quad\text{大目标:}\frac{640}{32}\times\frac{640}{32}=20\times20\\\bullet\quad\text{中目标:}\frac{640}{16}\times\frac{640}{16}=40\times40\\\bullet\quad\text{小目标:}\frac{640}8\times\frac{640}8=80\times80 ∙大目标:32640×32640=20×20∙中目标:16640×16640=40×40∙小目标:8640×8640=80×80
如果输入的图像是416尺寸的,那就和YOLOV3、YOLOV4的头机制一致了。
5. 开源项目
YOLOV5并没有学术论文,是一个开源项目,是 Ultralytics 公司于 2020 年6月9 日发布的。
项目可以在Github搜到:https://github.com/ultralytics/yolov5
预训练模型:
Model | size (pixels) | mAPval 50-95 | mAPval 50 | Speed CPU b1 (ms) | Speed V100 b1 (ms) | Speed V100 b32 (ms) | params (M) | FLOPs @640 (B) |
---|---|---|---|---|---|---|---|---|
YOLOv5n | 640 | 28.0 | 45.7 | 45 | 6.3 | 0.6 | 1.9 | 4.5 |
YOLOv5s | 640 | 37.4 | 56.8 | 98 | 6.4 | 0.9 | 7.2 | 16.5 |
YOLOv5m | 640 | 45.4 | 64.1 | 224 | 8.2 | 1.7 | 21.2 | 49.0 |
YOLOv5l | 640 | 49.0 | 67.3 | 430 | 10.1 | 2.7 | 46.5 | 109.1 |
YOLOv5x | 640 | 50.7 | 68.9 | 766 | 12.1 | 4.8 | 86.7 | 205.7 |
YOLOv5n6 | 1280 | 36.0 | 54.4 | 153 | 8.1 | 2.1 | 3.2 | 4.6 |
YOLOv5s6 | 1280 | 44.8 | 63.7 | 385 | 8.2 | 3.6 | 12.6 | 16.8 |
YOLOv5m6 | 1280 | 51.3 | 69.3 | 887 | 11.1 | 6.8 | 35.7 | 50.0 |
YOLOv5l6 | 1280 | 53.7 | 71.3 | 1784 | 15.8 | 10.5 | 76.8 | 111.4 |
YOLOv5x6 + TTA | 1280 1536 | 55.0 55.8 | 72.7 72.7 | 3136 - | 26.2 - | 19.4 - | 140.7 - | 209.8 - |
这些模型的结构是一样的,区别在于网络的深度和宽度,网络的深度指的就是C3模块中Bottleneck的数量,网络的宽度是指网络每层输出的通道数。