MobileNet
MobileNet (Efficient Convolutional Neural Networks for Mobile Vision Applications)——Google CVPR-2017
MobileNet引入了传统网络中原先采用的group思想,即限制滤波器的卷积计算只针对特定的group中的输入,从而大大降低了卷积计算量,提升了移动端前向计算的速度。
1.1 卷积分解
MobileNet借鉴factorized convolution的思想,将普通卷积操作分为两部分:
- Depthwise Convolution,即逐通道的卷积,一个卷积核负责一个通道,一个通道只被一个卷积核滤波;其中M是输入通道数,DK是卷积核尺寸,则这里有 M 个 DK*DK 的卷积核;

- Pointwise convolution,将 depth-wise convolution 得到的 feature map 再「串」起来,其实就是:输出的每一个 feature map 要包含输入层所有 feature map 的信息。然而仅采用 depth-wise convolution,是没办法做到这点,因此需要 pointwise convolution 的辅助。
其中输入的 feature map 有 M 个,输出的 feature map 有 N 个。

+Depthwise convolution的计算复杂度为 DKDKMDFDF,其中DF是卷积层输出的特征图的大小。
+Pointwise Convolution的计算复杂度为 MNDFDF
+上面两步合称depthwise separable convolution
+标准卷积操作的计算复杂度为DKDKMNDFDF
因此,通过将标准卷积分解成两层卷积操作,可以计算出理论上的计算效率提升比例:
对于3x3尺寸的卷积核来说,depthwise separable convolution在理论上能带来约8~9倍的效率提升。
1.2 模型架构
MobileNet的卷积单元如上图所示,每个卷积操作后都接着一个BN操作和ReLU操作。在MobileNet中,由于3x3卷积核只应用在depthwise convolution中,因此95%的计算量都集中在pointwise convolution 中的1x1卷积中。而对于caffe等采用矩阵运算GEMM实现卷积的深度学习框架,1x1卷积无需进行im2col操作,因此可以直接利用矩阵运算加速库进行快速计算,从而提升了计算效率。
小结
- 核心思想是采用 depth-wise convolution 操作,在相同的权值参数数量的情况下,相较于 standard convolution 操作,可以减少数倍的计算量,从而达到提升网络运算速度的目的。
- depth-wise convolution 的思想非首创,借鉴于 2014 年一篇博士论文:《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》
- 采用 depth-wise convolution 会有一个问题,就是导致信息流通不畅,即输出的 feature map 仅包含输入的 feature map 的一部分,在这里,MobileNet 采用了 point-wise convolution 解决这个问题。在后来,ShuffleNet 采用同样的思想对网络进行改进,只不过把 point-wise convolution 换成了 channel shuffle,然后给网络美其名曰 ShuffleNet,欲知后事如何,请看 2.3 ShuffleNet
MobileNet的更多相关文章
- [论文阅读] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (MobileNet)
论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 本文提出的模型叫Mobi ...
- 轻量化卷积神经网络MobileNet论文详解(V1&V2)
本文是 Google 团队在 MobileNet 基础上提出的 MobileNetV2,其同样是一个轻量化卷积神经网络.目标主要是在提升现有算法的精度的同时也提升速度,以便加速深度网络在移动端的应用.
- 轻量级卷积神经网络——MobileNet
谷歌论文题目: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 其他参考: CNN ...
- AI MobileNet
MobileNet,是针对移动和嵌入式设备的一类高效模型,基于流线型(streamlined)架构,使用深度可分离卷积(depthwise separable convolution)来构建轻量级深度 ...
- 机器视觉:MobileNet 和 ShuffleNet
虽然很多CNN模型在图像识别领域取得了巨大的成功,但是一个越来越突出的问题就是模型的复杂度太高,无法在手机端使用,为了能在手机端将CNN模型跑起来,并且能取得不错的效果,有很多研究人员做了很多有意义的 ...
- mobilenet之Depthwise +Pointwise
我们知道,mobilenet是适用于移动端的深度学习网络,主要优点是参数少.模型小.准确率相比一些传统卷积损失少等特点. mobileNet之所以这么ok,是因为引入了Depthwise +Point ...
- [Localization] MobileNet with SSD
先来一波各版本性能展览: Pre-trained Models Choose the right MobileNet model to fit your latency and size budget ...
- [Tensorflow] Object Detection API - retrain mobileNet
前言 一.专注话题 重点话题 Retrain mobileNet (transfer learning). Train your own Object Detector. 这部分讲理论,下一篇讲实践. ...
- 验证resneXt,densenet,mobilenet和SENet的特色结构
简介 图像分类对网络结构的要求,一个是精度,另一个是速度.这两个需求推动了网络结构的发展. resneXt:分组卷积,降低了网络参数个数. densenet:密集的跳连接. mobilenet:标准卷 ...
- TensorFlow基础笔记(13) Mobilenet训练测试mnist数据
主要是四个文件 mnist_train.py #coding: utf-8 import os import tensorflow as tf from tensorflow.examples.tut ...
随机推荐
- 逃生dp
蒜头君在玩一款逃生的游戏.在一个 n \times mn×m的矩形地图上,蒜头位于其中一个点.地图上每个格子有加血的药剂,和掉血的火焰,药剂的药效不同,火焰的大小也不同,每个格子上有一个数字,如果格子 ...
- Extjs DateField Bug 当format为年月'Y-m',在当前月(30、31号)选择其他偶数月会乱跳的问题解决方案
Ext.form.WMDateField = Ext.extend(Ext.form.DateField, { safeParse : function(value, format) { if (/[ ...
- 转:PHP获取浏览器类型及版本号
function getBrowser(){ $agent=$_SERVER["HTTP_USER_AGENT"]; if(strpos($agent,'MSIE')!==fals ...
- ajax——实现三级联动下拉列表
数据库: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- SAN和NAS的区别: 层次不一样
SAN : STORAGE AREA NETWORK 存储区域网络 NAS : NETWORK ATTACHED STORAGE 网络附加存储 NAS不一定是盘阵,一台普通的主机就可以做出NAS, ...
- dp + 状态压缩 - Codeforces 580D Kefa and Dishes
Kefa and Dishes Problem's Link Mean: 菜单上有n道菜,需要点m道.每道菜的美味值为ai. 有k个规则,每个规则:在吃完第xi道菜后接着吃yi可以多获得vi的美味值. ...
- qtcreator 中文乱码
qt输入法不能用,ui中不能显示中文,开发板不能显示中文,这几个一直困扰这我,网上查找资料,在代码中添加各种支持,都没有解决问题.今天刚好解决了,记录于此. 参考链接 http://blog.163. ...
- css字体属性相关。
出处:CSS 参考手册 http://www.w3school.com.cn/cssref/index.asp text-decoration 属性 说明:这个属性允许对文本设置某种效果,如加下 ...
- [转]seajs详解
[转]seajs详解 SeaJS 是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(kk:模块可按需加载或全部加载). SeaJS ...
- 一个格式化字符串的函数ToString
A Formatting String Function 原文:http://flounder.com/tostring.htm CString ToString(LPCTSTR fmt, ...) ...