Res-Family: From ResNet to SE-ResNeXt

姚伟峰
http://www.cnblogs.com/Matrix_Yao/

ResNet(2015 Dec)

Paper

Deep Residual Learning for Image Recognition

Network Visualization

https://dgschwend.github.io/netscope/#/preset/resnet-50

Problem Statement

A paradox between neural network depth and its representation capability.

  • Intuition:

    • deeper the network, stronger the representation capability
  • Observation
    • network performance will degrade while network is deeper

Why

  • Overfit
  • Gradient Vanish checked back propogated diff, also BN can secure this.
  • Conjecture: deep plain nets may have exponentially low convergence rate, which impact the reducing of the training error.

Conclusion

Current plain network design impede us pursue bigger representation capability through make network deeper.

How to Solve it

可以通过构造性方法,构造出一个性能至少与对应的浅层模型相等的深度模型。当add-on block输出为0时,这个deeper net的性能与shallower net的性能一致。


从函数逼近的角度,假设我们需要逼近函数, shallower net给出了一个, 那add-on block可以看作在逼近, 即残差(residual),这本质上是残差学习(residual learning)或者是boosting的想法。这也是ResNet的基本想法。

Breakdown

Residule Module


the right block is called bottleneck architecture.

Identity Shortcut and Projection Shortcut

上面的topology图中,实线即表示identity shortcut,虚线即表示projection shortcut. 出现projection shortcut的原因是该module内部的操作改变了feature map的dimension(height, width, channel),我们需要一个projection来match dimension。下图中的f指该模块的输出channel数。

Tricks

h/w和c的关系是:spatial每做一次1/2 down sample, c就乘以2, 所以

Mind Experiment

  1. 对ResNet-50 inference有哪些适用的优化策略?

    • operator fusion

      • vertical fusion

        • BN folding

          • conv + BN + ScaleShift -> conv
        • conv + relu
        • conv + relu + pooling
        • conv + eltsum + relu
      • horizontal fusion
        • multi-branch fusion
    • advanced tech
      • lossless topology compression
    • other potentials
      • kernel = 1 pooling optimization

Another Perspective

We can treat ResNet as a Stacked Boosting Ensemble.

ResNet-v2 (2016 Jul)

Paper

Identity Mappings in Deep Residual Networks

Network Visualization

http://dgschwend.github.io/netscope/#/gist/6a771cf2bf466c5343338820d5102e66

Motivation

When we express ResNet as a general formula:

在ResNet中,所以称为shortcut。 另一个叫法就是highway,因为的信息在这条路径上可以无衰减地传输,就像一个高速公路一样。但在ResNet中因为是一个ReLU会损失掉一部分信息,所以的无衰减传输只能限于本block, 并不能在整个网络中无衰减地传下去。现在的猜想是:如果我们把也变成一个identity mapping,这个highway会更加顺畅,效果会不会更好?

The Ways

The Importance of Identity Shortcut

作者尝试了很多种方式与identity shortcut作了对比,发现效果都没有identity shortcut好。

Proposed Architecture


上述结构称为pre-activation Residual Module,因为与以前的Residual Block是CBR(Conv, BN, ReLU)结构,而这个是BRC(BN, ReLU, Conv)结构,activation在conv之前,所以称为pre-activation结构。
因此,ResNet-v2可以表示为如下形式:

,把递归式展开,有:

这是一个纯的additive model,比ResNet更像stacked boosting。效果如下图:

Mind Experiment

  1. ResNet-v2 在inference优化上与ResNet有什么不同的地方?

    • New Vertical Fusion

      • BN + ReLU
      • Conv + eltsum
  2. 有同学会觉得上面的b图中的两个branch因为scaling都是0.5,与原始Residual Block相比只相当于把再乘个0.5, 在数学上是等价的,为啥效果会差很多呢?。这句话对了一半,就单个module而言,确实如此。
    但一旦把module串联起来形成网络,事情发生了质的变化。不失一般性,我们如下形式化constant scaling module(这里为了简化推导我把relu换成了identity,不会影响最终结论):

    把递归式展开后为:

    可以看到与原展开式相比,constant scaling对输入特征进行了指数式衰减,两者是完全不等价的。

ResNeXt (2017 Apr)

Paper

Aggregated Residual Transformations for Deep Neural Networks

Network Visualization

https://chakkritte.github.io/netscope/#/preset/resnext-50

Motivation

随着deep learning的兴起,视觉识别中的研究已经从feature engineering转向了network engineering,即设计topology。而随着深度的增加,topology中超参数(如卷积核大小,stride,channel数等)越来越多,很难确定。VGG和ResNet的成功表明通过堆叠相同形状的block的方法不仅可以显著减少超参数的数量,而且能取得SOTA的结果,是非常有前途的方向(这个感觉跟分形的想法很类似)。这是方向一。
而以GoogleNet/GoogleNet-v2/Inception为代表的实践也表明,通过split-transform-merge策略进行精细的网络设计也能达到非常好的结果。这是方向二。


ResNeXt的想法是把这两种好的想法揉到一起,看效果会不会更好。“In this paper, we present a simple architecture which adopts VGG/ResNets’ strategy of repeating layers, while exploiting the split-transform-merge strategy in an easy, extensible way.”

The Ways

美来自简单的重复

如果像GoogleNet系那样做split-transform-merge(如上图),因为每个branch都需要设计卷积核的超参,以及branch的深度,所以超参会迅速膨胀。所以,要想个办法,既做了split-transform-merge,有没有多少超参量的增加,这个时候其实还是利用“重复大法”来达成。我们先看一下ResNeXt的设计:


可以看到这个结构是一个单元重复32次然后再相加的结果。每个单元是一个bottleneck结构:先把输入feature map 通过1x1卷积embedding到4 channel的feature map,然后做3x3卷积,然后再expand回去。我们把这个结构叫做32x4d的结构。其中32是ResNeXt引入的新的自由度,称为cardinality。ResNeXt的名字也源于此,X指的就是 neXt dimension。最后,不要忘了residual shortcut。

C和d的确定

为了得到与对应的ResNet参数量相当的ResNeXt,我们可以按照如下公式确定ResNeXt block的C和d:

One more thing

进一步地,通过等效变形,可以把ResNeXt看成是囊括了GoogleNet/grouped convolution/ResNet的一种范型。 这样,ResNeXt论文的层次就超脱了只是ResNet的优化了。


上图a是ResNeXt module的原始形式,b是googlenet形式的等价型,c是group convolution的等价型。从性能(速度)的角度看,c的最好。

效果

最后作者给出了top-1 error,可以看到确实有较明显的提升。

Mind Experiment

  1. ResNeXt从最终实现上来看与ResNet基本相同,唯一区别是residual module中的 3x3 convolution被换成了group convolution。

SE-ResNet, SE-ResNeXt (2018 Apr)

Paper

Squeeze-And-Excitation Networks

Network Visualization

http://dgschwend.github.io/netscope/#/gist/4a41df70a3c7c41f97d775f991f036e3

Motivation

2017年开始,Google说“Attention is all you need”,天下豪杰竞相响应。2018的很多工作的都是基于Attention机制的进展。这篇文章也可看作其中之一,因为我们可以把SENet看成是channel-wise的attention。如下图,SENet在常规动作后增加了一条专门计算channel-wise scale的branch,然后把得到的值乘到相应的channel上。

How it works

SENet计算channel-wise attention,分为两个步骤:

  • Squeeze: 如下图的红框。把每个input feature map的spatial dimension 从H * W squeeze到1。这里是通过global average pooling完成的。

  • Excitation: 如下图的绿框。通过一个bottleneck结构来捕捉channel的inter-dependency,从而学到channel的scale factor(或者说是attention factor) 。


下图是SE-ResNet, 可以看到SE module被apply到了residual branch上。


下图是网络配置,这里FC后边的方括号里面的数表示


最后是效果,可以看到SENet在收敛速度和accuracy上都有提高。

Implementation Notes

  1. SENet的FC等效于1x1的convolution,可以用conv1x1来代替。
  2. channel wise scale + eltsum可以fuse成channel-wise axpy。

Mind Experiment

  1. Q: SE module最终实现上其实是channel wise的scale,这个在数学操作上与BN是一样的。那SE module为什么不能被BN代替呢?
    A:BN只建模了spatial内的dependency,而SE module不仅建模了spatial dependency还建模了inter-channel的dependency。

Res-Family: From ResNet to SE-ResNeXt的更多相关文章

  1. 跟我学算法-图像识别之图像分类(下)(GoogleNet网络, ResNet残差网络, ResNext网络, CNN设计准则)

    1.GoogleNet 网络: Inception V1 - Inception V2 - Inception V3 - Inception V4 1. Inception v1 split - me ...

  2. ResNet实战

    目录 Res Block ResNet18 Out of memory # Resnet.py #!/usr/bin/env python # -*- coding:utf-8 -*- import ...

  3. 从LeNet到SENet——卷积神经网络回顾

    从LeNet到SENet——卷积神经网络回顾 从 1998 年经典的 LeNet,到 2012 年历史性的 AlexNet,之后深度学习进入了蓬勃发展阶段,百花齐放,大放异彩,出现了各式各样的不同网络 ...

  4. 【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection

    论文地址:https://arxiv.org/abs/2004.10934v1 github地址:https://github.com/AlexeyAB/darknet 摘要: 有很多特征可以提高卷积 ...

  5. 卷积神经网络学习笔记——SENet

    完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 这里结合网络的资料和SE ...

  6. YOLOv4全文阅读(全文中文翻译)

    YOLOv4全文阅读(全文中文翻译) YOLOv4: Optimal Speed and Accuracy of Object Detection 论文链接: https://arxiv.org/pd ...

  7. vc++2013中使用MySQL connector/C++ 1.1.4静态链接报错

    包含头文件 #include <mysql_connection.h> #include <mysql_driver.h> #include <cppconn/state ...

  8. Multi-Fiber Networks for Video Recognition (MFNet)

    Motivation:减少时空网络的计算量,保持视频分类精度的基础上,使速度尽可能接近对应网络的2D版本. 为此提出 Multi-Fiber 网络,将复杂网络拆分成轻量网络的集成,利用 fibers ...

  9. 51Nod1766 树上的最远点对 ST表 LCA 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1766.html 题目传送门 - 51Nod1766 题意 n个点被n-1条边连接成了一颗树,给出a~ ...

  10. 『计算机视觉』Mask-RCNN

    一.Mask-RCNN流程 Mask R-CNN是一个实例分割(Instance segmentation)算法,通过增加不同的分支,可以完成目标分类.目标检测.语义分割.实例分割.人体姿势识别等多种 ...

随机推荐

  1. MySQL高可用工具--orchestrator

    orchestrator是一款MySQL高可用工具,其支持: 集群拓扑探测 集群拓扑重塑 故障恢复 提供3种使用方式: 命令行 HTTP API web页面 orchestator github地址

  2. php7 使用dom动态生成xml文档

    <?php $dom = new DomDocument('1.0','gb2312'); //创建DOM对象 $store = $dom->createElement('store'); ...

  3. ID 生成器 雪花算法

    https://blog.csdn.net/wangming520liwei/article/details/80843248 ID 生成器 雪花算法 2018年06月28日 14:58:43 wan ...

  4. h5课件是什么?h5(html5)怎样实现交互动画开发?-----浅谈h5交互动画课件的优势

    目前很多交互课件,尤其幼儿类的交互课件以动画和交互相结合的类型居多,越来越多的教育机构发现了这种课件对于幼儿的吸引力远大于其他类型的课件,随着flash逐渐被市场淘汰,动画和交互相结合的html5跨平 ...

  5. [蓝桥杯]PREV-26.历届试题_最大子阵

    问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大. 其中,A的子矩阵指在A中行和列均连续的一块. 输入格式 输入的第一行包含两个整数n, m,分别表示矩阵A的行数和 ...

  6. JavaScript最后的课程笔记

    一.快捷位置和尺寸 DOM已经提供给我们计算后的样式,但是还觉得不方便,所以DOM又提供给我们一些API: ele.offsetLeft ele.offsetTop ele.offsetWidth e ...

  7. Kong(V1.0.2) Health Checks and Circuit Breakers Reference

    介绍 您可以让Kong代理的API使用ring-balancer,通过添加包含一个或多个目标实体的 upstream 实体进行配置,每个 target指向不同的IP地址(或主机名)和端口.ring-b ...

  8. Selenium常用方法

    Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击.下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬.对于一些JavaScript动态渲染的页面来说 ...

  9. 基于IPV6数据包分析(GNS3)

    1:实验拓扑 2:检测路由之间的连通性 路由器R4  ping  各路由器 R1路由表 R4路由表 3:抓包分析 A:回送请求报文(Echo Request)  (128)     Type=128, ...

  10. 使用谷歌CoLaboratory训练神经网络

    前言 Colaboratory 是一个 Google 研究项目,旨在帮助传播机器学习培训和研究成果.它是一个 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行.Colabo ...