一.ResNet的介绍及核心思想

2015年,ResNet大大吸引了人们的眼球。实际上,早在ILSVRC2012分类竞赛中,AlexNet取得胜利,深度残差网络(Deep Residual Network)就成为过去几年中计算机视觉和深度学习领域最具突破性的工作。ResNet使得训练深达数百甚至数千层的网络成为可能,而且性能仍然优异。

由于其表征能力强,ResNet在图像分类任务之外的许多计算机视觉应用上也取得了巨大的性能提升,例如目标检测等等。

ResNet的核心思想:

根据泛逼近定理(universal approximation theorem),如果给定足够的容量,一个单层的前向网络就足够表达任何函数。但是,这个层可能是非常大的,而且网络容易过拟合,因此,研究界有一个共同的趋势,就是网络结构越来越深。

从AlexNet的提出以来,state-of-the-art的CNN经典模型都是越来越深。虽然AlexNet只有5层卷积层,但后来的VGG网络和GoogleNet分别由19层和22层。

但是,如果只是简单地将层堆叠在一起,增加网络的深度并不会起太大的作用。这是由于训练时会存在梯度消失(vanishing gradient)问题,这使得深层网络难以训练。下图展示了网络深度大的增加导致性能迅速下降:

深度学习_经典网络_ResNet

基于上述存在的问题,ResNet第一次提出了残差结构,主要用于解决上面提到的两个问题:

  1. 梯度消失的问题。
  2. 随着网络深度增加,性能没有提升反而下降的问题。

如下图所示,我们引入一个“恒等捷径连接(identity shortcut connection)”,本来要学习H(x),现在转换为F(x) + x,二者效果相同,但是优化难度下降,并且因为多了一个x,使得求导时总有1,避免了梯度消失的问题。
深度学习_经典网络_ResNet

我们结合上图进一步解释残差指的是什么:
ResNet提出了两种mapping:

  1. 第一种是identity mapping,指的是上图中的“弯弯曲曲的曲线”。
  2. 第二种是residual mapping,指的是除了“弯弯曲曲的曲线”的部分,所以最后的输出是H(x) = y = F(x) + x。

其中identity mapping是x,residual mapping是y - x,即F(x)。

进一步拓展残差结构:

深度学习_经典网络_ResNet

接下来我们详细解释一下上图的两个结构设计。左边的结构针对于ResNet34,一般称整个结构为一个“building block”。右边的结构针对ResNet50/101/152,一般称为“bottleneck design”,这个结构的设计是为了降低参数的数目,第一个1 * 1的卷积把256维channel降到64维,然后再最后通过1 * 1卷积恢复,整体上用的参数数目:1 * 1 * 256 * 64 + 3 * 3 * 64 * 256 + 1 * 1 * 64 * 256 = 69632,而不使用bottleneck的话就是两个3 * 3 * 256的卷积,参数数目: 3 * 3 * 256 * 256 * 2 = 1179648,差了16.94倍。

对于常规的ResNet,可以用于34层或者更少的网络中,对于Bottleneck Design的ResNet通常用于更深的如101这样的网络中,目的是减少计算和参数量

二.网络结构

我们先看一看VGG网络、Plain网络和残差网络的结构比较:

深度学习_经典网络_ResNet

由上图可知,有一些shortcut connect是实线的,有一些是虚线的,为什么要这样呢?

因为可能会有F(x)和x的channel个数不同的情况,所以要分两种情况讨论。

实线的情况是两者的channel数目相同,采用的计算方式是H(x) = y = F(x) + x。

虚线的情况是两者的channel数目不同,比如(64和128),所以采用的计算方式是H(x) = y = F(x) + Wx。其中W是卷积操作,用来调整channel的维度。

论文中的网络结构:

比较经典的是ResNet50,ResNet101和ResNet152。下图给出详细的结构:

深度学习_经典网络_ResNet

我们举上图ResNet101为例子计算其层数:
首先有一个输入7 * 7 * 152的卷积,然后经过(3 + 4 + 23 + 3)=33个Bottleneck Design,每一个Bottleneck有三层卷积,所以有33 * 3 = 99层,99 + 最后的全连接层 + 一开始的输入卷积 = 101。

注意: 101层网络仅仅指卷积或者全连接层,而**层或者pooling层并没有计算在内。

我们还可以发现ResNet50和ResNet101唯一的区别是conv4_x,差了6个Bottleneck,正好是51层。

三.相关公式理顺与梯度计算

首先根据上一节的介绍,残差单元可以表示为:

深度学习_经典网络_ResNet

其中Xl和Xl+1分别表示的是第l个残差单元的输入和输出。F是残差函数,表示学习到的残差,而h(Xl) = Xl表示恒等映射,f是ReLU**函数。基于上式,我们求得从浅层l到深层L的学习特征为:

深度学习_经典网络_ResNet

利用链式规则,可以求得反向过程的梯度:

深度学习_经典网络_ResNet

式子的第一个因式:loss/xL表示的是损失函数到达L的梯度,小括号中的1表明可以避免梯度消失问题,而另一项残差梯度需要经过带有W的层,梯度不是直接传递过来的。

四.试验结果:

深度学习_经典网络_ResNet

如果网络已经到达最优化,继续加深网络,residual mapping将被push为0,只剩下identity mapping,这样理论上网络一直处于最优状态,网络的性能也就不会随着深度增加而降低了。

五.基于ResNet101的Faster R-CNN

论文中把ResNet101当作Faster R-CNN的baseline,取得了很好的效果,如下图所示:

深度学习_经典网络_ResNet

那么其复合的网络结构是什么样子的呢?

深度学习_经典网络_ResNet

上图展示了具体的架构,可以知道conv4_x的最后的输出为RPN和RoI Pooling共享的部分,而conv5_x(共9层网络)都作用于RoI Pooling之后的特征图(14 * 14 * 1024),特征图的大小维度也刚好符合原本的ResNet101中conv5_x的输入。最后大家一定要记得接一个average Pooling,得到1 * 1 * 2048维特征,分别用于分类和框回归。

六.论文地址:

ResNet论文地址

相关文章:

  • 2021-12-13
  • 2021-11-16
  • 2021-05-26
  • 2021-11-03
  • 2021-12-23
  • 2021-07-07
  • 2021-05-18
  • 2021-11-17
猜你喜欢
  • 2021-10-14
  • 2021-06-28
  • 2021-05-16
  • 2021-12-04
  • 2021-12-13
  • 2021-11-17
  • 2021-03-29
相关资源
相似解决方案