机器视觉:MobileNet 和 ShuffleNet
虽然很多CNN模型在图像识别领域取得了巨大的成功,但是一个越来越突出的问题就是模型的复杂度太高,无法在手机端使用,为了能在手机端将CNN模型跑起来,并且能取得不错的效果,有很多研究人员做了很多有意义的探索和尝试,今天就介绍两个比较轻量级的模型 mobile net 和 shuffle net。
在介绍这几个轻量型的网络之前,我们先来看看,为什么卷积神经网络的运算功耗这么大。
卷积神经网络,顾名思义,就是会有很多的卷积运算,而卷积神经网络中,最费时间的就是其中的卷积运算。我们知道,一张 h×w" role="presentation" style="position: relative;">h×wh×w 的图像,与一个 k×k" role="presentation" style="position: relative;">k×kk×k 的卷积核做卷积卷积运算,需要 h×w×k×k" role="presentation" style="position: relative;">h×w×k×kh×w×k×k 这么多次的运算,而 CNN 中,随便一个卷积层, 都会有几十甚至上百个 feature map, 假设卷积层 l1" role="presentation" style="position: relative;">l1l1 含有 c1" role="presentation" style="position: relative;">c1c1 个 feature map,即通道数为 c1" role="presentation" style="position: relative;">c1c1, 每个 feature map 的大小为 h1×w1" role="presentation" style="position: relative;">h1×w1h1×w1, 卷积核的大小为 k×k" role="presentation" style="position: relative;">k×kk×k,假设 l2" role="presentation" style="position: relative;">l2l2 的 feature map 大小与 l1" role="presentation" style="position: relative;">l1l1 一样,通道数为 c2" role="presentation" style="position: relative;">c2c2 ,l2" role="presentation" style="position: relative;">l2l2 中每个 feature map 上的一个像素点,都是由 l1" role="presentation" style="position: relative;">l1l1 上的 feature map 与 卷积核做卷积运算得来的。这样,总共需要的运算次数为:
Mobile-Net V1
为了减少运算量,Mobile-net V1 利用了 depth-wise 的概念,我们都知道 pooling 层的运作机理,input feature map 和 output feature map 是 一 一对应的,depth-wise convolution 也是类似的道理,做卷积的时候不再把 input feature map 进行线性组合了,而是采取一 一对应的方式,这样卷积的运算次数就变成了:
也就是说,我input 有 c1" role="presentation" style="position: relative;">c1c1 个 feature map,卷积之后,还是有 c1" role="presentation" style="position: relative;">c1c1 个 feature map,运算量减少了很多。
不过,也带来一个问题,这样卷积得到的 feature map 之间没有任何信息融合,这肯定不利于特征提取的,所以在 depth-wise 卷积运算后面,会再接一个 1×1" role="presentation" style="position: relative;">1×11×1 的卷积运算,所以总的运算次数是:
V1 主要的模块如下图所示,就是利用 depth-wise 卷积替换了常规的卷积运算,为了让得到的 feature map 进行信息融合,后面又接了一个 1×1" role="presentation" style="position: relative;">1×11×1 的卷积。
Mobile-Net V2
Mobile-Net V1 推出来之后,Google 又推出了 Mobile-Net V2,V2 在 residual-block 里面做文章,利用 depth-wise convolution 和 1×1" role="presentation" style="position: relative;">1×11×1 的卷积,简单来说,就是对 input feature map,先利用 1×1" role="presentation" style="position: relative;">1×11×1 进行通道扩展,这样一扩展,可以增加通道数,提升卷积层特征的表示能力,接着再利用 depth-wise convolution 做卷积运算,这样不会增加太多的运算量,又能利用很多的通道,最后再做一个通道压缩,一压缩,往后传的 feature map 的通道数并不会增加,论文中也给出了示意图:
Shuffle-Net
shuffle-net 这个网络模型,是利用了 group 卷积的概念,与 depth-wise 有点像,只不过,depth-wise 是 feature map 一 一对应的,而 group 卷积是将每个卷积层的 feature map 分成几个组,每个组之间没有交叉,不过组内的 feature map 做卷积的时候和常规的卷积运算是一样的,所以 group 卷积的复杂度应该是介于常规卷积核 depth-wise 卷积之间的,shuffle-net 的创新之处在于,group 卷积之后,为了增加组与组之间的 feature map的通信,提出了一个 shuffle channel 的技术,就是将 group 卷积之后 feature map 打乱,乱序连接到下一层,如下图所示:
通过 group 卷积,可以降低运算量,通过 channel shuffle,可以增加 feature map之间的信息融合,所以 shuffle-net 也能在提升运算效率的同时,保持一定的特征学习能力。论文也给出几种不同的 block,
上图 (a) 是利用 depth-wise 卷积,(b) 和 (c) 都是 shuffle-net 的模块,不同的就是卷积的 stride 不同,所以最后的处理方式也不太一样。
参考文献
1: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision
Applications
2: MobileNetV2: Inverted Residuals and Linear Bottlenecks
3: ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile
Devices
机器视觉:MobileNet 和 ShuffleNet的更多相关文章
- 图像分类丨浅析轻量级网络「SqueezeNet、MobileNet、ShuffleNet」
前言 深度卷积网络除了准确度,计算复杂度也是考虑的重要指标.本文列出了近年主流的轻量级网络,简单地阐述了它们的思想.由于本人水平有限,对这部分的理解还不够深入,还需要继续学习和完善. 最后我参考部分列 ...
- 纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet.MobileNet.ShuffleNet.Xception. SqueezeNet https://arxiv.org/p ...
- 面向移动端的轻量级神经网络模型mobilenet、ShuffleNet
翻译: http://baijiahao.baidu.com/s?id=1565832713111936&wfr=spider&for=pc http://baijiahao.baid ...
- 深度学习与CV教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- mobienet, shufflenet
参考github上各位大神的代码 mobilenet和shufflenet,实现起来感觉还是各种问题. mobilenet目前使用的代码来自这里:https://github.com/BVLC/caf ...
- CNN 模型压缩与加速算法综述
本文由云+社区发表 导语:卷积神经网络日益增长的深度和尺寸为深度学习在移动端的部署带来了巨大的挑战,CNN模型压缩与加速成为了学术界和工业界都重点关注的研究领域之一. 前言 自从AlexNet一举夺得 ...
- Feature Extractor[content]
0. AlexNet 1. VGG VGG网络相对来说,结构简单,通俗易懂,作者通过分析2013年imagenet的比赛的最好模型,并发现感受野还是小的好,然后再加上<network in ne ...
- mobile deeplearning
框架: 腾讯ncnn https://github.com/Tencent/ncnn 百度mobile-deep-learning https://github.com/baidu/mobile-de ...
- 【转载】NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法
原文:NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩.机器学习及最优化算法 导读 AI领域顶会NeurIPS正在加拿大蒙特利尔举办.本文针对实验室关注的几个研究热点,模型压缩.自 ...
随机推荐
- 调用 js 生成图片二维码
一.js 生成二维码: 首先,需要引用 jQuery 和 jquery.qrcode.js.然后: //生产二维码 $("#qrcodeCanvas").qrcode({ rend ...
- win10释放的wifi热点手机连不上
直入正题吧…… 在win10的搜索框里输入ser,找到“windows服务”选项,点击进入,如下图 找到下图所示的两个服务,然后,右键,属性,启动类型改为自动,然后点确定,确定完以后,再右键,点启动, ...
- mlp_clf_mnist_test
import os os.environ['CUDA_VISIBLE_DEVICES'] = "0" from mlp_clf import MLPClassifier impor ...
- 八大排序算法——快速排序(动图演示 思路分析 实例代码Java 复杂度分析)
一.动图演示 二.思路分析 快速排序的思想就是,选一个数作为基数(这里我选的是第一个数),大于这个基数的放到右边,小于这个基数的放到左边,等于这个基数的数可以放到左边或右边,看自己习惯,这里我是放到了 ...
- 启动Cognos时报0106错误
1. 问题描述 启动Cognos失败,报错代码为0106. 2. 问题分析 是jdk版本不兼容. 3. 解决方案 方案一:更换jdk1.6,可以使用免安装版,不需要卸载原有的jdk将java_home ...
- C++学习笔记(一):C++基础知识
一.C++基础知识 新的数据类型 C语言中的数据类型 C++中新的数据类型 思考:新的数据类型有什么好处?请看下面的代码: 可以见得:新的类型使整个程序更加简洁,程序变得易读易懂!这个就是bool类型 ...
- C#中自定义高精度Timer定时器的实例教程
Timer 用于以用户定义的事件间隔触发事件.Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理.它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用 ...
- 刷seed有感
今天又把seed刷了一遍 昨天去了基佬他们公司.第一次去他们公司.米虫科技,在重庆算是一家中型公司吧. 他去公司加班写一个游戏的封面,第一次感觉ui的不给设计图真的很坑.一个页面所有东西 自己凭感觉写 ...
- 考研计算机复试(广东工业大学C语言复试2018笔试题)(精华题选)
1.obj文件是:(二进制文件) 2.函数func(float x){printf("%f",x+x);}的类型是() A.void B.int类型 C.无法确定 3.若有定义:i ...
- ESP32搭建3.ubuntu14.04下搭建esp32开发环境 (10-5)
硬件为乐鑫出品的ESP32一款集成了wifi和蓝牙的集成模块. 1.首先ctrl+alt+t打开终端,sudo -s选择用root权限登陆 . 2. 输入指令:sudo apt-get install ...