『Aggregated Residual Transformations for Deep Neural Networks』论文笔记

一 为什么读这篇

传说中的ResNeXt,也是ResNet官方系列的第三篇,看完这个才算是对ResNet流派有个完整的认识,此外当前很多SOTA模型的底子都是用这个,所以不得不读。

二 截止阅读时这篇论文的引用次数

2019.1.14 671次。

三 相关背景介绍

2016年11月挂在arXiv上。中了17年的CVPR。是2016年ImageNet比赛的第二。一作Saining Xie13年本科毕业于上交ACM班,现在在UCSD读phd,这个工作是在FAIR实习时完成的,所以自然,二作Ross Girshick(rbg)和五作何恺明两位大神的出现就不奇怪了。

四 关键词

ResNeXt

cardinality

五 论文的主要贡献

1 提出ResNeXt结构

2 除了深度和宽度,引入一个全新的维度cardinality(基数)

3 相比Inception,设计更简洁优雅

六 详细解读

1 介绍

本文通过重复的building block来构建网络,该block聚合了具有相同结构的一组变换。并引入了一个新的维度,『cardinality』(变换集合的大小),它是除了深度和宽度之外又一个重要的因素。此外发现当增加容量时,增加cardinality比增加深度和宽度更有效。

最近视觉识别的研究更多的从『特征工程』转变为『网络工程』。然而架构的设计随着超参数(宽度-即通道数,filter大小,strides)的增多而越来越困难。VGG提出了一种简单且有效的策略:stacking同样形状的building block,ResNet也继承了这种策略。这种策略减少了超参数的选择,同时将深度作为至关重要的一个维度暴露出来。相比VGG,Inception系列证明了通过仔细设计的结构也能达到很好的效果。Inception的一个重要策略即『split-transform-merge』(这个总结就有意思了,并没有出现在Inception系列论文中,而是在本文中提到):把输入split成一些低维的embeddings(通过1x1卷积)通过一组特定的filter(3x3,5x5)做transform,最后merge起来。这种策略能保持在较低的计算复杂度下拥有很强的表示能力。不过本文作者也吐槽了Inception尽管效果好,但是超参太多,太难设计。

本文提出的架构采用VGG/ResNet重复堆叠层,同时使用split-transform-merge的策略。这样可以在不用特殊设计的情况下扩展任意数量的变换。

resnext-fig1.png

ResNeXt结构(图3-a)等效于Inception-ResNet(图3-b)和组卷积(图3-c)

resnext-fig3.png

实验证明,在同样计算复杂度和模型大小的条件下,ResNeXt优于ResNet。本作方法说明cardinality是除了宽度和深度之外很重要的一个维度。实验证明,增加cardinality比增加深度或宽度更有效。ResNeXt名字的寓意即next dimension。ResNeXt-101的效果优于ResNet-200,但是只有其50%的复杂度,这个就很碉堡了。更重要的是,相比所有的Inception,ResNeXt采用了更简单的设计。

2 相关工作

多分支卷积网络

Inception是典型的自定义多分支架构。ResNet可以视为2分支的网络,其中一个分支是恒等映射。深度神经决策森林是树模式的多分支网络。

组卷积

AlexNet应该是组卷积的鼻祖。

压缩卷积网络

分解操作(在空间和/或通道层面)被广泛应用于减少卷积网络的冗余度。这些方法都是准确率和复杂度之间的妥协,而经实验证明ResNeXt架构具有更强的表达能力。

Ensembling

本文的方法是使用加法操作来聚合一组变换。但如果将该方法视为ensembling则有点不太准确,因为聚合的成员都是联合一起训练的,而不是独立训练的。

3 方法

3.1 模板

还是沿用VGG/ResNet的设计套路。并采用两个简单的规则:1)如果产生的spatial map有同样的大小,那么block共享同样的超参(宽度和filter大小)2)每次spatial map以因子2做下采样时,block的宽度就相应的乘上2。第二条规则确保了计算复杂度。根据这两条规则,极大地缩小了设计空间,使得可以聚焦在几个关键因素上。依据这些规则构建的网络可以参考表1。

resnext-table1.png

3.2 重温简单神经元

内积操作可以视为最简单的神经元。内积也可以被视为一种聚合变换的形式(公式1)
\sum _ { i = 1 } ^ { D } w _ { i } x _ { i }

resnext-fig2.png

上面这个运算也可以被重塑为splitting,transforming,aggregating的联合体。(感觉这个联系好牵强,不知道用意在哪里,硬找个理论依靠?)

Splitting:x _ { i }

Transforming:w _ { i } x _ { i }​

Aggregating:\sum _ { i = 1 } ^ { D }

3.3 聚合变换

基于以上分析,考虑将初级变换(w _ { i } x _ { i })替换为更通用的函数,它当然也可以是一个网络。类比『Network-in-Network』,本文提出的『Network-in-Neuron』扩展出了一个新的维度。公式2为聚合变换的定义:
\mathcal { F } ( \mathbf { x } ) = \sum _ { i = 1 } ^ { C } \mathcal { T } _ { i } ( \mathbf { x } )
其中\mathcal { T } _ { i } ( \mathbf { x } )​是任意函数。类比简单神经元,\mathcal { T } _ { i } ( \mathbf { x } )​将x投影到一个embedding,之后对它做变换。C是聚合变换的的个数。也就是cardinality。公式2中的C类似于公式1中的D。

本文中考虑用一种简单的方式来设计变换函数,所有的\mathcal { T } _ { i } ( \mathbf { x } )都是相同的结构,用ResNet中提到的bottleneck-shape架构(图1右侧)

公式3就是加上残差函数的形式:
\mathbf { y } = \mathbf { x } + \sum _ { i = 1 } ^ { C } \mathcal { T } _ { i } ( \mathbf { x } )

与Inception-ResNet的关系

图3a和图3b说明一些张量运算是等价的。但是不像Inception,本方法在多个路径上共享了相同的结构,用最少的努力来设计每个路径。(这才是正道,Inception-v4看完后给人一种不批判都不行的感觉)

与组卷积的关系

以上模块如果使用组卷积的符号来表示会更简洁。这里看图3c就够了。32x4d中的32表示32个组卷积,4d表示组卷积的输入输出通道都是4维。图3c和图1左很像,不过图3c更宽同时是稀疏连接。(感觉不就是把ResNet变宽吗。。)

当block的深度为2时,可以参考图4。

resnext-fig4.png
讨论

尽管图3b,图3c和图3a是等价的,但是它们并不一直适用于公式3的通用形式。本文使用均质的形式因为他们更简单更易于扩展。

3.4 模型容量

复杂度和参数量表示了模型的固有能力。

在图1左的ResNet bottleneck block中,大约有256 \cdot 64 + 3 \cdot 3 \cdot 64 \cdot 64 + 64 \cdot 256 \approx 70 \mathrm { k }个参数。在图1右的ResNeXt中,有公式4这么多的参数:
C \cdot ( 256 \cdot d + 3 \cdot 3 \cdot d \cdot d + d \cdot 256 )
当C=32,d=4时,公式4约等于70k个参数,和ResNet一样。表2说明了cardinality和bottleneck宽度d的关系。

resnext-table2.png

根据表1可以看到ResNet-50和ResNeXt-50的有相似的容量。

4 实现细节

实验通过torch完成,输入图像大小为224x224,数据增强策略和Inception-v1一样。batch_size为256跑在8块GPU上。。。

用SGD,权重衰减为0.0001,动量为0.9。初始学习率为0.1,3次后除10。用He初始化。通过剥除比较,评估是在224x224中间裁剪的图像上(更短的一边是256)。

模型是基于图3c实现的,不过加上了BN,BN加在聚合和变换之后,捷径连接加法操作之前。ReLU在每个BN后执行。

图3的三种形式都有训练,发现结果是一样的,不过图3c更简洁,同时比另外两个要快。

5 实验

5.1 ImageNet-1K

Cardinality vs. Width
resnext-table3.png

ResNeXt-50(32x4d)比ResNet-50的top1错误率还要低1.7%,另外,它的训练误差也要更低,这暗示收益可能不是来自正则化,而是来自更强的表达能力。

另外,从表3也能看出,在同样的复杂度下,当以减少宽度的代价来增加cardinality时,bottleneck宽度很小时准确率开始饱和。

Increasing Cardinality vs. Deeper/Wider
resnext-table4.png

表3说明增加cardinality比增加深度和宽度更有效。

残差连接
resnext-table-tmp.png

有无残差连接的对比还是很明显的,说明残差连接还是很有用的。另外这个比较暗示了残差连接有助于优化,而聚合变换则是有更强的表达能力。

性能

8卡的M40上,ResNeXt-101(32x4d)每个batch0.95s,ResNet-101 0.7s。

ResNeXt-101(64x4d) 1.7s,耗时10天。。

与SOTA的比较
resnext-table5.png

5.2 ImageNet-5K

ImageNet-1k的效果开始饱和了,但是本文怀疑这并不是因为模型的能力导致的,而应该是数据集的复杂度导致的,因此用5K。5K有680万张图,大约是1K的5倍。

5.3 CIFAR

resnext-fig7.png

再一次发现增加cardinality比增加宽度更有效。

表7又和Wide ResNet PK一下。

resnext-table7.png

5.4 COCO目标检测

基于Faster R-CNN实现。用ImageNet-1K的预训练权重,之后在检测数据集上fine-tuned。另外Mask R-CNN用的就是ResNeXt,达到了COCO上的SOTA。

七 读后感

论文确实得穿插着读,像split-transform-merge这种总结,Inception系列自己就没有提到。另外第一眼看到图1,有种我屮的感觉,右图感觉其实和ResNet差别不大,就是重复了一下的样子,这样就产生了一篇paper,看来理念有时候在并不是很复杂的情况下也很有效,并能发paper。。还是看原文有意思,也就原文会解释ResNeXt中的next是什么意思这种八卦。整体感觉这篇文章比Inception-v4好太多了。

八 补充

https://towardsdatascience.com/history-of-convolutional-blocks-in-simple-code-96a7ddceac0c

def resnext_block(x, f=32, r=2, c=4):
    l = []
    for i in range(c):
        m = conv(x, f // (c * r), k=1)
        m = conv(m, f // (c * r), k=3)
        m = conv(m, f, k=1)
        l.append(m)
    m = add(l)
    return add([x, m])

btw,如果cardinality和通道数相等就称为深度可分卷积。Xception提出的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容