Yolov5系列是Yolo家族新一代的模型,相比于之前的版本Yolov3和Yolov4,相同的是,它依然采用锚框(anchor)对目标的尺寸进行回归的思想,保持大中小多种尺度特征输出,所不同的是,Yolov5系列在损失函数设计、网络结构方面,以及特征输出后处理方面有所改变。得益于Yolov5在网络结构和数据增强方面的革新,使得其在推理速度和推理精度比起前作都有所提升。
目前官方已经把Yolov5更新到第六个版本,该版本下有6种预定义的模型可以使用,这些模型依据计算和参数量级分为微量级、小量级、中量级、大量级、超大量级,其定义的文件分别是,yolov5n、yolov5s、yolov5m、yolov5l、yolov5x。通常而言,针对较为简单的目标检测任务,轻量级的模型完全可以胜任,而对于移动端和边缘检测,使用yolov5n和yolov5s将会是不错的选择。下面就对Yolov5模型整体的网络结构进行简单的描述。
如图1所示,Yolov5是一种端到端的单阶段检测模型,它大概可以分为五大部分,其每一个部分的作用如下:
(1)输入部分(Input)
输入部分其实就是图片前处理阶段,包括了图片的读取和解压、数据增强(缩放、平移、翻转、投影、混合、错切、加马赛克等)。如果选择自动生成锚框操作,这一部分还会根据便签自适应生成合适的锚框。
(2)骨干网络部分(Backbone)
骨干网络部分是网络的提取特征的主要部分,它可以提取出高、中、低三种层次的特征。在迁移学习中,这一部分的权重会被迁移到新的模型当中当做初始化权重,且在新模型的训练过程中,该部分权重通常会被冻结而不会被梯度下降所更新。
(3)瓶颈网络部分(Neck)
瓶颈网络部分,顾名思义,由一系列瓶颈结构的模块组成,该部分的网络特点是,特征的尺寸变化,像瓶颈一样,先减小一半,然后再恢复到原来的尺寸,这一样既可以减少计算量,又可以增加特征的提取能力。该部分的作用是将个层次的特征进行融合,以提取出大、中、小的特征图。
(4)检测头部分(Head)
检测头部分对目标的位置进行回归,生成目标的中心坐标,依据锚框生成目标的宽度和高度,以及最终目标和分类的置信度。
(5)损失函数部分(Loss)
损失函数部分只有在训练期间其运作,它的作用是根据预测结果和真值的偏差,计算出当前模型的损失函数,为反向传播误差,利用梯度下降法更新权重数据。