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. Azure CosmosDB (13) CosmosDB数据建模

    <Windows Azure Platform 系列文章目录> 我们在使用NoSQL的时候,如Azure Cosmos DB,可以非常快速的查询非结构化,或半结构化的数据.我们需要花一些时 ...

  2. [转摘]VMware下Windows系统出现大量可删除ATA Channel的解决办法

    编辑VMX配置文件加上一句话就可以了 devices.hotplug = "false" 原文:http://blog.ihipop.info/2015/05/4830.html

  3. Win32-Application的窗口和对话框

    Win32 Application,没有基于MFC的类库,而是直接调用C++接口来编程. 一.弹出消息窗口 (1)最简单的,在当前窗口中弹出新窗口.新窗口只有“YES”按钮. int APIENTRY ...

  4. 【linux】之日志查看

    搜索日志 -n 显示行号 grep 1570xxxx -n callback.tomcat-catalina-out 显示从第多少行~多少行 sed -n '464913,465020p' callb ...

  5. 分布式job-任务调度(一)

    什么是任务调度: 任务调度:在单位时间内,去调用某个方法或者执行某段代码 java实现方式: 方法一(使用线程实现): public static void ThreadTskScheduling() ...

  6. 简单Hash函数LongHash

    import java.security.SecureRandom; import java.util.Random; public class LongHash { private static l ...

  7. ie浏览器许多图片放在一起会有间隙

    解决方法一(推荐):设置图片父元素font-size:0. 解决方法二:设置图片为float:并且图片设为块级元素.

  8. 部署Redis4.x单机版及配置RDB和AOF持久化

    一.环境及软件 OS soft version  CentOS 7.5   redis-4.0.12(目前是4.x最新) 二.下载及编译Redis [root@localhost ~]# wget h ...

  9. linux上安装mysql5.6

    CentOS-6.6+MySQL-5.6 部署环境操作系统:CentOS-6.6-x86_64-bin-DVD1.isoMySQL 版本:mysql-5.6.26.tar.gz操作用户:root系统 ...

  10. Postman runner参数化

    按照下面图片的顺序操作吧~ lets go 1.把要做参数化的字段的value用花括号标识起来,如:{{phone}} 2.准备一个csv的文件,把每次请求接口的参数按下图填写好,第一行写字段名称(p ...