ResNet 系列论文

文章目录

    • 0. 前言
    • 1. ResNet V1
    • 2. ResNet V2
    • 3. Wide ResNet
    • 4. ResNext
    • 5. Res2Net
    • 6. iResNet

0. 前言

  • 目标:总结残差网络系列论文,老忘记,就记录一下每篇论文的创新点。
  • 论文列表:
    • ResNet v1: Deep Residual Learning for Image Recognition
      • 第一次提出ResNet结构。
    • ResNet v2: Identity Mappings in Deep Residual Networks
      • 对原始ResNet结构进行一些测试,找到更合适的结构,主要就是 conv-bn-relu的顺序以及relu的位置
    • Wide ResNet: Wide Residual Networks
      • 之前的ResNet太“瘦”了,并实验证明“胖”一点的结构也能用
    • ResNext: Aggregated Residual Transformations for Deep Neural Networks
      • 将Inception的思路引入ResNet,主要就是分组卷积
    • Res2Net: A New Multi-scale Backbone Architecture
      • 设计用于处理多尺度问题,不仅是分组卷积,前面几组的结果还会作为后续组别的输入。
    • iResNet: Improved Residual Networks for Image and Video Recognition
      • 改进ResNet的基本结构,即bottleneck结构、shortcut结构。

1. ResNet V1

  • arxiv: Deep Residual Learning for Image Recognition
  • 要解决什么问题?
    • ResNet 刚被提出来的时候,主要要解决的就是“深层神经网络训练困难”的问题。
      • 从理论上看,深层网络模型效果不会低于浅层网络。例如,假设深层网络前面的结构与浅层网络完全相同,深层网络后面的结果使用Identity Mapping,则可以保证深层网络效果等价于浅层网络。
      • 但实际训练中,如果直接使用一些普通的深层网络,效果却比浅层网络差,这就意味着不是模型本身有问题,而是深层模型训练比浅层困难。
    • 所谓“训练困难”,主要就是梯度消散。
      • 没有ResNet结构的深层网络效果较差的原因不是过拟合(因为训练误差也随着深度增加而增加了)。
  • 用了什么方法解决?
    • 提出了ResNet,即残差网络结构。其基本结构如下图image_1e5bs7fb3epu1mvs1h81rr015v19.png-62.1kB
    • ResNet有效的一种解释是:由于梯度消散导致训练困难,则通过残差结构保留梯度。
    • BotteleNet 结构,即上图中右边的结构。
      • BottleNet应该可以翻译为“瓶颈”结构。
      • 所谓瓶颈,主要指的是channel的数量的变化(先大后小再增大)。以上面右图为例,输入与输出的channel都是256,但前两层的channel是64,这就会减少参数数量。
      • 该结构的目标是减少参数与运算量。
    • 如果输入与输出需要变化channel数量,那就需要对shotcut通道也进行处理。
    • 设计的网络结构如下:image_1e7vfic7p1gmts1o1fdb19m6htf9.png-125.7kB
  • 效果如何?
    • 好得一笔。
    • ResNet50应该是现在最基本的backbone,用在几乎所有CV相关的任务中。
    • 后来设计网络有很多很多都借鉴了这个结构。
  • 还存在什么问题?
    • 而且这种结构一般都比较玄学,一般靠各种完备的实验来证明信结构的优越性,但不能完整解释为什么work。
    • Wide ResNet论文中提到
      • ResNet比Inception的泛化能力差一点。
      • shortcut结构虽然能够保留梯度,但也存在一些问题:
        • 由于使用了shortcut结构,所以block的非shortcut子路其实可以不传递梯度,也就是说,换句话说,每个block能够学习到的东西很少。
        • 从上面可以看出,可能只有一些block能够学到有用的内容,其他很多block其实对最终结果没有什么作用。
        • 上面所说的这个问题在论文 Highway networks 被称为 diminishing feature resue。

2. ResNet V2

  • arxiv: Identity Mappings in Deep Residual Networks
  • 要解决什么问题?
    • 本质是在 ResNet V1 的基础上进行一些修改,主要思想还是 ResNetV1。
    • 个人感觉是在ResNetV1的基础上又做了一系列实验,寻找更合适的结构。
  • 用了什么方法解决?
    • 改进残差单元,如下图
      • 主要改进方案有两个:将激活层放到旁路,将旁路结构从conv-bn-relu改为bn-relu-conv。
      • image_1e5cehb1quv84571suo8eidqim.png-412.3kB
    • 还试验了很多其他结构,最终选择的反正就是最后一个,没花头。
      • image_1e7vjg5tnvoqce479f1e2go6km.png-165.8kB
    • 对于上面那张图,在这篇文章中有一些解释:image_1e7vlsn0b5gj1fvm31k1ap8vka13.png-89kB
  • 效果如何?
    • 做了很多实验,证明新的结构比旧的好。
  • 还存在什么问题?
    • 这篇论文感觉比较水,就是一系列实验找了个更好的模型结构。
    • 不可解释,都是实验的结果,但又不知道为什么这样修改比较好。
    • 但我看了PyTorch的ResNet实现,好像都没用这里的东西……

3. Wide ResNet

  • arxiv: Wide Residual Networks
  • 要解决什么问题?
    • 之前的ResNet可以通过增加深度来提高模型精度。但随着深度的增加,提高的精度越来越少,且训练难度越来越大。
    • 当时的ResNet相关研究主要聚焦于增加网络的“深度”,而不怎么关注“宽度”。
      • 所谓“宽度”,指的是特征图的深度;所谓“深度”,指的是叠加的卷基层/BN层等的数量。
      • 基本上用到的网络都是很“瘦长”的。
    • 与Inception系列比,ResNet系列的泛化性(generalization)较差,即特征用于迁移学习时效率更低。
      • 由于使用了shortcut结构,所以block的非shortcut子路其实可以不传递梯度,也就是说,换句话说,每个block能够学习到的东西很少。
      • 从上面可以看出,可能只有一些block能够学到有用的内容,其他很多block其实对最终结果没有什么作用。
      • 上面所说的这个问题在论文 Highway networks 被称为 diminishing feature resue。
    • 从上面这些问题就引出了本文的目标:如何使用wide deep residual networks来处理深度网络存在的训练问题。
  • 用了什么方法解决?
    • 提出了一个新的block结构:
      • 如图所示,新提出的结构的宽度增加(即前两张图片的卷基层宽度较小,后两张较大)。
      • image_1e89mj1bf1cqt1mvub3sgee19m09.png-131.7kB
    • 基于新的block结构提出了Wide ResNetimage_1e89mll8d1dnr19c51brs1gpujqom.png-118.9kB
    • 在每个block的卷基层之间使用了Dropout。.
    • 在设置窟宽度、深度的时候,一般是考虑参数数量。
  • 效果如何?
    • 仅使用16层网络,在多个数据集(CIFAR/SVHN/COCO/ImageNet)上达到最优。
  • 还存在什么问题?
    • Wide ResNet 现在好像不太常用。
    • 在卷基层中间加上Dropout好像也不常用。
    • PyTorch的Torchvision中有Wide ResNet的实现,不过也与论文中不完全相同,仅仅是修改了每个block中特征图的深度。

4. ResNext

  • arxiv: Aggregated Residual Transformations for Deep Neural Networks
  • github
  • 要解决什么问题?
    • 提到当时视觉识别问题(visual recognition)已经从特征工程(feature engineering)转换为网络设计(network engineering)。
    • 当时的研究还集中在网络结构的设计上,想要同时结合VGG和ResNet的特点。
      • VGG网络的设计提出了一种新的设计方案:
        • 叠加同样的block从而得到结果。
        • 作者认为这种设计比较好,不会导致在某个数据集上性能好,放到其他数据集上性能不好。
      • Inception系列模型提出了 split-transformation-merge 策略,注重性能。
    • 当时的网络设计,在增加计算量/参数量的基础上提高性能比较多,很少有参数量/计算量不变但性能提高的。
  • 用了什么方法解决?
    • 设计了一种新的block结构,其中心思想是引入了 cardinality 的概念,我的理解其实就是做分组卷积。
      • 普通ResNet是做三次卷积,channel变化分别是256 -> 64 -> 64 -> 256。
      • ResNext的做法是将做32组操作(即cardinality参数),每组channel变化是 256 -> 4 -> 4 -> 256,最后将32组的所有结果累加。
      • image_1ea4nac8910af10201c11hlnrh59.png-113.7kB
    • 在具体实现时,有一些可以修改的地方(从而提高性能)
      • 下图中,b/c就与a完全相同,但性能更好。
      • image_1ea4nuphlfs21pn2m812j151b13.png-97kB
    • 提出的ResNext网络结构如下图:
      • image_1ea4nnkfm1b8vba31t3al3dm0jm.png-149.3kB
  • 效果如何?
    • image_1ea4qlr8m1tgjq681ud21sms3d31g.png-59.8kB
    • image_1ea4qm3ht10lr11p89p718fg11ij1t.png-54kB
  • 还存在什么问题?
    • 感觉整体idea也没啥,就是加了个分组卷积,效果还不错。

5. Res2Net

  • arxiv: Res2Net: A New Multi-scale Backbone Architecture
  • github
  • 要解决什么问题?
    • 主要解决多尺度(multi-scales)的问题。
    • multi-scale 问题是什么?
      • 在一张图片中,可能出现不同尺寸的多个物体。
      • 一个物体周边的其他物体可能比物体本身蕴含更多信息。
      • 获取不同尺度物体的信息对于一些任务(如语义分隔、颗粒度分类)有很大作用。
    • 之前处理 multi-scale 主要通过 layer-wise representation 来表示。还有通过处理不同尺度的特征图来处理。
  • 用了什么方法解决?
    • 提出了Res2Net Module,结构如下图所示。
      • 该结构为模型超参数多了一个选项,scale dimension,下图为4,即将卷基层分为多少个组。
      • image_1ea4vdhhv289r981mdb1bffkkk2a.png-59.2kB
    • 这种方法 at a more granular level(不知道怎么翻译,更细微的层面)上处理multi-scale问题。
      • 如何理解 res2net module 能够处理 multi-scale 问题?可以从receptive field上理解,上图中分组从左到右的receptive field依次增加。
    • 与其他模型整合,如整合ResNext与SE。整体结构如下图image_1ea54snj7v231ta7dour6d1n9v3u.png-67.3kB
      • SE模块如下图image_1ea54917g16041oh813bg192o1l5p3h.png-81.2kB
      • 与ResNext整合的意思就是其中的group=1的普通卷积转换为group=c的分组卷积。
  • 效果如何?
    • 替代ResNet后普遍涨点,下面这结果还是带了运行时间的,可以有
      • image_1ea4voraiovshu81qev1kfudf92n.png-69.5kB
    • Grad-Cam效果都更好了image_1ea4vrplv1bet19a81p64m0tjuj34.png-652.3kB
    • 在关键点识别、目标检测、语义分割中都得到了较好的结果,已经作为mmdetection的backbone。
  • 还存在什么问题?
    • 这种分组卷积都有一个问题,虽然GFLOPs差不多,但实际运行速度肯定有一定下降。

6. iResNet

  • arxiv: Improved Residual Networks for Image and Video Recognition

  • github

  • 要解决什么问题?

    • ResNet是现在常用的backbone,主要就是用于抑制退化问题(随着神经网络层数增加,训练结果变差了)。
    • ResNet虽然抑制了退化问题,但也存在上升空间。
  • 用了什么方法解决?

    • iResNet,是 improved residual network 的缩写。
    • 改进ResNet Block的基本结构,如下图:
      • (a) 是ResNet v1的结构,注意relu的位置,这种结构不利于将信息保留下来。
      • (b) 是ResNet V2的结构,为了解决上面所说的relu不利于保留信息,所以改变了conv-bn-relu的顺序,且改变了relu的结构,但这样做保留信息的方式太直接了,相当于从一个极端走向另一个极端。
      • 文章总结了之前结构存在的两个问题:
        • 在stage后的数据都没有经过relu,所以随着block数量增加,总体信号变得越来越 unnormalized,这导致训练难度增加。
        • 由于会降低特征图尺寸,每次降低时都会用到 11 卷积来做 projection,四个11连接,但没有任何非线性处理,这会导致训练难度增加。
      • 为了改进上面所说的问题,提出了下图?结构。
      • image_1ea6p7q97gmr19eo1at1e9sbo09.png-119.2kB
    • 改进shortcut结构
      • shortcut就是在block的输入与输出尺寸有变化时使用。
      • 文章认为 1*1 stride 2 卷积操作会损失75%的特征图信息,而且选择的25%并没有什么依据。
      • 新结构设计的依据有三个:减少信息损失、增加了translation invariance、看作是soft/hard downsampling 的结合
      • image_1ea6tqea11743s54qc6o7u114pm.png-31kB
    • 改进 block 的结构
      • 以前用的 bottleneck 结构,是为了减少计算量。
      • 本文引入了分组卷积,在增加channel的保持FLOPs基本上不增加。
      • image_1ea6ufuumd3614bh1eb61dem7r313.png-48.6kB
      • image_1ea6umvfatk34g2qbm1o0lqjn1g.png-126.9kB
  • 效果如何?

    • 有一些与resnet v1比较的结果就不看了……怎么可能比resnet v1差。
    • 下图比较了 resnext,看起来并没有什么优势(参数虽然少了,但FLOPs多了)
      • image_1ea6uq53hnofmia8fj8a16a51t.png-95.3kB
  • 还存在什么问题?

    • FLOPs不增加不代表inference time不增加。
    • 其实我感觉这篇论文结果选择的baseline有点弱了……要比也是跟Res2Net、ResNeXt比吧……比了好像也没有太大优势。