BackBone(resnet框架、ResNext(结构))

网络提出的背景

参考博客
backbone是一系列的卷积层用于提取图像的feature maps,比如可以是VGG16,VGG19,GooLeNet,ResNet50,ResNet101等,这里主要讲解的是ResNet101的结构。
像VGG、GooleNet、AlexNet等网络框架都是通过不断增加神经网络的深度来增强模型。但是随着网络深度越来越深,会出现退化问题,即准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。
网络试图让一个block的输出为f(x) + x其中的f(x)为残差当网络特别深的时候残差f(x)会趋近于0(我也没整明白为什么会趋近于0,大佬是这么说的…),从而f(x) + x就等于了x,即实现了恒等变换,不管训练多深性能起码不会变差。
补充为什么学习残差:
BackBone(resnet框架、ResNext(结构))_第1张图片 BackBone(resnet框架、ResNext(结构))_第2张图片
BackBone(resnet框架、ResNext(结构))_第3张图片
我们可以看出此时将A网络的输出误差应该与B网络相同(暂时不考虑网络中的维度大小的细节),因为ResNet结构的输出为 [公式] ,如果将网络中的参数置为0,则 [公式] ,因此得到的输出为 [公式] 也就是恒等映射。这样就解决了上面提到的网络很难去拟合恒等映射的问题。因此使用ResNet结构搭建的深度网络至少与浅层网络具有相同的拟合能力,不会出现之前的网络退化问题。
但是A网络后面36层全部是恒等映射一定网络的最优解吗?答案显然是否定的,但是ResNet的结构使得网络具有与学习恒等映射的能力,同时也具有学习其他映射的能力。因此ResNet的结构要优于传统的卷积网络(plain networks)结构

两种类型的block

在网络中只存在两种类型的block,在构建ResNet中一直是这两种block在交替或者循环的使用,所有接下来介绍一下这两种类型的block(indetity block, conv block):
BackBone(resnet框架、ResNext(结构))_第4张图片
BackBone(resnet框架、ResNext(结构))_第5张图片
图中可以看出该block中直接把开端的x接入到第三个卷积层的输出,所以该x也被称为shortcut,相当于捷径似得。注意主路上第三个卷积层使用激活层,在相加之后才进行了ReLU的激活
BackBone(resnet框架、ResNext(结构))_第6张图片
与identity block其实是差不多的,只是在shortcut上加了一个卷积层再进行相加。注意主路上的第三个卷积层和shortcut上的卷积层都没激活,而是先相加再进行激活的
通过shortcut connection 实现,通过shortcut将这个block的输入和输出进行一个element_wise的叠加,这个简单的加法并不会给网络增加额外的参数和计算量,同时却可以大大增加模型的训练速度,提高训练效果,并且当模型的层数加深时,这个简单的结构能够很好的解决退化问题。

网络的连接方式

BackBone(resnet框架、ResNext(结构))_第7张图片
如图所示,我们可以清楚的”实线“和”虚线“两种连接方式
实线的的Connection部分(”第一个粉色矩形和第三个粉色矩形“)都是执行3x3x64的卷积,他们的channel个数一致

虚线的的Connection部分(”第一个绿色矩形和第三个绿色矩形“)分别是3x3x64和3x3x128的卷积操作,他们的channel个数不同(64和128)

BackBone(resnet框架、ResNext(结构))_第8张图片
其中W是卷积操作,用来调整x的channel维度的

计算

它对每层的输入做一个reference(X), 学习形成残差函数, 而不是学习一些没有reference(X)的函数。这种残差函数更容易优化,能使网络层数大大加深。在上图的残差块中它有二层,如下表达式,其中σ代表非线性函数ReLU
BackBone(resnet框架、ResNext(结构))_第9张图片

Resnet101整体框架

BackBone(resnet框架、ResNext(结构))_第10张图片
如下是各个层的结构,对于101—layer,输入是一个77 64的卷积层;(3+4+23+3)3个卷积层,最后为一个Softmax分类层。99+1+1=101。
stage4中是由一个conv_block和22个identity_block,如果要改成ResNet50网络的话只需要调整为5个identity_block.
BackBone(resnet框架、ResNext(结构))_第11张图片
BackBone(resnet框架、ResNext(结构))_第12张图片
如上左是一个两层网络单元和三层网络单元。对于拥有相同数量的层,三层网络单元减少了参数的数量,可以拓展更深的模型。两个3
3的模型参数为:3
364642;对于右边:1125664+336363+1164256。

标题

参考博客

背景

提出 ResNeXt 的主要原因在于:传统的要提高模型的准确率,都是加深或加宽网络,但是随着超参数数量的增加(比如channels数,filter size等等),网络设计的难度和计算开销也会增加。因此本文提出的 ResNeXt 结构可以在不增加参数复杂度的前提下提高准确率,同时还减少了超参数的数量
作者在论文中首先提到VGG,VGG主要采用堆叠网络来实现,之前的 ResNet 也借用了这样的思想。然后提到 Inception 系列网络,简单讲就是 split-transform-merge 的策略,但是 Inception 系列网络有个问题:网络的超参数设定的针对性比较强,当应用在别的数据集上时需要修改许多参数,因此可扩展性一般。
作者在这篇论文中提出网络 ResNeXt,同时采用 VGG 堆叠的思想和 Inception 的 split-transform-merge 思想,但是可扩展性比较强,可以认为是在增加准确率的同时基本不改变或降低模型的复杂度。这里提到一个名词cardinality,原文的解释是the size of the set of transformations,如下图 Fig1 右边是 cardinality=32 的样子,这里注意每个被聚合的拓扑结构都是一样的(这也是和 Inception 的差别,减轻设计负担)

你可能感兴趣的:(BackBone(resnet框架、ResNext(结构)))