Light Weight CNN模型的分析与总结

本文选择了4个light weight CNN模型,并对它们的设计思路和性能进行了分析与总结,目的在于为在完成图像识别任务时模型的选择与设计方面提供相关的参考资料。

1 简介

自AlexNet[1]在LSVRC-2010 ImageNet[22]图像分类任务上取得突破性进展之后,构建更深更大的convolutional neural networks(CNN)几乎成了一种主要的趋势[2-9]。通常,获得state-of-the-art准确率的模型都有成百上千的网路层以及成千上万的中间特征通道,这便导致了一些complex CNN模型[7-9]需要上十亿的FLOPs(每秒浮点计算次数),也就限制了他们在移动手机平台或移动机器人平台的应用。为了解决这一问题,构建light weight CNN模型[10-19]成为了一个非常活跃的研究方向。近年来在light weight CNN模型构建方面的一些成果已经表明,一些经过精心设计的小模型,也能够在图像分类问题如ImageNet上取得state-of-the-art的性能,而在模型参数以及计算效率方面都有大幅度的减少与提高。为了能够在完成图像识别任务(如菜品识别等)时模型的选择与设计方面提供相关的参考资料,本文首先简单的对构建light weight CNN模型的方法进行了介绍,继而选择了4个模型并对它们的设计思路和性能进行了分析与总结。

2 Light Weight CNN模型

在构建light weight CNN模型方面主要有两个大的方向:
(1) 基于不同的卷积计算方式构造新的网络结构
如All Convolution Net[10],SqueezeNet[11],MobileNet[12]以及ShuffleNet[13]等。
(2)在已训练好的模型上做裁剪[14-19]
Pruning:从权重(weight)层面或从(kernel & channel)层面对模型进行修剪;Compressing:如权重共享(clustering based weight sharing)或对权重采用Huffman编码等;Low-bit representing :如权重量化(quantization)将浮点型转换到[0~255],或者将网络二值(binary)化等。
我们这里选择,从基于不同的卷积计算方式构造新的网络结构这个方向下,挑选一些就近的成果来进行分析与总结。这样选择的理由是因为,上述1这个方向是解决问题的一种更为本真的方式。它是一种更为靠近底层的解决问题的思路,而上述2这种方式是可以被认为是以1为基础而进行的相关拓展。

3 基于不同的卷积计算方式构造的Light Weight CNN模型

对于Light Weight CNN模型的评估除准确率之外,我们还比较关注模型参数压缩的比率以及模型的计算效率。因此,在选择模型时需要注意一下,一些方法在模型参数压缩方面的比率和模型计算方面的效率之间的权衡。
(1) All Convolution Net [10]
大量的卷积神经网络均采用了相似的设计方式,即使用可变的卷积层、池化层、再加一些小数量的全连接层。在如何增强这种设计方式下的网络模型的性能上,很多人进行了不同的探索:1)使用更复杂的激活函数,使用改善的正则化(regularization),以及利用标签信息进行layer-wise的预训练 ;2)使用不同的CNN架构 。All Convolution Net的作者通过在不同的数据集上进行实验后,发现仅仅使用卷积层的网络结构并不会对物体检测的性能产生影响,池化层的存在并非必要,可以使用步长较大的卷积层进行替代。因此,All Convolution Net抛弃了以往CNN网络中的池化层和全连接层,通过使用步长更大的卷积层来代替池化以及使用卷积核为1的卷积层来代替全连接层。
对于池化层的作用现在还很难给出比较完整的解释,一般假定池化层可以通过如下三个方面来对CNN的性能产生帮助:1)p-norm(p范数)使CNN的表示更具不变性(invariance);2)降维使高层能够覆盖输入层的更多部分(receptive field);3)池化的feature-wise特性能够使得优化更为容易。假设第2)点,即降维对与CNN的性能提升至关重要,那么我们可以通过使用如下两种方法,来代替池化层取得相似的降维效果:1)直接移除池化层并增大卷积层的步长;2)使用步长大于1的卷积层来代替池化层。第1)种方法等价于池化操作但仅考虑了顶部左侧的特征响应,因而可能会降低检测的准确率。第二种则没有这种缺陷。
最终All Convolution Net模型相较于以往CNN模型的不同之处有:1)使用stride大于1的卷积层代替以往CNN中的池化层(下采样层);2)使用filter大小为1*1的卷积层代替全连接层(减少参数和计算量)。其在cifar-10和cifar-100上取得了很好的效果,见下图。

这里有一个值得注意的地方是,All Convolution Net和 Fully Convolution Net [20]它们的中文翻译都叫做“全卷积网络”,但是他们是有区别的,区别在于前者抛弃了池化层和全连接层,而后者保留了池化层而丢弃了全连接层。

(2) SqueezeNet[11]
SqueezeNet遵循了三个设计原则:1)使用更小的11的卷积核来代替33的卷积核。类似于GoogleNet[5]以及ResNet[6]设计中的33卷积来代替AlexNet中的77卷积的思路,SqueezeNet进一步用11卷积代替了33卷积。为了保证不影响识别的精度,因此在SqueezeNet中并不是完全的代替,而是进行了部分的替换。2)减少输入33卷积的特征图数量。如果是conv1到conv2这样的直接连接,实际上是不太好减少输入到conv2的特征图的数量的,在SqueezeNet中通过利用11卷积的升维或降维的作用,采用11卷积生成新的数量的特征图,然后将他们接入到33的卷积,进而达到目标。在SqueezeNet中将这种思路封装成了一个Fire Modeule, 见下图。3)减少pooling。在(1)中的All Convolution Net,GoogleNet以及ResNet中都发现,适当的减少pooling操作能够得到比较好的效果,因此在SqueezeNet中只是进行了3次max pooling和1次global pooling。

基于上述的三个设计原则,SqueezeNet在ImageNet上与AlexNet以及其他的一些模型压缩方法进行了对比,在准确率差不多的情况下,SqueezeNet模型参数数量显著降低了,如下图所示。

但是,Squeeze Net并没有在模型参数数量与模型计算效率之间做很好的trade-off,见下图,了解更多可访问https://pjreddie.com/darknet/tiny-darknet/ 。接下来,我们将分析两个在参数数量与计算效率间有比较好的trade-off的模型MobileNet[12]和ShuffleNet[13]。

(3) MobileNet[12]
MobileNet提出了一种depth-wise separable convolution卷积的方式来代替传统卷积的方式, depth-wise separable convolution包含两种操作:1)depth-wise convolution;2)point-wise convolution。首先提出depth-wise convolution这种卷积方式的是论文[21],这种卷积方式的好处是减少参数数量的同时也提升了计算效率。不同于传统的卷积计算,将一个卷积核在所有的输入通道上做卷积操作,在depth-wise convolution中一个卷积核只在一个输入通道上进行卷积。但是depth-wise convolution只是对输入通道进行单独的特征计算,并没有将他们结合起来计算特征。因此,为了产生一些联合特征,增加了一层网络采用1*1卷积来对depth-wise convolution生成的特征之间进行一个线性组合,这就是poit-wise convolution。

MobileNet 的网络结构共 28 层,没有采用池化的方式进行下采样,而是利用 depth-wise convolution 的时候将步长设置为 2,达到下采样的目的。相较于 GoogLeNet,在同一个量级的参数情况下,但是在运算量上却小于 GoogLeNet 一个量级,同时也保证了较高的准确率,见下图。这些都是得益于包含depth-wise convolution以及point-wise convolution的depth-wise separable convolution。

(4) ShuffleNet[13]
ShuffleNet可以被看作是从MobileNet发展而来的。首先,ShuffleNet的作者发现point-wise convolution这种操作实际上是非常耗时的,为了能够高效的在输入特征图间建立信息流通,他们基于group convolution 提出了一种channel shuffle的操作。通过利用group convolution和channel shuffle这两个操作来设计卷积神经网络模型,在减少了参数的同时也能够有效提高计算效率。
Group convolution 是一组卷积核负责一组输入通道,也就是每组通道只被一组卷积核卷积。那depth-wise convolution 其实是可以看成是一个特殊的 group convolution,即每一个通道是一组。Group convolution早在AlexNet中就已经出现了,当时是因为硬件限制而采用分组卷积的。之后在 2016 年的 ResNeXt [9] 中,也表明采用 group convolution 可以获得高效的网络。由于基于不同组计算出来的特征图之间是没有信息流通的,这会影响网络的表达,为了建立组间的信息流通,channel shuffle操作就被引入进来。Channel shuffle操作实际上是对group convolution操作计算出来的特征图组进行一个重组,也就是从各个特征图组中随机的选择一个特征图,进而构成新的特征图组。每一组这种新的特征图组中都包含了旧的特征图组中的信息的,也就是在旧的特征图组间建立了信息流通。同时,channel shuffle操作也避免了MobileNet中的point-wise convolution的计算量。Channel shuffle操作的略缩图如下所示。

ShuffleNet论文中采用了 Complexity (MFLOPs) 指标,在相同的 Complexity (MFLOPs) 下,对ShuffleNet 和各个网络以及特别的与 MobileNet 进行了对比,由于 ShuffleNet 相较于 MobileNet 少了point-wise convolution,所以效率大大的提高了,同时也取得state-of-the-art的准确率,见下图。

4 总结

从上述4种轻量级的网络模型的实验比较种可以看出,基于不同的卷积计算方式构造新的网络结构这个方向是非常有潜力的,而且现阶段已有的一些方法与一些complex CNN模型相比,也基本能够达到state-of-the-art的性能。此外,从上述4种网络结构的设计中,我们也可以得到如下的一些设计Light Weight CNN模型的经验:
1) 减少池化操作;
2) 使用较小尺度的卷积核;
3) 采用depth-wise convolution是设计轻量化模型的非常重要的技术,但是要注意解决信息不流通的问题。
最后,由于水平有限,出错之处,还请多多指教!

备注: 了解更多请访问:http://edu.51cto.com/course/14030.html

Reference

[1] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton, “ImageNet Classification with Deep Convolutional Neural Networks,” in Advances in Neural Information Processing Systems (NIPS), pages 1097–1105, 2012
[2] K. Chatfield, K. Simonyan, A. Vedaldi, and A. Zisserman, “Return of the Devil in the Details: Delving Deep into Convolutional Nets,” in British Machine Vision Conference (BMVC), 2014.
[3] Karen Simonyan and Andrew Zisserman, “Very Deep Convolutional Networks for Large-Scale Image Recognition,” in CoRR, 2014. URL http://arxiv.org/abs/1409.1556.
[4] Artem Babenko, Anton Slesarev, Alexandr Chigorin, and Victor Lempitsky, “Neural Codes for Image Retrieval,” in European Conference on Computer Vision (ECCV), volume 8689, pages 584–599, 2014.
[5] Szegedy C, Liu W, Jia Y, Sermanet P, Reed S, Anguelov D, Erhan D, Vanhoucke V, Rabinovich A, “Going deeper with convolutions,” in CVPR, 7-12 June 2015, doi: 10.1109/CVPR.2015.7298594.
[6] He K, Zhang X, Ren S, Sun J, “Deep residual learning for image recognition,” in Computer Vision and Pattern Recognition, 2016.
[7] C. Szegedy, S. Ioffe, V. Vanhoucke, and A. Alemi, “Inceptionv4, inception-resnet and the impact of residual connections on learning,” arXiv preprint arXiv:1602.07261, 2016.
[8] C. Szegedy, V. Vanhoucke, S. Ioffe, J. Shlens, and Z. Wojna, “Rethinking the inception architecture for computer vision,” in Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 2818–2826, 2016.
[9] S. Xie, R. Girshick, P. Doll′ar, Z. Tu, and K. He, “Aggregated residual transformations for deep neural networks,” arXiv preprint arXiv:1611.05431, 2016.
[10] J. T. Springenberg, A. Dosovitskiy, T. Brox, and M. A. Riedmiller, “Striving for simplicity: The all convolutional net,” in CoRR, vol. abs/1412.6806, 2014.
[11] F. N. Iandola, S. Han, M. W. Moskewicz, K. Ashraf, W. J. Dally, and K. Keutzer, “Squeezenet: Alexnet-level accuracy with 50x fewer parameters and< 0.5 mb model size,” in ICLR, 2017.
[12] A. G. Howard, M. Zhu, B. Chen, D. Kalenichenko, W. Wang, T. Weyand, M. Andreetto, and H. Adam, “Mobilenets: Efficient convolutional neural networks for mobile vision applications,” in CVPR, 2017.
[13] Zhang X, Zhou X, Lin M, and Sun J, “Shufflenet: An extremely efficient convolutional neural network for mobile devices,” in CVPR 2017. arXiv preprint arXiv:1707.01083
[14] M. Jaderberg, A. Vedaldi, and A. Zisserman, “Speeding up convolutional neural networks with low rank expansions,” arXiv preprint arXiv:1405.3866, 2014.
[15] X. Zhang, J. Zou, X. Ming, K. He, and J. Sun, “Efficient and accurate approximations of nonlinear convolutional networks,” in Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 1984–1992, 2015.
[16] J. Wu, C. Leng, Y. Wang, Q. Hu, and J. Cheng, “Quantized convolutional neural networks for mobile devices,” arXiv preprint arXiv:1512.06473, 2015.
[17] S. Han, H. Mao, and W. J. Dally, “Deep compression: Compressing deep neural network with pruning, trained quantization and huffman coding,” in CoRR, abs/1510.00149, 2, 2015.
[18] M. Rastegari, V. Ordonez, J. Redmon, and A. Farhadi, “Xnornet: Imagenet classification using binary convolutional neural networks,” in European Conference on Computer Vision, pages 525–542. Springer, 2016.
[19] Luo JH, Wu J, and Lin W, “Thinet: A filter level pruning method for deep neural network compression,” in ICCV 2017.
[20] Evan Shelhamer, Jonathan Long, Trevor Darrell, “Fully Convolutional Networks for Semantic Segmentation,” in CVPR, 2015.
[21] L. Sifre, “Rigid-motion scattering for image classification,” hD thesis, Ph. D. thesis, 2014.
[22] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei, “Imagenet: A large-scale hierarchical image database,” in Proc. CVPR, 2009.

原文地址:http://blog.51cto.com/remyspot/2159218

时间: 2024-11-06 07:14:56

Light Weight CNN模型的分析与总结的相关文章

经典CNN模型计算量与内存需求分析

表1 CNN经典模型的内存,计算量和参数数量对比 AlexNet VGG16 Inception-v3 模型内存(MB) >200 >500 90-100 参数(百万) 60 138 23.2 计算量(百万) 720 15300 5000 1. CNN模型具体分析(以AlexNet网络模型为例) 1.1 网络结构 图1 AlexNet网络结构 AlexNet有5个卷积层和3个全连接层 C1:96×11×11×3 (卷积核个数/宽/高/深度)               34848个 C2:25

自然语言处理中CNN模型几种常见的Max Pooling操作

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型.图1展示了在NLP任务中使用CNN模型的典型网络结构.一般而言,输入的字或者词用Word Embedding的方式表达,这样本来一维的文本信息输入就转换成了二维的输入结构,假设输入X包含m个字符,而每个字符的Word Embedding的长度为d,那么输入就是m*d的二维向量. 图1 自然语言处理中CNN模型典型网络结构 这里可以

总结近期CNN模型的发展(一)---- ResNet [1, 2] Wide ResNet [3] ResNeXt [4] DenseNet [5] DPNet [9] NASNet [10] SENet [11] Capsules [12]

总结近期CNN模型的发展(一) from:https://zhuanlan.zhihu.com/p/30746099 余俊 计算机视觉及深度学习 1.前言 好久没有更新专栏了,最近因为项目的原因接触到了PyTorch,感觉打开了深度学习新世界的大门.闲暇之余就用PyTorch训练了最近在图像分类上state-of-the-art的CNN模型,正好在文章中总结如下: ResNet [1, 2] Wide ResNet [3] ResNeXt [4] DenseNet [5] DPNet [9] N

对CNN模块的分析

对 CNN 模块的分析,该论文(Systematic evaluation of CNN advances on the ImageNet)已经做过了,里面的发现是非常有帮助的: 使用没有 batchnorm 的 ELU 非线性或者有 batchnorm 的 ReLU. 使用一个学习到的 RGB 的彩色空间转换. 使用线性学习率衰退策略. 使用平均和最大池化层的和. 使用大约 128 到 256 的 mini-batch 大小.如果这对你的 GPU 而言太大,将学习率按比例降到这个大小就行. 使

前端模型系统建模分析

前端模型系统建模分析 前言: 接触Angular技术也有一年多了,来Newegg也刚好一年了,在这一年里,学到了不少关于前端技术的精髓,但是让我最兴奋的,莫过于发现了模型系统,之所以认为它神奇,是因为一切复杂问题其实都可以通过模型系统来很好的进行抽象建模,使得你的工作可是事半功倍. 一.首先我想谈一下对angular的认识: 1).AngularJs通过数据双向绑定使得view层和Controller进行很方便的数据操作,并带来很好的用户体验. 2).AngularJs使用指令directive

电商系统中的商品模型的分析与设计&mdash;续

前言     在<电商系统中的商品模型的分析与设计>中,对电商系统商品模型有一个粗浅的描述,后来有博友对货品和商品的区别以及属性有一些疑问.我也对此做一些研究,再次简单的对商品模型做一个介绍. 从SPU.SKU开始     首先我们需要澄清上篇中的这两个概念,在上篇文章中"货品"是指一种概念物品,这种物品并不是一个具体的实物,当它具备具体的属性.价格时,才是一种实物,也就是商品."商品"就是库存中一个具体的实物.例如:iphone6,就是一种货品,但用户

几种经典的网络服务器架构模型的分析与比较

原文出处:http://blog.csdn.net/lmh12506/article/details/7753978 前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用:事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序.ftp 服务器程序等.相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率. 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,

Windows五种IO模型性能分析和Linux五种IO模型性能分析

Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blog.csdn.net/jay900323/article/details/18140847 重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数.当使用重叠I/O模型时,可以选择使用不同的完成通知方式. 采用事件对象通知的重叠I/O模型是不可伸缩的,因为针对发出WSAWa

TT和chrome执行模型对比分析

老大让写一篇高大上的博文,那么如何才能高大上呢?从某种角度讲只要迎合老大的口味给他一篇重口味的岛国动作片剖析就能轻松过关: 从程序员角度讲,能写出高大上的范围有很多,如程序架构,算法分析.编程语言理解.操作系统理解.知名开源程序的原创分析.优秀博文的翻译等都能吸引许多同学的兴趣.今天我再教一招让博文高大上有营养的捷径就是攀高枝,用你现有的程序框架和知名的开源架构做比较剖析.今天我选择走捷径,为同学们来分析下我最近在负责的一款im客户端产品--TeamTalk(简称TT)和chorme执行模型的区