精简CNN模型系列之二:SqueezeNet

介绍

SqueezeNet同这个系列要介绍的其它任一CNN模型一样不只关心模型分类精度,同样也重视其计算速度与模型体积大小。

作者列举了三项小的CNN模型的优点:

  • 可以进行更高效率的分布式训练:在分布式训练中,模型可训练参数变小,意味着用于网络通讯的时间减少,这样整个分布式训练系统就能拥有更高的扩展效率;
  • 可更高效地将新训练模型部署至端侧设备:当下很多AI驱动的APP或Service都需要不断将新训练得到的模型快速自云端部署至用户的客户端,小的CNN模型意味着更少的网络传播需求,进而更有利于新训练模型的频繁部署;
  • 有效的FPGA或其它嵌入设备上的模型部署:因FPGA或其它移动等嵌入设备往往只有很少的片上内存可用(没有或有速度相对很慢的片外内存),因此它们也渴望高准确率同时占内存不多的小CNN模型。

然后在本论文中,作者提出了一种新的Fire module,用于构建整个SqueezeNet网络,最终其能在Imagenet上达到与Alexnet相似的分类准确率,但只需其不到1/50的参数。若再进一步使用当下较为成熟的一些model compression技术进行模型压缩,可以进一步将SqueezeNet的权重大小压缩为Alexnet模型的1/510,只有不到0.5MB。

作者还分析了CNN模型基于准确率与模型大小为优化目标所可以考虑的设计。并基于Fire module与SqueezeNet分别在微观与宏观两个层次上进行了探究。

SqueezeNet

网络架构设计策略

  • 将3x3的conv filters替换为1x1的conv filters;
  • 减少输入至3x3 conv layer的feature maps的input channels 数目;
  • 将网络中所需的Downsample操作向后推迟。

以上三项策略中前两个是出于减少模型参数数量考虑,而后一个则是为了提高模型最终的分类准确率。三项策略都有据可考,在此不再详表。

Fire module

同Googlenet主要由Inception module组成或Resnet主要由Residual learning block组成一样,构成SqueezeNet网络的主要模块是Fire module。

它主要由两部分构成,分别为squeeze layer与expand layer。其中squeeze layer为1x1的conv layer,主要用于将输入此module的input channels数目进行缩减;而expand layer包含1x1的conv layer与3x3的conv layer,主要用于真正的feature maps的特征再融合,再表达。详细的fire module可见下图所示。

Fire_module

在Fire module中作者使用了三个hyper parameters用于表示它的构成。s1x1表示squeeze layer filters的数目;e1x1表示expand layer中1x1 conv filters的数目,e3x3则表示expand layer中3x3 conv filters的数目。因为在每个fire module内部s1x1要远小于e1x1 + e3x3,它们满足s1x1 = SR * (e1x1 + e3x3)。而SR称为缩减系数,在这里只有0.125。

SqueezeNet网络结构

如下图所示为SqueezeNet的整体网络结构及它的两种加入Residual learning考虑的变形。

SqueezeNet网络结构

它的设计基本follow了在篇初提到的三项准则。下表为它里面的具体参数设置。

SqueezeNet内部架构详情

我们可以从它当中看出来VGG的一些影子。也是随网络加深,downsampling的使用而不断加大fire module输出 channels的数目。同时它为了提高分类准确率而尽量将模型的downsampling操作放在了后面。

SqueezeNet评估

在下表中,我们能看出通过与Alexnet相比较,SqueezeNet展示了其在使用当下已成熟的model compression技术前后所具有的性能及参数大小优势。它进一步表明了当下较为成熟的像model prunning/model compression/low bit quantization等技术都可用于像SqueezeNet这样的小CNN models。

SqueezeNet的准确率及参数缩减程序评估

CNN微观模块设计考虑

作者有从两个方面对fire module内部的设计结构进行探索。

首先考虑SR(缩减参数)的大小对网络分类性能的影响,以上对其评估时使用的SR为0.125。作者在0.125-1的区间内对其进行线性最优探索。发现开始随着SR增加,最终的网络accuracy确会提升,但其边际提升值却是愈来愈小,另外SR自0.75升至1时accuracy不升反降。

另外作者有考虑expand内部1x1 conv filters与3x3 conv filters的比例分配。发现一味提高3x3 conv所占比例并不能导致模型精度提高,反而是3x3 conv的比例为0.5时,模型精度达到了最大为85.3%。

下图中可见作者的详细实验结果。

Fire_module微观模块设计探索

CNN宏观网络结构设计考虑

作者在原来的SqueezeNet网络中引入了Residual network里面提的by-pass learning的思想。但因为当ic != oc时不能直接使用简单的identity-mapping,因此在某些modules上考虑引入了1x1的conv使得ic == oc。这样作者共设计了两种考虑了residual learning的网络变形。具体网络结构可见上面章节的图中,下图所示则为三种网络结果对比分别具有的accuracy及模型参数大小。

CNN宏观网络结构设计探索

代码分析

如下所示为一个fire module在caffe中的协议表示。

layer {
  name: "fire2/squeeze1x1"
  type: "Convolution"
  bottom: "pool1"
  top: "fire2/squeeze1x1"
  convolution_param {
    num_output: 16
    kernel_size: 1
    weight_filler {
      type: "xavier"
    }
  }
}
layer {
  name: "fire2/relu_squeeze1x1"
  type: "ReLU"
  bottom: "fire2/squeeze1x1"
  top: "fire2/squeeze1x1"
}
layer {
  name: "fire2/expand1x1"
  type: "Convolution"
  bottom: "fire2/squeeze1x1"
  top: "fire2/expand1x1"
  convolution_param {
    num_output: 64
    kernel_size: 1
    weight_filler {
      type: "xavier"
    }
  }
}
layer {
  name: "fire2/relu_expand1x1"
  type: "ReLU"
  bottom: "fire2/expand1x1"
  top: "fire2/expand1x1"
}
layer {
  name: "fire2/expand3x3"
  type: "Convolution"
  bottom: "fire2/squeeze1x1"
  top: "fire2/expand3x3"
  convolution_param {
    num_output: 64
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
  }
}
layer {
  name: "fire2/relu_expand3x3"
  type: "ReLU"
  bottom: "fire2/expand3x3"
  top: "fire2/expand3x3"
}
layer {
  name: "fire2/concat"
  type: "Concat"
  bottom: "fire2/expand1x1"
  bottom: "fire2/expand3x3"
  top: "fire2/concat"
}

参考文献

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

推荐阅读更多精彩内容