论文笔记——MobileNets(Efficient Convolutional Neural Networks for Mobile Vision Applications)
论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
- MobileNet由Google提出的一种新的卷积计算方法,旨在加速卷积计算过程。
- 为了减小网络模型大小,提出了两种比较暴力的裁剪方法。
(1) 直接对channel进行裁剪,这种随机砍掉一些channel,也太暴力了吧,砍多了效果肯定不好,想想都知道。
(2) 减少输入图像的分辨率,也就是减小输入的尺寸大小。
- 我们还是关注新的卷积计算方法,要做压缩的话,还是另辟蹊径。

1. Full convolution VS. Depthwise separable convolution
1.1 Full convolution

- M表示输入的channel, N表示输出的channel,Dk表示kernel size.
- 我们可以看到输出的每一个channel,都跟所有的输入channel有关,也就是说,对于输出的一个channel,都是M个kernel与M个channel卷积以后的求和结果。
- 差别就在这里!在depthwise separable中,每一个输出的channel,只和一个输入的channel有关。
1.2 Depthwise separable convolution

输入M个channel,那么输出也是M个channel,每一个channel都是由一个kernel在一个channel卷积以后得到的结果,不在是和所有的输入相关了。这也就是为什么名字叫做depthwise separable(深度级的分离,channel的分离)。
但是我们发现输出只有M个channel,而我们想要输出N个channel,这个时候我们应该想到1*1的convolution,这个时候的卷积就是full convolution。这个时候输出的每一个channel都和输入有关了,相当于输入的加权求和。所以1x1的卷积有联合(combine)的作用。
2. 计算量对比
- 只要理解了两个的差别,不难算出计算直接的差别。

- Dk表示kernel size, M表示输入的channel,也就是feature map的个数,N表示输出的channel。Df表示feature map的大小,也就是width和height, 上面这个式子再一次验证了我们上面说的,输出的每一个channel都和输入的所有channel有关。

求和的左半部分,表示depthwise separable的计算量,可以看到输出为M个channel,每个输出channel只和一个channel有关。
求和的有半部分,表示1x1 pointwise convolution,可以看到每一个输出channel,都和M个输入有关(M个输入的加权求和)。
计算量较少比例

3. 模型压缩

上面公式可以看到直接对输入的M个channel进行的压缩(随机采样)

上面公式可以看到对不仅对输出的channel进行了采样,对输入图像的分辨率也进行了减小。
4. 对比实验
4.1 参数量的对比

4.2 实验结果

5. 实现
- Tensorflow的实现: https://github.com/tensorflow/models/blob/master/slim/nets/mobilenet_v1.md
- Caffe实现(trick): https://github.com/shicai/MobileNet-Caffe
(通过caffe 的group参数来实现depthwise的操作的,由于实现的问题和cuda/cudnn对其支持得不好,训练起来十分慢。前向预测时在CPU上的耗时大概是googlenet的70%。这个数据参考一篇博文的,未实践过。) - Pytorch实现:https://github.com/marvis/pytorch-mobilenet
6. 总结
- 根据实践经验的总结,这种新的卷积计算方式,对运算速度的改进还是比较明显的,精度影响不是很大,至于文中说的两个裁剪方法,我觉得还是慎重使用比较好。
- 现在市面上已经有很多裁剪方法了,没必要用这么暴力的进行裁剪来压缩模型大小。
论文笔记——MobileNets(Efficient Convolutional Neural Networks for Mobile Vision Applications)的更多相关文章
- [论文阅读] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (MobileNet)
论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 本文提出的模型叫Mobi ...
- [论文理解] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications Intro MobileNet 我 ...
- 【论文翻译】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文链接:https://arxi ...
- 深度学习论文翻译解析(十七):MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
论文标题:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文作者:Andrew ...
- 【网络结构】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文解析
目录 0. Paper link 1. Overview 2. Depthwise Separable Convolution 2.1 architecture 2.2 computational c ...
- Paper | MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
目录 1. 故事 2. MobileNet 2.1 深度可分离卷积 2.2 网络结构 2.3 引入两个超参数 3. 实验 本文提出了一种轻量级结构MobileNets.其基础是深度可分离卷积操作. M ...
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
1. 摘要 作者提出了一系列应用于移动和嵌入式视觉的称之为 MobileNets 的高效模型,这些模型采用深度可分离卷积来构建轻量级网络. 作者还引入了两个简单的全局超参数来有效地权衡时延和准确率,以 ...
- 【MobileNet-V1】-2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications-论文阅读
2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications Andrew H ...
- 深度学习论文翻译解析(六):MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Appliications
论文标题:MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Appliications 论文作者:Andrew ...
随机推荐
- 【Loadrunner】Loadrunner Vuser 两种运行方式【error:not enough memory解决方案】
Loadrunner Vuser 两种运行方式 报错如下解决方案: 报错原因:都消息内存,之前用户是按线程跑,一个进程开了多个线程,其中有部分内存是这些线程共享的,出错应该是内存出现冲突了不够用了.现 ...
- WordPress跳过语言包加载提高效率
WordPress 加载语言包是需要花费 0.1-0.5 秒不等的时间,所以如果 WordPress 前台可以不加载语言包,而主题中的一些文本直接写成中文,就可以加快网站的速度,并且又能保证后台的中文 ...
- TileMap地图
参考资料: http://8287044.blog.51cto.com/5179921/1045274 TileMap编辑器使用 1.认识TileMap TileMap是一款开源的地图编辑 ...
- 二进制协议 vs 文本协议
二进制协议 vs 文本协议 在服务器程序开发过程中,各个服务直接需要进行交互.这样就需要定义消息的协议,一般来说协议主要包括二进制协议和文本协议,下面就我在工作中用到的两种协议说说自己的看法. 1 二 ...
- GNU Make中文手册(一)
GNU Make 翻译:loverszhaokai 最新版文档请参考github: https://github.com/loverszhaokai/GNUMakeManual_CN 欢迎大家提出修改 ...
- 有意思的JSON.parse()、JSON.stringify()
前言 现在JSON格式在web开发中非常重要,特别是在使用ajax开发项目的过程中,经常需要将后端响应的JSON格式的字符串返回到前端,前端解析成JS对象值(JSON 对象),再对页面进行渲染. 在数 ...
- memcache分布式布置方案
利用hash算法 key->hash->取余%2 mod ->server=array()=>server[mod]算出是第几个memcache服务器
- HIT 2051
这题说的是 一辆汽车 每走一单位的距离就消耗一单位的燃料,然后,他要回城里去,当然他与城镇之间有n个加油站 ,他的油箱可以为 无穷大 ,这样分析后发现进不进汽油站 与 汽油站在哪无关 ,只与加油站的 ...
- Python 迭代器切片
函数itertools.islice() 正好适用于在迭代器和生成器上做切片操作 >>> def count(n): ... while True: ... yield n ... ...
- 查看.mobileprovision 详细信息
.mobileprovision 用诸如sublime 等工具是无法打开. 可以通过shell命令查看: security cms -D -i 某某.mobileprovision