经典分类CNN模型系列其八:ResNeXt

介绍

越来越喜欢Facebook的东西了,虽然很久以来我一直是个Google产品及技术的忠实粉丝。但最近在AI框架上一直频繁去翻弄Pytorch/Caffe2,感觉其API及核心模块设计结构比Tensorflow更加清晰、易懂。
同时看到Facebook出的像ResNext这种分类网络比Google一直在捧的Inception v4/Inception Resnet v2等网络也要更为简单而高效。

本来始终都不能从Inception v4/Inception Resnet系列网络的复杂噩梦中解脱,但看过ResNeXt后,终于如释重负,恢复了自己一直以来的哲学信仰。这个世界的很多高深、有效的道理其实都可以有简单的方式去表达。

ResNeXt可以说是基于Resnet与Inception 'Split + Transfrom + Concat'而搞出的产物,结构简单、易懂又足够强大。在行业标志性的Imagenet 1k数据集上它取得了比Resnet/Inception/Inception-Resnet系列更佳的效果。

以下为构成ResNeXt网络的基本block单元。

ResNeXt与Resnet基本模块对比

乍看上去它与Inception Resnet中所有的基本单元极为相似,可实际上它block当中的每个sub branch都是相同的,这是它与IR网络结构的本质区别,而正是基于这区别,我们可以使用Group convolution来对其进行良好实现。

ResNeXt

ResNeXt网络的整体结构

正如ResNet是由基本的Residual模块一个个累积起来的一样,ResNeXt网络也是由上图中所描述的模块一个个累积起来的。下面表格当中,我们能看到ResNeXt与ResNet网络的整体结构。

ResNext-50与Resnet-50的整体网络结构对比

在这里它Follow了之前VGG/ResNet等网络中的一贯做法:一是如果一个block输出同样大小的chnnel size,那么blocks输入、输出有着相同的hyper-parameters(即width和filter sizes);二是若其输出与输入有着不同的大小(如downsampling操作),那么就需要相应地扩大filters的数目。
从上面表格里,亦能看出ResNeXt与ResNet一样都follow这样两条准则以保证每个block的计算量类似,所传递的信息也不会因层数递增而有太多丢失。

ResNeXt网络模块的变形

下面图中显示了三种ResNeXt网络模块的变形。它们在数学计算上是完全等价的,而第三种包含有Group convolution操作的正是最终ResNeXt网络所采用的操作。

ResNeXt网络模块的三种等价形式

ResNeXt网络的Capacity

一般增强一个CNN的表达能力有三种手段:一是增加网络层次即加深网络(目前CNN已经由最初Alexnet的不到十层增加到了成百上千层,而实际实验结果表明由层次提升而带来的边际准确率增加已是越来越少);二是增加网络模块宽度(可见我们之前有介绍过的Wide residual network,可宽度的增加必然会带来指数级的参数规模提升,因此它并非为主流CNN设计所认可。);
三是改善CNN网络结构设计(当然在不增加模型复杂度的情况下通过改良模型设计以来提升模型性能是最理想的做法,不过其门槛则实在是太高,不然Google/Facebook/Microsoft的那些埋头设计网络/调参的哥们儿就没办法拿那么高工资了。:))。

ResNeXt的做法可归为上面三种方法的第三种。它引入了新的用于构建CNN网络的模块,而此模块又非像过去看到的Inception module那么复杂,它更是提出了一个cardinatity的概念,用于作为模型复杂度的另外一个度量。Cardinatity指的是一个block中所具有的相同分支的数目。

作者进行了一系列对比实验,有力证明在保证相似计算复杂度及模型参数大小的前提下,提升cardinatity比提升height或width可取得更好的模型表达能力。

下图为反映Cardinatity增加对模型性能提升的实验结果。

Cardinatity增加对模型性能提升的影响

实验结果

ImageNet-1K

首先在标准的ImageNet-1K上进行了实验,并与其它state-of-art的模型进行了对比。

ResNeXt与ResNet网络在ImageNet-1K数据集上的性能对比

可以看出ResNeXt网络相对于ResNet网络可在training accuracy/val accuracy上都取得提升,但training accuracy上的提升显得更大。作者分析认为是因为ResNeXt的表达能力更强了,但此类结果改善却并非是因为Regularization的因素导致的。
为了减少可能的overfitting以来有效利用ResNext的表达能力,作者还试着在更大的ImageNet-5K上进行了实验。

下表为ResNeXt与更多CNN网络在ImageNet-1K上的结果比较。

ResNeXt与其它CNN网络在ImageNet-1K上的结果比较

ImageNet-5K

下面的图与表格中反映了ResNeXt与ResNet相比在更大的ImageNet-5K数据集上的优势。

ResNeXt与ResNet网络在ImageNet-5K上的结果比较

代码分析

原文的代码是基于Torch来完成的,因为此Framework已经不再维护,所以在这里还是通过由Caffe所表达的结构来分析下此模型的组成。

下面是一个典型的ResNeXt网络模块,可以与之前的ResNet模块对比下,其主要的区别就是中间的3x3 conv transform层由direct conv变为了cardinatity为32的group conv。

layer {
  name: "stage1_unit2_conv1"
  type: "Convolution"
  bottom: "stage1_unit1_plus"
  top: "stage1_unit2_conv1"
  convolution_param { 
     num_output: 128
     kernel_size: 1
     stride: 1
     pad: 0
     bias_term: false
  }
}

layer {
  name: "stage1_unit2_bn1"
  type: "BatchNorm"
  bottom: "stage1_unit2_conv1"
  top: "stage1_unit2_conv1"
  batch_norm_param {
    use_global_stats: true
    eps: 2e-5
  }
}

layer {
  name: "scale_stage1_unit2_bn1"
  bottom: "stage1_unit2_conv1"
  top: "stage1_unit2_conv1"
  type: "Scale"
  scale_param {
        bias_term: true
  }
}

layer {
  name: "stage1_unit2_relu1"
  type: "ReLU"
  bottom: "stage1_unit2_conv1"
  top: "stage1_unit2_conv1"
}

layer {
  name: "stage1_unit2_conv2"
  type: "Convolution"
  bottom: "stage1_unit2_conv1"
  top: "stage1_unit2_conv2"
  convolution_param { 
     num_output: 128
     kernel_size: 3
     stride: 1
     group: 32
     pad: 1
     bias_term: false
  }
}

layer {
  name: "stage1_unit2_bn2"
  type: "BatchNorm"
  bottom: "stage1_unit2_conv2"
  top: "stage1_unit2_conv2"
  batch_norm_param {
    use_global_stats: true
    eps: 2e-5
  }
}

layer {
  name: "scale_stage1_unit2_bn2"
  bottom: "stage1_unit2_conv2"
  top: "stage1_unit2_conv2"
  type: "Scale"
  scale_param {
        bias_term: true
  }
}

layer {
  name: "stage1_unit2_relu2"
  type: "ReLU"
  bottom: "stage1_unit2_conv2"
  top: "stage1_unit2_conv2"
}

layer {
  name: "stage1_unit2_conv3"
  type: "Convolution"
  bottom: "stage1_unit2_conv2"
  top: "stage1_unit2_conv3"
  convolution_param { 
     num_output: 256
     kernel_size: 1
     stride: 1
     pad: 0
     bias_term: false
  }
}

layer {
  name: "stage1_unit2_bn3"
  type: "BatchNorm"
  bottom: "stage1_unit2_conv3"
  top: "stage1_unit2_conv3"
  batch_norm_param {
    use_global_stats: true
    eps: 2e-5
  }
}

layer {
  name: "scale_stage1_unit2_bn3"
  bottom: "stage1_unit2_conv3"
  top: "stage1_unit2_conv3"
  type: "Scale"
  scale_param {
        bias_term: true
  }
}

layer {
  name: "stage1_unit2_plus"
  type: "Eltwise"
  bottom: "stage1_unit1_plus"
  bottom: "stage1_unit2_conv3"
  top: "stage1_unit2_plus"
  eltwise_param {
     operation: SUM
  }
}

layer {
  name: "stage1_unit2_relu"
  type: "ReLU"
  bottom: "stage1_unit2_plus"
  top: "stage1_unit2_plus"
}

参考文献

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

推荐阅读更多精彩内容