基于移动端(手机或者嵌入式平台)的深度卷积网络实现的研究是目前比较热的一个研究方向,也是很有意思的一件事;MobileNet网络是谷歌的研究团队有针对的开发的轻量级、小型化的深度网络;可以使用在IOS或Android平台;

苹果的机器学习框架集成了目前主流的大多深度学习的应用,其中就有MobileNet的实现

https://github.com//likedan/Awesome-CoreML-Models;在Android的实现由基于TensFlow架构的MobileNet实现;

本文的主要内容是对Paper:MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications的翻译,要想在移动端使用好这个工具,就要对其架构有一定的了解:文章的核心思想就是对标准卷积的运算进行了改进,分为两步运算

以下内容转自:http://blog.csdn.net/wfei101/article/details/78310226

论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 
民间实现:caffe | Tensorflow 
官方代码:tensorflow/models

有tensorflow的实现: https://github.com/tensorflow/models/blob/master/slim/nets/mobilenet_v1.md

caffe也有人实现: https://github.com/shicai/MobileNet-Caffe,

前言

这篇论文是Google针对手机等嵌入式设备提出的一种轻量级的深层神经网络,取名为MobileNets。个人感觉论文所做工作偏向于模型压缩方面,核心思想就是卷积核的巧妙分解,可以有效减少网络参数。可能由于刚发布,谷歌还没有放出官方代码(Tensorflow),谷歌官方已经开源了这部分代码(2017.6.15),具体参见文中地址。另外,在Github上搜索“MolileNets”,可发现一些个人实现的代码,部分会提供训练好的模型。博主跑过其中的caffe模型,发现inference速度并没有怎么提升,看网上讨论,应该是caffe框架的问题,要想大幅提升速度,应该只能依赖Tensorflow框架了。

摘要

我们提供一类称为MobileNets的高效模型,用于移动和嵌入式视觉应用。 MobileNets是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网络。我们引入两个简单的全局超参数,在延迟度和准确度之间有效地进行平衡。这两个超参数允许模型构建者根据问题的约束条件,为其应用选择合适大小的模型。我们进行了资源和精度权衡的广泛实验,与ImageNet分类上的其他流行的网络模型相比,MobileNets表现出很强的性能。最后,我们展示了MobileNets在广泛的应用场景中的有效性,包括物体检测,细粒度分类,人脸属性和大规模地理定位。

引言和背景介绍

这部分是说,随着深度学习的发展,卷积神经网络变得越来越普遍。当前发展的总体趋势是,通过更深和更复杂的网络来得到更高的精度,但是这种网络往往在模型大小和运行速度上没多大优势。一些嵌入式平台上的应用比如机器人和自动驾驶,它们的硬件资源有限,就十分需要一种轻量级、低延迟(同时精度尚可接受)的网络模型,这就是本文的主要工作。

在建立小型和有效的神经网络上,已经有了一些工作,比如SqueezeNet,Google Inception,Flattened network等等。大概分为压缩预训练模型和直接训练小型网络两种。MobileNets主要关注优化延迟,同时兼顾模型大小,不像有些模型虽然参数少,但是也慢的可以。

MobileNets模型结构

深度可分解卷积

MobileNets模型基于深度可分解的卷积,它可以将标准卷积分解成一个深度卷积和一个点卷积(1 × 1卷积核)。深度卷积将每个卷积核应用到每一个通道,而1 × 1卷积用来组合通道卷积的输出。后文证明,这种分解可以有效减少计算量,降低模型大小。图2说明了标准卷积是如何进行分解的。

直观上来看,这种分解在效果上确实是等价的。比如,把上图的代号化为实际的数字,输入图片维度是11 × 11 × 3,标准卷积为3 × 3 × 3 ×16(假设stride为2,padding为1),那么可以得到输出为6 × 6 × 16的输出结果。现在输入图片不变,先通过一个维度是3 × 3 × 1 × 3的深度卷积(输入是3通道,这里有3个卷积核,对应着进行计算,理解成for循环),得到6 × 6 × 3的中间输出,然后再通过一个维度是1 × 1 × 3 ×16的1 ×1卷积,同样得到输出为6 × 6 × 16。以上解析还可以借助一幅经典的GIF图来理解,先放这里了。

接下来作者计算了这种分解可以多大程度上减少参数量。这里首先指出论文中存在的一处笔误,下图标注部分写错了,正确应为 DG×DG×N 。

首先是标准卷积,假定输入F的维度是 DF×DF×M ,经过标准卷积核K得到输出G的维度 DG×DG×N ,卷积核参数量表示为 DK×DK×M×N 。如果计算代价也用数量表示,应该为 DK×DK×M×N×DF×DF 。

现在将卷积核进行分解,那么按照上述计算公式,可得深度卷积的计算代价为 DK×DK×M×DF×DF ,点卷积的计算代价为 M×N×DF×DF 。

将二者进行比较,可得:

MobileNets使用了大量的3 × 3的卷积核,极大地减少了计算量(1/8到1/9之间),同时准确率下降的很少,相比其他的方法确有优势。

模型结构和训练

MobileNets结构建立在上述深度可分解卷积中(只有第一层是标准卷积)。该网络允许我们探索网络拓扑,找到一个适合的良好网络。其具体架构在表1说明。除了最后的全连接层,所有层后面跟了batchnorm和ReLU,最终输入到softmax进行分类。图3对比了标准卷积和分解卷积的结构,二者都附带了BN和ReLU层。按照作者的计算方法,MobileNets总共28层(1 + 2 × 13 + 1 = 28)。

MobileNet将95%的计算时间用于有75%的参数的1×1卷积,作者采用tensorflow框架进行训练,因为过拟合不太容易,所以数据增强和规则化用的不多。

宽度乘数

这里介绍模型的第一个超参数,即宽度乘数 α 。为了构建更小和更少计算量的网络,作者引入了宽度乘数 α ,作用是改变输入输出通道数,减少特征图数量,让网络变瘦。在 α 参数作用下,MobileNets某一层的计算量为:

其中, α 取值是0~1,应用宽度乘数可以进一步减少计算量,大约有 α2 的优化空间。

分辨率乘数

第二个超参数是分辨率乘数 ρ ,分辨率乘数用来改变输入数据层的分辨率,同样也能减少参数。在 α 和 ρ 共同作用下,MobileNets某一层的计算量为:

其中,ρ 是隐式参数,ρ 如果为{1,6/7,5/7,4/7},则对应输入分辨率为{224,192,160,128},ρ 参数的优化空间同样是 ρ2 左右。 表3可以看出两个超参数在减少网络参数的上的作用。

实验分析

模型选择

表4中,同样是MobileNets的架构,使用可分离卷积,精度值下降1%,而参数仅为1/7。

表5中,深且瘦的网络比浅且胖的网络准确率高3%。

模型收缩超参数

表6中,α 超参数减小的时候,模型准确率随着模型的变瘦而下降。

表7中,ρ 超参数减小的时候,模型准确率随着模型的分辨率下降而下降。

表8中,在ImageNet数据集上,将MobileNets和VGG与GoogleNet做了对比。

目标检测

这里的实验主要是将MobileNets作为目标检测网络Faster R-CNN和SSD的基底(base network),和其他模型在COCO数据集上进行了对比。(为什么不在VOC PASCAL上进行对比,应该更直观吧?也不给一个帧率,不知道速度怎么样)

MobileNet轻量级网络相关推荐

  1. 轻量级网络——MobileNet系列学习(理论篇)

    目录 一.MobileNetV1 1.1 Depthwise separable convolution(深度级可分离卷积) 参数对比 1.2 MobileNet网络结构 1.3 MobileNet网 ...

  2. 检测、分割用什么轻量级网络呢?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 由于深度学习的关系,计算机视觉领域发展迅速,各大榜单精度刷的很高, ...

  3. 14种轻量级网络综述 — 主干网络篇

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨VincentLee 来源丨晓飞的算法工程笔记 编辑丨极市平台 导读 早期的卷积神经很少考虑参数 ...

  4. MobileNetV1/V2/V3简述 | 轻量级网络

    MobileNet系列很重要的轻量级网络家族,出自谷歌,MobileNetV1使用深度可分离卷积来构建轻量级网络,MobileNetV2提出创新的inverted residual with line ...

  5. 轻量级网络 - PVANet SuffleNet

    一. PVANet 论文:PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection    [点击下载] C ...

  6. 轻量级网络综述 — 主干网络篇

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 轻量级网络的核心是在尽量保持精度的前提下,从体积和速度两方面对网络进行轻量化改造,本文对轻量级网络进 ...

  7. 轻量级网络--ShuffleNet论文解读

    ShuffleNet ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 原文地址: ...

  8. 『高性能模型』轻量级网络梳理

    墙裂推荐:那些Network能work的本质究竟是啥? SqueezeNet 轻量化网络:SqueezeNet 2017年的文章,和后面的几篇文章一对比思路显得比较老套:大量的1*1的卷积和少量的3* ...

  9. 轻量级网络——ShuffleNetV1

    文章目录 1.ShuffleNetV1的介绍 2.ShuffleNetV1的结构 1)Channel Shuffle操作 2)ShuffleNet基本单元 3.ShuffleNetV1的性能统计 4. ...

最新文章

  1. [学习]GridView 学习集合 -- GridView中使用超链接的技巧
  2. 机械键盘连击怎么处理_怎么选择机械键盘?各种平价机械键盘推荐
  3. isolate-user-vlan隔离用户vlan的配置
  4. android的listView组件
  5. Spring Boot spring mvc 拦截器
  6. 一起学nRF51xx 6 - uart
  7. 给你的站点全面提速——来自Yahoo UI的各种Bset Practices
  8. JavaWeb学习总结(二)——JSP中的九个内置对象
  9. 如何在 ASP.NET Core 中使用 URL Rewriting 中间件
  10. 【jQuery笔记Part1】03-jQuery加载模式对比JS
  11. 深度学习推荐模型-DeepCrossing
  12. WIN7安装VS2008的 Error1935 问题解决方案
  13. 探寻成功之路 企业共同关心
  14. 删除计算机用户时拒绝访问权限,c盘为什么拒绝访问 删除c盘文件需要管理员权限怎么办...
  15. ConcurrentHashMap源码深度解析(一)(java8)——不可不知的基本概念(助你拿下源码事半功倍)
  16. 基于openstack安装部署私有云详细图文教程
  17. n流水线m装配站调度问题
  18. 使用ESP8266与小爱同学通过Arduino控制舵机
  19. MAC下终端走代理的几种方法
  20. java 利用redis 记录文章的阅读量

热门文章

  1. ​​​​​​​简述STM32 CAN总线的设置
  2. AX200网卡优先级问题
  3. 2013年计算机控制A卷答案,计算机控制技术第二章习题标准答案整理及详解(2013.04.26修改版SK).doc...
  4. fp算法例题_FP Tree算法原理总结
  5. 两个下载 Google Books 图书的浏览器脚本和扩展
  6. springboot毕设项目大学生勤工俭学系统09i5r(java+VUE+Mybatis+Maven+Mysql)
  7. 【附源码】Java计算机毕业设计勤工俭学管理小程序(程序+LW+部署)
  8. 算法工程师是做什么的?超高薪资的背后,存在着什么样的原因?
  9. 开源飞控设备连接图介绍
  10. ble4.2扫描回复包详解(SCAN_RSP)