Deep Residual Learning for Image Recognition 论文学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31390999/article/details/83077684

Deep Residual Learning for Image Recognition 这篇paper讲的是残差网络,用于简化非常深的网络,该框架层能根据输入来学习残差函数而非原始函数。深度网络存在的梯度消失爆炸问题通过BN得到了有效解决,出现的另一个问题是网络的退化问题,这是指当网络深度加深时,准确率提高,随之下降。并且这种下降并不是因为过拟合,因为我们假设深层网络是从浅层网络直接复制来的,理论上深层网络不应该比浅层网络有更高的错误率,但是实际上并不是这样。显然大家 可能会认为既然深度网络不好那我们使用浅层网络就好了,但是实际上是一定程度下,越深的网络学习效果越好(因此上文提到的退化问题的原因在研究中)。但是通过这种假设我们可以通过学习Residual 映射(残差映射),而非等值映射,如果残差映射的响应越小,越接近0,表示这个映射更接近等值映射。我们就是通过这样的思路学习的。

上图描述的就是我们的思路,x代表等值映射,F(x)表示残差,原始的映射是H(x)

论文到这里还没有完,论文引入“shortcut”的思想,依旧如上图所示,并不是所有的层都要经过上面的处理,而是选择隔两层或更多的层进行操作,这样我们既保留了深度网络,充分利用了信息,又不会造成退化问题,可以说是一举多得。

公式 F(x)+x 可以通过前馈神经网络的“shortcut连接”来实现(Fig.2)。Shortcut连接就是跳过一个或者多个层。在我们的例子中,shortcut 连接只是简单的执行恒等映射,再将它们的输出和堆叠层的输出叠加在一起(Fig.2)。恒等的shortcut连接并不增加额外的参数和计算复杂度。完整的网络仍然能通过端到端的SGD反向传播进行训练,并且能够简单的通过公共库(例如,Caffe)来实现而无需修改求解器(solvers)。

通过这种idea,我们使用y代替h(x),那么y = F(x) + x ,其中x是等值映射,如果x和F(x)的维度相同,那么表示为:

如果x和F(x)的维度不同,那么将其变成相同的维度。

在实验过程中,我们首先设置一个基准:

plain网络:设置一些规则:卷积层3*3的滤波器,1.输出特征尺寸相同的层含有相同数量的滤波器(2)如果特征尺寸减半,滤波器的数量增加一倍来保证每层的时间复杂度相同。通过stride维2的卷积层来进行采样,网络的最后是一个全局的平均pooling和一个1000类的softmax全连接层,加权层的层数维34.

Residual Network:在plain网络的基础上插入shortcut连接,将网络变成对应的残差网络,如果输入和输出的维度相同不需要考虑维度问题,如果维度不同,1.shortcut仍使用等值映射,在增加的维度上使用0来填充,这样做不会增加额外的参数2.使用等式(2)中的映射使得维度保持一致,类似于1*1卷积。当shortcut跨越两种尺寸的特征图时,均使用stride维2的卷积。

图有点太小了,放大看吧

 在进行实验的时候需要调整图像大小,使它的短边长度随机从【256,480】中采样来增大图像的尺寸,从一张图像或者它的水平翻转图像中随机采样一个224*224的crop。每个像素减去均值,图像使用标准的颜色增强。在每一个卷积层之后,激活层使用BN归一化。其它的设置都是常规的。

解释一下为什么那个长图是34层,上图中34-layer 那一列参数分别是3,4,6,3,就是这种模块分别重复的次数,再加上输出层输入层,所以最后就是34层,层数少的情况下stride一般为2,如果层数很多超过50层,stride可能维3或者更大,这篇论文使用2.

另一点是101层或者50层的第一个卷积层数设置,卡伊看到是1*1,64,这是在输入后减少计算量,最后又将其还原成原来的维度1*1,256,这样极大的减少了运算量。这篇论文其它地方还用到了数据增强的处理,不再一一赘述。

猜你喜欢

转载自blog.csdn.net/qq_31390999/article/details/83077684