文章目录
- 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结构。
- ResNet v1: Deep Residual Learning for Image Recognition
1. ResNet V1
- arxiv: Deep Residual Learning for Image Recognition
- 要解决什么问题?
- ResNet 刚被提出来的时候,主要要解决的就是“深层神经网络训练困难”的问题。
- 从理论上看,深层网络模型效果不会低于浅层网络。例如,假设深层网络前面的结构与浅层网络完全相同,深层网络后面的结果使用Identity Mapping,则可以保证深层网络效果等价于浅层网络。
- 但实际训练中,如果直接使用一些普通的深层网络,效果却比浅层网络差,这就意味着不是模型本身有问题,而是深层模型训练比浅层困难。
- 所谓“训练困难”,主要就是梯度消散。
- 没有ResNet结构的深层网络效果较差的原因不是过拟合(因为训练误差也随着深度增加而增加了)。
- ResNet 刚被提出来的时候,主要要解决的就是“深层神经网络训练困难”的问题。
- 用了什么方法解决?
- 提出了ResNet,即残差网络结构。其基本结构如下图
- ResNet有效的一种解释是:由于梯度消散导致训练困难,则通过残差结构保留梯度。
- BotteleNet 结构,即上图中右边的结构。
- BottleNet应该可以翻译为“瓶颈”结构。
- 所谓瓶颈,主要指的是channel的数量的变化(先大后小再增大)。以上面右图为例,输入与输出的channel都是256,但前两层的channel是64,这就会减少参数数量。
- 该结构的目标是减少参数与运算量。
- 如果输入与输出需要变化channel数量,那就需要对shotcut通道也进行处理。
- 设计的网络结构如下:
- 效果如何?
- 好得一笔。
- 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。
- 还试验了很多其他结构,最终选择的反正就是最后一个,没花头。
- 对于上面那张图,在这篇文章中有一些解释:
- 改进残差单元,如下图
- 效果如何?
- 做了很多实验,证明新的结构比旧的好。
- 还存在什么问题?
- 这篇论文感觉比较水,就是一系列实验找了个更好的模型结构。
- 不可解释,都是实验的结果,但又不知道为什么这样修改比较好。
- 但我看了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结构:
- 如图所示,新提出的结构的宽度增加(即前两张图片的卷基层宽度较小,后两张较大)。
- 基于新的block结构提出了Wide ResNet
- 在每个block的卷基层之间使用了Dropout。.
- 在设置窟宽度、深度的时候,一般是考虑参数数量。
- 提出了一个新的block结构:
- 效果如何?
- 仅使用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 策略,注重性能。
- VGG网络的设计提出了一种新的设计方案:
- 当时的网络设计,在增加计算量/参数量的基础上提高性能比较多,很少有参数量/计算量不变但性能提高的。
- 用了什么方法解决?
- 设计了一种新的block结构,其中心思想是引入了 cardinality 的概念,我的理解其实就是做分组卷积。
- 普通ResNet是做三次卷积,channel变化分别是256 -> 64 -> 64 -> 256。
- ResNext的做法是将做32组操作(即cardinality参数),每组channel变化是 256 -> 4 -> 4 -> 256,最后将32组的所有结果累加。
- 在具体实现时,有一些可以修改的地方(从而提高性能)
- 下图中,b/c就与a完全相同,但性能更好。
- 提出的ResNext网络结构如下图:
- 设计了一种新的block结构,其中心思想是引入了 cardinality 的概念,我的理解其实就是做分组卷积。
- 效果如何?
- 还存在什么问题?
- 感觉整体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,即将卷基层分为多少个组。
- 这种方法 at a more granular level(不知道怎么翻译,更细微的层面)上处理multi-scale问题。
- 如何理解 res2net module 能够处理 multi-scale 问题?可以从receptive field上理解,上图中分组从左到右的receptive field依次增加。
- 与其他模型整合,如整合ResNext与SE。整体结构如下图
- SE模块如下图
- 与ResNext整合的意思就是其中的group=1的普通卷积转换为group=c的分组卷积。
- 提出了Res2Net Module,结构如下图所示。
- 效果如何?
- 替代ResNet后普遍涨点,下面这结果还是带了运行时间的,可以有
- Grad-Cam效果都更好了
- 在关键点识别、目标检测、语义分割中都得到了较好的结果,已经作为mmdetection的backbone。
- 替代ResNet后普遍涨点,下面这结果还是带了运行时间的,可以有
- 还存在什么问题?
- 这种分组卷积都有一个问题,虽然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连接,但没有任何非线性处理,这会导致训练难度增加。
- 为了改进上面所说的问题,提出了下图?结构。
- 改进shortcut结构
- shortcut就是在block的输入与输出尺寸有变化时使用。
- 文章认为 1*1 stride 2 卷积操作会损失75%的特征图信息,而且选择的25%并没有什么依据。
- 新结构设计的依据有三个:减少信息损失、增加了translation invariance、看作是soft/hard downsampling 的结合
- 改进 block 的结构
- 以前用的 bottleneck 结构,是为了减少计算量。
- 本文引入了分组卷积,在增加channel的保持FLOPs基本上不增加。
-
效果如何?
- 有一些与resnet v1比较的结果就不看了……怎么可能比resnet v1差。
- 下图比较了 resnext,看起来并没有什么优势(参数虽然少了,但FLOPs多了)
-
还存在什么问题?
- FLOPs不增加不代表inference time不增加。
- 其实我感觉这篇论文结果选择的baseline有点弱了……要比也是跟Res2Net、ResNeXt比吧……比了好像也没有太大优势。