0 前言
YOLOv5项目的作者是Glenn Jocher并不是原Darknet项目的作者Joseph Redmon,并且这个项目至今都没有发表过正式的论文。
官方源码仓库,目前更新到v6.1:https://github.com/ultralytics/yolov5
如果对YOLO系列没有了解:
YOLO系列理论合集(YOLOv1~v3)
YOLOv4网络详解
1 YOLOv5网络模型
YOLOv5整体结构:
YOLOv5l网络结构:
2 网络结构改进
YOLOv5共给出了五个版本的目标检测网络:
YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x
2.1 Backbone改进
YOLOv5所使用的特征提取网络仍为CSPDarknet
Focus网络结构
在之前的YOLO网络中并没有使用Focus网络结构
Focus模块在YOLOv5中是图片进入backbone前,每隔一个像素取一个值,可以获得4个独立的特征层,将这4个特征层进行堆叠,此时就将宽高维度上的信息转换到了通道维度,输入通道扩充了四倍,再通过进行特征的提取。
将每个2x2的相邻像素划分为一个patch,然后将每个patch中相同位置(同一颜色)像素给拼在一起就得到了4个feature map,然后在接上一个3x3大小的卷积层。
作者提到使用focus层可以减少参数计算,减少cuda的使用内存。
但是在v6.0版本后的YOLOv5没有并用Focus结构,把Backbone的第一层(原来是Focus模块)换成了一个6x6大小的卷积层,两个理论等价,但是对现有的一些GPU和优化算法,使用6x6的卷积层更加高效。
SiLU激活函数
SiLU 函数也称为 swish 函数,具有处处可导、连续光滑、非单调的特性,可以看作是平滑的ReLU激活函数。
f(x)=x⋅sigmoid(x)
SPPF结构
使用SPP结构,通过不同池化核大小的最大池化进行特征提取,提高网络的感受野。在YoloV4中,SPP是用在FPN里面的,在YoloV5中,SPP模块被用在了主干特征提取网络中。
SPPF结构是将输入串行通过多个5x5大小的MaxPool层,这里需要注意的是串行两个5x5大小的MaxPool层是和一个9x9大小的MaxPool层计算结果是一样的,串行三个5x5大小的MaxPool层是和一个13x13大小的MaxPool层计算结果是一样的。
SPPF结构与SPP结构作用一样,但SPPF结构效率更高、速度更快
2.2 Neck改进
在YOLOv5中的FPN特征金字塔结构中引入了CSP结构,在网络结构图中可以看到每个C3模块中都含有CSP结构。
在特征提取部分,YoloV5提取多特征层进行目标检测,一共提取三个特征层。
三个特征层位于主干部分CSPdarknet的不同位置,分别位于中间层,中下层,底层,当输入为(640,640,3)的时候,**三个特征层的shape分别为feat1=(80,80,256)、feat2=(40,40,512)、feat3=(20,20,1024)**。
在获得三个有效特征层后,利用这三个有效特征层进行FPN层的构建,构建方式为:
1.feat3=(20,20,1024)的特征层进行1次1X1卷积调整通道后获得P5,P5进行上采样UmSampling2d后与feat2=(40,40,512)特征层进行结合,然后使用CSPLayer进行特征提取获得P5_upsample,此时获得的特征层为(40,40,512)。
2.P5_upsample=(40,40,512)的特征层进行1次1X1卷积调整通道后获得P4,P4进行上采样UmSampling2d后与feat1=(80,80,256)特征层进行结合,然后使用CSPLayer进行特征提取P3_out,此时获得的特征层为(80,80,256)。
3.P3_out=(80,80,256)的特征层进行一次3x3卷积进行下采样,下采样后与P4堆叠,然后使用CSPLayer进行特征提取P4_out,此时获得的特征层为(40,40,512)。
4.P4_out=(40,40,512)的特征层进行一次3x3卷积进行下采样,下采样后与P5堆叠,然后使用CSPLayer进行特征提取P5_out,此时获得的特征层为(20,20,1024)。
特征金字塔可以将不同shape的特征层进行特征融合,有利于提取出更好的特征。
2.3 Head改进
Head部分,YOLOv3, v4, v5都是一样的。
还有一些损失计算、正负样本匹配的问题,后续在训练时候再看
参考文献:
YOLOv5网络详解
搭建自己的YoloV5目标检测平台
版权归原作者 STATEABC 所有, 如有侵权,请联系我们删除。