深度学习模型之CNN(十一)ResNeXt网络结构
本堂课讲述根据ResNet网络之后再次升级的ResNeXt网络,对原先ResNet的一些地方做了优化处理,原论文:img Transformations for Deep Neural Networks
ResNet和ResNeXt的比较
上图(左)是在ResNet网络中提到的实线型残差结构,在主分支中先对channel为256的特征矩阵降维到64,之后用3x3的卷积层进行卷积处理,再通过1x1的卷积核升维到256,以此来减少参数,最后将得到的特征矩阵与shortcut的特征矩阵相加得到输出特征矩阵
在ResNeXt网络中,使用上图(右)的结构替代上图(左)的结构,经下图展示,替换之后的ResNeXt网络结构确实比原先的ResNet在各性能上更优秀
下图(左)是ResNet-50与ResNeXt-50在ImageNet上top-1的错误率比较,在对焦验证集中ResNet-50val(蓝色)和ResNeXt-50val(橙色)两条实线的错误率比较,明显的是在计算量相同的情况下,RexNeXt-50比ResNet-50的错误率更低。
下图(右)是ResNet-101与ResNeXt-101在ImageNet上top-1的错误率比较,与50层类似,在计算量相同的情况下,RexNeXt-101比ResNet-101的错误率更低。
Group Convolution对比Convolution
Convolution
假设输入特征矩阵size = k x k,channel = 4,那么此时对于每一个卷积核的channel要与输入特征矩阵的channel保持一致,所以卷积核的channel = 4。假设输出特征矩阵channel = n,表示需要输入n个卷积核来进行卷积处理。
综上,需要使用到的参数Parameters = k x k x $C_{in}$ x n($C_{in}$表示输入特征矩阵的channel,n表示使用卷积核的个数)
Group Convolution
假设输入特征矩阵size = k x k,channel = 4,将输入特征矩阵的channel划分为两个组,之后对每一个组分别进行卷积操作。假设对划分的一个组而言,所采用的卷积核的channel要与该组的channel保持一致,因此卷积核channel = 4 / 2 = 2。假设输出特征矩阵channel = n,则经过分成两组之后,其中一组的channel = n / 2,表示需要输入n / 2个卷积核来进行卷积处理。
综上,需要使用到的参数Parameters = ( k x k x $C_{in}$/g x n/g ) / g = k x k x $C_{in}$ x n x 1/g($C_{in}$表示输入特征矩阵的channel,n表示使用卷积核的个数,g表示分了多少个组)
注意:当g = $C_{in}$,n = $C_{in}$,此时就是DW Conv(深度卷积depthwise conv),相当于对输入特征矩阵的每个channel分配了一个channel为1的卷积核进行卷积
ResNeXt的创新点
提出Block模块
在原论文中,作者提出以下a、b、c三种block模块,它们在数学计算上完全等价
(c)block模块
首先通过1 x 1的卷积层进行降维处理,在经过Group Conv进行处理,且卷积核size = 3 x 3,group = 32,之后再通过1 x 1的卷积核进行升维处理,最后将输出与shortcut的输出相加,得到最终输出特征矩阵
(b)block模块
通过32个分支进行处理(total 32 paths),对于每个分支都首先采用1 x 1的卷积核进行降维处理,每一个分支都将特征矩阵从channel = 256降维到channel = 4,因分支 = 32,所以实际上通过这一层的降维处理之后,总体channel = 4 x 32 = 128,同(c)的第一步处理一致;
之后对每个分支的特征矩阵进行3 x 3的卷积核进行卷积处理,处理之后再通过concatenate拼接,再通过1 x 1的卷积核进行升维处理,最后将输出与shortcut的输出相加,得到最终输出特征矩阵
(a)block模块
通过32个分支进行处理(total 32 paths),对于每个分支都首先采用1 x 1的卷积核进行降维处理,每一个分支都将特征矩阵从channel = 256降维到channel = 4;之后对每个分支的特征矩阵进行3 x 3的卷积核进行卷积处理;
然后通过1 x 1的卷积核将特征矩阵升维从channel = 4到channel = 256,之后进行相加,原理上同(b)的concatenate拼接之后得到的特征矩阵一致;
最后将输出与shortcut的输出相加,得到最终输出特征矩阵
(a)block模块的升维和相加步骤
假设pants = 2,pants中采用数量为1的1 x 1的卷积核进行卷积。对这两个pants分别进行卷积之后会得到对应的feature map,再将二者的feature map进行相加,最终得到结果的feature map。
(b)block模块的concatenate步骤
将按照pants = 2的feature map进行拼接,得到上图最左边的feature map,此处采用的kernel同样是1 x 1大小,且将对应的4个卷积核参数进行拼接,最终得到的feature map和前面(a)升维且相加之后的feature map的结果一致。
Block模块仅适用层结构≥3
对于浅层的18、34层,其Inception的层级仅只有两层,搭建出来的block已经没有意义了。如果进行拆分之后再进行卷积,再进行相加的话,其实并未产生实质的变化,只不过卷积的个数变多了。
总结
本次论文最大创新点就是提出Block模块,再次提高了整体网络的性能。