理解yolov6网络结构

yolov6论文地址:https://arxiv.org/abs/2209.02976

 先上一张yolov6的网络架构理解yolov6网络结构_第1张图片

图片来源于网络 

BACKBONE

yolov6使用了repVGG作为backbone

        如果不了解repVGG的可以看原文

论文地址https://arxiv.org/pdf/2101.03697.pdf

        这里简单过一下,repVGG其核心思想是:通过结构重参数化思想,让训练网络的多路结构转换为推理网络的单路结构,结构中均为3x3的卷积核,同时,计算库(如CuDNN,Intel MKL)和硬件针对3x3卷积有深度的优化,最终可以使网络有着高效的推理速率。

        其中

1、多路结构在模型训练时具有性能高的优势

2、推理时转化为单路结构具有速度快省内存的好处

        由于多路结构在不同的分支应用不同大小的卷积核,能够获得不同的感受野,从而能够获得更高的性能,但是在计算过程中需要保存中间结果,显存占用量会增大,只有多路融合时,显存才会降低,显存占用增加推理速度就会受到一定的影响。为了提高网络的性能,产生了一些性能优异的网络组件,如深度可分离卷积,分组卷积等,对于可分离卷积,虽然能降低FLOPs,但是内存访问成本增大,这也导致推理速度变慢。

        为了权衡性能和效率,repVGG使用重参数化思想,在训练时使用多分支结构提升网络性能,在推理时,将网络变为单路结构。

        在论文中作者有给出3x3卷积和其他尺寸卷积的效率对比

理解yolov6网络结构_第2张图片

        3x3卷积的计算密度(理论运算量(Theoretical FLOPs ÷ Time usage)除以所用时间)可达1x1和5x5卷积的4倍;

        另外 VGG是一个直筒型单路结构,单路结构会占有更少的内存,因为不需要保存其中间结果,同时,单路架构非常快,因为并行度高;

        最后多分支结构会引入网络结构的约束,比如Resnet的残差结构要求输入和卷积出来的张量维度要一致,这种约束导致网络不易延伸拓展,也一定程度限制了通道剪枝,同时仅有3x3的卷积方便加速芯片的设计从而提高效率。

        repVGG的结构如下:

理解yolov6网络结构_第3张图片

        可以看出,在原始VGG基础上,引入残差分支和1x1卷积分支,为了后续重参数化成单路结构,这里调整了分支放置的位置,没有进行跨层连接,repVGG论文中的试验也证明了残差分支和conv_1x1均能对网络性能起到提升作用。

其中有两个比较重要的操作

        1、卷积层和BN层的合并:

BN层的计算公式:

理解yolov6网络结构_第4张图片

合并后:

理解yolov6网络结构_第5张图片

理解yolov6网络结构_第6张图片

         2、卷积层的合并:

        能看到这的相信对卷积这个概念比较熟了,repVGG中的3x3的卷积就不多说了,其中1x1的卷积可以类比于3x3的卷积,在卷积核周围使用全0进行padding,在对输入中的相应位置计算卷积结果。indentity可以看成是特殊的1x1卷积,相当于对应通道上的卷积核参数为1,其余卷积核的参数为0,再对其进行padding,得到3x3的卷积。        

理解yolov6网络结构_第7张图片

        通过以上的合并,可以大大提升网络的推理速度 

NECK

        在 Neck 设计方面,为了让其在硬件上推理更加高效,以达到更好的精度与速度的平衡,美团提出了Rep-PAN ,Rep-PAN基于 PAN拓扑方式,用 RepBlock 替换了 YOLOv5 中使用的 CSP-Block,同时对整体 Neck 中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力

理解yolov6网络结构_第8张图片

 注意:这里的C5对应最顶端流程图SPPF

        为了方便直接用了美团给的neck结构图,C5输出20*20*512大小的特征图,通过1*1卷积后变成20*20*128的大小,上采样成40*40*128后与C4 concat成40*40*384的大小,C4经过repblock和1*1卷积得到40*40*128的特征图,上采样后concat成80*80*192的特征图。最后经过右边的repblock和3*3卷积输出P3,P4,P5(大小分别为80*80*64,40*40*128,20*20*256)。

HEAD

理解yolov6网络结构_第9张图片

        head分别对应了p3,p4,p5三层输出进行预测 ,借鉴了YOLOX的解耦头设计,并进行了改进,每个分支上先对特征图进行卷积,做特征图的特征融合,之后分成两个分支,一个通过两个卷积完成分类任务,另一个卷积后再分成两个分支,一个卷积完成前背景的分类,另一个卷积完成边界框的回归,最后再通过concat在channel层上融合,输出预测结果,该结果需要进行后处理得到最终结果。

你可能感兴趣的:(深度学习笔记)