总结今年来的几个轻量化模型:SqueezeNet、Xception、MobileNet、ShuffleNetweb
下面给出时间轴:服务器
其次,说一下模型轻量化的一些方法:网络
小模型的好处有哪些:分布式
地址连接:https://arxiv.org/pdf/1602.07360.pdfsvg
在ImageNet上实现了与Alexnet类似的效果,参数只有其1/50, 模型是0.5MB,占其1/510。函数
SqueezeNet核心内容有如下几点:性能
上述1-3是经过fire module实现的,fire module主要分为两部分,以下图所示优化
该模块一共三参数s_1x一、e_1x一、e_3x3,关系保持s_1x1< e_1x1+e_3x3google
实验结果表示模型小,且准确率不降,反而有点提升;编码
参考连接:
一、https://blog.csdn.net/csdnldp/article/details/78648543
二、http://www.noobyard.com/article/p-updyahpy-qd.html
地址连接:https://arxiv.org/abs/1610.02357
虽然本文中方法能够下降参数量,可是论文加宽了网络结构,所以这篇论文不在于压缩模型,旨在于提升性能,与同等参数量的inception v3相比,效果更好。
首先是inception v3的一系列延伸,见下图:
一、版本1:最初的inception v3
二、版本2:对1进行简化
三、版本3:对2简化,能够先使用一个统一的1x1卷积核,而后每一个3x3卷积核的输入只是1x1卷积后的feature map的一部分。本图中是1/3;
四、版本4:在3的基础上进一步延伸,将1x1卷积后的全部feature map按通道所有划分,每个通道对应一个3x3卷积,即3x3卷积核的数量就是1x1卷积后feature map的通道数。
而后在xception中,主要采用depthwise separable convolution思想(这个后面在mobile net中详细解释,好奇怪,明明是mobile net后出现的,反正都是一家的,估计公布前后的问题吧。)
首先xception相似于图4,可是区别有两点:
一、xception中没有relu激活函数;
二、图4是先1x1卷积,后通道分离;xception是先进行通道分离,即depthwise separable convolution,而后再进行1x1卷积。
此外,进行残差链接时,再也不是concat,而是采用加法操做。
参考连接:
一、http://www.noobyard.com/article/p-msrksyns-qb.html
地址连接:https://arxiv.org/pdf/1704.04861.pdf
主要是两个策略:
假设上一层获得的feature map的size为D_K * D_K * M,本层的卷积核大小为D_K * D_K,卷积核个数为M。
一、首先介绍传统卷积核的操做方式,以下图。
卷积核D_K * D_K须要在feature map的每一个通道上进行D_K * D_K次卷积,而后一共M个卷积核,所以计算量为:
二、介绍depthwise separable convolution,以下图
将卷积核进行拆解,分为两步,首先用M个D_K * D_K卷积核在feature map进行卷积,计算量为
而后再使用N个1 * 1 * M卷积核在前面获得的结果上进行feature map,计算量为:
因此,进行分解后的总计算量为:
三、计算量比较
能够看到,随着卷积核个数的增长,即通道数变多,feature map的大小,传统方式的计算量比分解要大得多。
怎么才能使网络进一步压缩呢?能够进一步减小feature map的通道数和size,经过宽度因子减小通道数,分辨率因子减小size。
一、宽度因子α
二、分辨率因子β
两个参数都属于(0,1]之间,当为1时则是标准mobileNet。
一、使用RMSprop优化器;
二、未作大量数据加强,由于参数量小过拟合不严重;
三、采用了随机图像裁剪输入;
四、使用较小的weight decay,或者不使用;
给出几个基本的实验比较结果。
参考连接:
一、https://blog.csdn.net/t800ghb/article/details/78879612
二、http://www.noobyard.com/article/p-blrswdtr-bk.html
三、http://www.noobyard.com/article/p-wxjuartj-mp.html
地址连接:https://arxiv.org/pdf/1707.01083.pdf
核心思想有两点:
此外本篇论文中也采起了mobilenet的depthwise separasable convolution的方式。
这个就是采用resnext的思想,将通道分组,每组分别进行卷积操做,而后再把结果进行concat。可是不一样于resnext的是,shufflenet采用的是1x1卷积核。
什么是通道shuffle,就是在分组卷积后获得的feature map不直接进行concat,先将每组feature map按通道打乱,从新concat,以下图所示:
如何进行shuffle,这里参考连接,
对于一个卷积层分为g组,
下图中,a是标准的残差结构,不过是3x3卷积核使用了mobilenet中的depthwise convolution操做;
b是在a的基础上加了本文的通道shuffle操做,先对1x1卷积进行分组卷积操做,而后进行channel shuffle;
c是在旁路加了一步长为2的3x3的平均池化,并将前二者残差相加的操做改成了通道concat,增长了通道数量。
一、评估逐点组卷积:分组的效果均比没有分组的效果好,可是某些模型随着组数增长,性能有降低,这就是通道间失去联系带来的问题;
二、评估channel shuffle,shuffle会比没有shuffle效果好,并且对于组数越大,效果越好,说明了shuffle的重要性,也说明了上图中组数增长性能降低的问题。
三、与mobilenet的比较
参考连接: