# Modules of YOLOv5
# 1.Bottleneck
来自于何凯明2014年工作Resnet (opens new window)
# 2.BottlenetCSP
与CSP论文 (opens new window)描述的方式不一直,但CSP论文源码 (opens new window)亦是通过此方式实现,参考YoloV5 Issues 781 (opens new window)。
# 3. C3:Bottleneck with 3 Convolutional Blocks
将Bottleneck
换成 SPP
将变成 C3SPP
,换成Transformer
将变成C3TR
,换成GhostBottleneck
就是C3Ghost
,C3
结构是Yolov5
中提出的。
# 4. Focus
Focus
层作为Yolov5
中提出的,在最前面对输入做处理的层,是为了取代YoloV3
中的前三层卷积,可以在保证图像信息无丢失的同时减小图像的尺寸,从而减小FLOPS
,加速推理。
YoloV5
作者对Focus Layer
的一些解释,可参考Discussion (opens new window)、Issue 804 (opens new window)
# 5.SPP
YoloV5
中实现的SPP
与SPP
论文给出来的,有些许差异,YoloV5
中的SPP
是固定了MaxPool
的kernel
大小分别为5\9\13
,其stride=1
,且对输入进行padding
,故MaxPool
并不改变输入图像的尺寸大小。
标准的SPP
是指定MaxPool
后输出的stride
是根据输入
# 6.DWConv, Depth Wise Convolution
分组卷积,将输入特征按通道数分组,然后分别进行卷积,最后将结果沿通道方向Concat
,Pytorch Conv2d
接口中groups
参数来控制,普通卷积相当于groups
为1
。
图片来源于:https://www.huaweicloud.com/zhishi/arc-13746260.html
YoloV5
中goups=math.gcd(C1, C2)
,即输入输出通道的最大公约数。
# 7.GhostConv
华为诺亚实验室2020CVPR
提出的GhostConv
论文 (opens new window),代码 (opens new window), 主要思想是卷积得到的不同通道上的特征比较相似,可以降低卷积输出的通道数,通过对卷积得到的通道上的特征做线性变换来扩充特征通道,减少FLOPS
的同时,能得到相同的结果。
# 8.GhostBottleneck
GhostBottleneck
, YoloV5
中提出的结构,根据卷积的步长stride
是否等于2
来决定模块的结构。
# 9.MixConv
Google Brain
2019年提出来的一种方法,对同一个输入,按通道进行划分,不同通道部分的输入使用不同size
的卷积核,将得到的输出沿通道方向合并,并使用shortcut
连接。该方法将多个不同尺度的卷积核结合起来可以达到更高的准确性和效率,论文 (opens new window)
# 10.CrossConv
将3x3
的卷积拆分成1x3
和3x1
的卷积,同时使用shortcut
链接,YoloV5中定义,与使用
3x3`的卷积相比,可减少卷积参数。
# 11.FPN+PAN
YoloV5
中使用了Feature Pyramid Network
(FPN (opens new window))与Path Aggregation Network
(PAN (opens new window))网络结构,用于检测不同尺度的目标和特征融合。FPN是FAIR
的何凯明团队2016年提交preprint version
并发表在CVPR2017
上的论文,融入了特征金字塔,提高了目标检测的准确率,尤其体现在小物体的检测上。P2\P3\P4
等对应的是C2\C3\C4
是特征图大小发生变化的卷积层对应的输出,具体可参考论文Section 3
。PAN是香港中文大学发表在CVPR2018
上的论文,基于高层的特征具有更多的语义信息,低层特征具有更多的细节信息来做特征融合,取得了更好的语义分割效果。与FPN
的Bottom-Up
的做法不同,其在FPN
的基础上又增加了从顶向下的路径。
Goole Brain
2019年提交的论文EfficientDet
(opens new window)中提出了BiFPN
结构,最终发表在了CVPR2020
上,后续可将其应用到YoloV5
上实验看一下效果。