Yolo系列是一类很经典的目标检测网络,属于anchor-base型网络,即需要先产生先验框然后筛选先验框得到预测框。同时它也是One-Stage网络,即不需要额外的网络结构来筛选先验框。这两种特点使得它具备了运算速度快和计算精度相对较高的特点。
比较常见的Yolo网络有:YoloV3,YoloV5,YoloV7等。本文主要从YoloV7网络入手进行讨。论。
YoloV7的网络结构如图所示,主要可以分为3个部分:Backbone,FPN和Yolo Head。其中,Backbone负责对输入图片进行特征提取,这个结构最终会输出三个不同尺寸的特征层。FPN网络负责加强特征提取,它会将Backbone提取出的三个特征层进行部分特征融合(以融合不同尺寸的特征信息,主要依靠上采样和下采样进行实现)。Yolo Head负责对anchor进行分类和回归,输出最终的预测框。
从上面的网络结构图可以看到,不同于Faster R-CNN等网络直接套现成的骨干网络,YoloV7的骨干网络主要由Multi_Concat_Block(多分支堆叠模块)和Transition_Block组成。
Multi_Concat_Block结构如图,可以看到主要是由卷积标准激活函数构成。共计4个通路,分别经过了1,1,3,5个卷积标准激活函数。最后这4个通路的特征层堆叠后由一个卷积标准激活函数进行特征整合。
Transition_Block是本网络的一个创新点,是一个过渡模块。通常的卷积网络中,过渡模块使用的是3x3卷积核的卷积+步长2x2的最大池化。而该模块具有两个分支:左侧分支为步长为2x2的最大池化+1x1卷积,右边分支为1x1卷积+卷积核3x3、步长2x2的卷积,两个分支在输出的时候进行堆叠。
YoloV7的Backbone一共提取三个特征层,当输入为640x640x3时,三个特征层的尺寸分别为80x80x512,40x40x1024,20x20x1024。这三个特征会经过FPN进行加强特征提取,具体步骤如下:
①最下层的特征(即尺寸为20x20x1024的)会经过SPPCSPC进行特征提取得到P5,该结构可以提升YoloV7的感受野。
②P5经过1x1卷积调整通道+一次上采样后与一次卷积后的第二层特征(40x40x1024)进行结合(Concat),然后利用一个Multi_Concat_Block进行特征提取,得到P4。
③P4同样经过一次1x1卷积调整通道+一次上采样后与一次卷积后的第一层特征(80x80x1024)进行特征融合,然后利用一个Multi_Concat_Block进行特征提取,得到P3。
④P3经过一次Transition_Block下采样后与P4堆叠,然后使用Multi_Concat_Block提取到P4_Out,尺寸为(40x40x256)
⑤P4_Out经过一次Transition_Block下采样后与P5堆叠,然后使用Multi_Concat_Block提取到P5_Out,尺寸为(20x20x512)
YoloV7是Yolo Head前使用了一个RepConv结构,即在训练时引入一个特经过特殊设计的残差结构,但实际预测时,该结构等效于一个3x3卷积,故不会导致预测性能的下降。
经过RepConv后,即可开始对结果进行解码。经过FPN我们可以得到三个输出,分别为(N,20,20,255),(N,40,40,255),(N,80,80,255)。其中N为通道数。每个输出的通道数255均可分解为3个85,对应这3个先验框的85个参数。
先验框的85个参数可以拆分为4+1+80,其中4代表每个特征点的回归参数,用以获得调整后的预测框,1用以判断特征点是否含有物体,80用以判断每个特征点所包含的物体种类。
大致的计算步骤可以分为以下几步:
①进行中心点预测,利用回归预测(前两位)的结果对中心点偏移进行计算
②进行预测框宽高预测,利用回归预测(后两位)的结果计算预测框的宽高
③将预测框绘制在图片上
同时还需要进行非极大抑制操作,防治同一类出现多个预测框
YoloV7的Loss包含三个部分:回归部分(Reg)、物体部分(Obj)、物体类别部分(Cls)