总体来说,YoLoV7主要可分为主干特征提取网络(backbone),加强特征提取网络以及SPPCSPC三个部分,然后再加上RepConv和YoLoHead部分。
输入图片640*640*3的RGB图片,然后卷积、标准化(BN)、激活函数,进行特征提取,不断进行高和宽的压缩(从640到320到160到80到40到20),然后进行通道的扩张(从32到64到128到256到512到1024)。
YoLoV7里边两个比较突出的特点:Multi_Concat_Block和Transition_Block。
Multi_Concat_Block(多分支堆叠模块):
输入的特征层会分别进行两次卷积、标准化、激活函数,第一个直接连接到模块的输出,另一个的左边直接连接到输出,右边的在有两层卷积、标准化、激活函数,以此类推。最后将这4个进行堆叠,再经过一个卷积、标准化、激活函数,就将特征层输出了。
Transition_Block(过渡模块):
左边用最大池化层进行下采样,右边是卷积、标准化、激活函数进行下采样,直白点说就是高和宽的压缩。左分支是一个步长为2*2的最大池化和一个1*1的卷积,右边那个分支是卷积核大小为3*3的,步长为2*2的卷积,两个分支的结果在输出时会进行堆叠。
主干特征提取网络(backbone)就是不断的进行特征提取,获取到一个比较有用的特征,最后会输出三个比较有效的特征层。三个有效特征层的shape分别是80*80*512,40*40*1024,20*20*1024,引出来之后就到了加强特征提取网络里边。
我们首先会对最后输出的20*20*1024的特征层使用SPPCSPC进行特征提取,主要是进行感受野的扩大。
然后在加强特征提取网络上,从下往上,先进行上采样,然年和40*40的特征层进行一个堆叠,使用多分支堆叠模块进行特征提取。之后会在进行一个上采样,然后和80*80的特征层进行一个堆叠,又会使用多分支堆叠模块进行特征提取,这样就获得了一个特征,然后通过过渡模块进行下采样,又变成了40*40,这样就又可以和左边那个40*40的特征层进行一个堆叠,使用多分支堆叠模块进行特征提取,接下来通过过渡模块进行下采样,完成下采样之后就变成了20*20,会和左边的20*20的有效特征层进行一个堆叠,堆叠完了之后,使用多分支堆叠模块进行特征提取。
通过加强特征提取网络之后,依然是3个有效特征层,这三个特征层从上往下依然是80*80,40*40,20*20。然后通过RepConv(特殊的残差结构)和YoloHead(普通的1*1卷积)获得我们最终的预测结果。
RepConv:使用残差结构辅助优化,而在预测的时候会把这些残差结构利用一个卷积来进行一个替代。
YoloHead:就是一个普通的1*1的卷积,把它固定到一个特定的通道数,然后这个通道数对应了三个先验框,最终的预测结果会对先验框进行调整获得预测框并且判断先验框内部是否包含物体以及物体的种类。