文章目录
- 一、什么是ResNet网络结构
- 50、101、152层的网络
- 二、ResNeXt网络
- ResNeXt网络的Capacity
- 总结
一、什么是ResNet网络结构
ResNet是一种残差网络,咱们可以把它理解为一个子网络,这个子网络经过堆叠可以构成一个很深的网络。
左边是输入的256的通道数,先在主干上进行3x3x256的卷积,之后再进行激活函数relu,然后再进行3x3x256的卷积,最后和旁边捷径进行相加,必须保证两者的shape相同,再进行relu激活函数。
右边图通过1x1x64进行降维,再进行激活函数,然后进行3x3x64的卷积核,进行激活函数,再进行1x1x256的卷积核进行升维操作,在进行相加操作,激活函数
50、101、152层的网络
网络中的亮点
- 超深的网络结构(突破1000层)
- 提出残差(residual)模块
- 使用Batch Normalization加速训练(丢弃dropout)
ResNet网络的每个参数的对比
下图为旁支为实线和虚线的区别
对于左边的残差结构,输入和输出的shape是相同的,可以直接相加
对于右边的残差结构中,在旁支虚线上进行了步长stride为2的操作,让长和宽缩小了2倍,再进行1x1x128的卷积操作,变成28x28x128。如果相加必须保证shape相同。在主干上,先进行了stride步长为2,把原来的图像进行缩小2倍,变成28x28,再进行stride为1的操作,图像长宽不变
二、ResNeXt网络
ResNeXt网络是改进的ResNet网络,最重要的是改进block单元。
结合强大的残差网络,我们得到的便是完整的ResNeXt,也就是在简化Inception中添加一条short-cut,表示为:
到这里我们发现ResNeXt和Inception v4是非常像的。不同之处有两点:
- ResNeXt的分支的拓扑结构是相同的,Inception V4需要人工设计;
- ResNeXt是先进行1x1卷积然后执行单位加,Inception V4是先拼接再执行 1x1 卷积,如图4所示。
下面图中显示了三种ResNeXt网络模块的变形。它们在数学计算上是完全等价的,而第三种包含有Group convolution操作的正是最终ResNeXt网络所采用的操作。
ResNeXt网络的Capacity
一般增强一个CNN的表达能力有三种手段:
一是增加网络层次即加深网络(目前CNN已经由最初Alexnet的不到十层增加到了成百上千层,而实际实验结果表明由层次提升而带来的边际准确率增加已是越来越少);
二是增加网络模块宽度(可见我们之前有介绍过的Wide residual network,可宽度的增加必然会带来指数级的参数规模提升,因此它并非为主流CNN设计所认可。);
三是改善CNN网络结构设计(当然在不增加模型复杂度的情况下通过改良模型设计以来提升模型性能是最理想的做法,不过其门槛则实在是太高,不然Google/Facebook/Microsoft的那些埋头设计网络/调参的哥们儿就没办法拿那么高工资了。)。
ResNeXt的做法可归为上面三种方法的第三种。它引入了新的用于构建CNN网络的模块,而此模块又非像过去看到的Inception module那么复杂,它更是提出了一个cardinatity的概念,用于作为模型复杂度的另外一个度量。Cardinatity指的是一个block中所具有的相同分支的数目。
下图为反映Cardinatity增加对模型性能提升的实验结果。
首先在标准的ImageNet-1K上进行了实验,并与其它state-of-art的模型进行了对比。
总结
ResNeXt提出了一种介于普通卷积核深度可分离卷积的这种策略:分组卷积,他通过控制分组的数量(基数)来达到两种策略的平衡。分组卷积的思想是源自Inception,不同于Inception的需要人工设计每个分支,ResNeXt的每个分支的拓扑结构是相同的。最后再结合残差网络,得到的便是最终的ResNeXt。
从上面的分析中我们可以看出ResNeXt的结构非常简单,但是其在ImageNet上取得了由于相同框架的残差网络,也算是Inception直接助攻了一把吧。
ResNeXt确实比Inception V4的超参数更少,但是他直接废除了Inception的囊括不同感受野的特性仿佛不是很合理,在更多的环境中我们发现Inception V4的效果是优于ResNeXt的。类似结构的ResNeXt的运行速度应该是优于Inception V4的,因为ResNeXt的相同拓扑结构的分支的设计是更符合GPU的硬件设计原则。