1 MobileNet V1

MobileNet是针对移动端优化的卷积,所以当需要压缩模型时,可以考虑使用MobileNet替换卷积。下面我们开始学习MobileNet原理,并且先通过Tensorflow函数接口实现MobileNet,再手写python代码实现MobileNet。

1.1 普通卷积

MobileNet是用于替换普通卷积,相比普通卷积,MobileNet参数更少,计算速度更快。我们先看一下输入为(h=12,w=12,c=4),卷积为3*3,输出为(h=12,w=12,c=2)前向计算中,普通卷积的参数量、乘法计算次数。普通卷积如下图所示:

从上图可以很简单的计算到,普通卷积参数总数为72个,需要做10368次乘法计算。

1.2 MobileNet v1

相比普通卷积,MobileNet采用的方法是,将卷积分解为2个操作:depthwise和pointwise。pointwise比较容易理解,就是普通的卷积核为1*1的卷积。depthwise采用的方法不是普通卷积方式,我们知道,对于输入通道数为4的feature map在计算卷积时,输出的每个通道都需要对应4个3*3卷积核参数。这一步是最主要的耗时,为了提升计算速度,MobileNet把每个输入feature map对应一个3*3卷积核,输出通道数不变,即为4。而真正对通道数做改变的是在pointwise,也就是1*1的卷积。

下面图很清晰的理解mobilenet原理:

从上图可以很简单的计算到,普通卷积参数总数为44个,需要做6336次乘法计算。可以看到,mobilenet的参数和乘法计算次数明显比普通卷积要小。这还仅仅是我列举的简单例子,在实际网络中,几十层的网络很常见,feature map也是远远大于12*12*4。根据我的经验,普通100M的网络模型,将所有卷积替换成mobilenet后,能降到20M以下,计算速度更是不在一个量级。

Mobilenet v2

主要贡献

有2点

1,提出了逆向的残差结构(Inverted residuals)

由于MobileNetV2版本使用了残差结构,和resnet的残差结构有异曲同工之妙,源于resnet,却和而不同。

由于Resnet没有使用depthwise conv,所以,在进入pointwise conv之前的特征通道数是比较多的,所以,残差模块中使用了0.25倍的降维。而MobileNet v2由于有depthwise conv,通道数相对较少,所以残差中使用 了6倍的升维。

总结起来,2点区别

(1)ResNet的残差结构是0.25倍降维,MobileNet V2残差结构是6倍升维

(2)ResNet的残差结构中3*3卷积为普通卷积,MobileNet V2中3*3卷积为depthwise conv

MobileNet v1,MobileNet v2 的区别

有2点

(1)v2版本在进入3*3卷积之前,先进行了1*1pointwise conv升维,并且经过RELU。

(2)1*1卷积出去后,没有进行RELU操作

MobileNet v1,MobileNet v2 的实际使用区别:

精度上,MobileNet v2优于MobileNet v1

速度上,在GPU有并行的情况下,v1和v2速度基本差不多,在cpu这种无并行的情况下,v2要比v1慢大概40%。就是说,v2比v1的乘加运算量确实是小,但是最终速度是由好多因素决定的,这也就是shuffle v2的改进由来。

MobileNet v1,MobileNet v2 的实际使用区别:

精度上,MobileNet v2优于MobileNet v1

速度上,在GPU有并行的情况下,v1和v2速度基本差不多,在cpu这种无并行的情况下,v2要比v1慢大概40%。就是说,v2比v1的乘加运算量确实是小,但是最终速度是由好多因素决定的,这也就是shuffle v2的改进由来。

2,提出了线性瓶颈单元(linear bottlenecks)

Why no RELU?

首选看看RELU的功能。RELU可以将负值全部映射为0,具有高度非线性。下图为论文的测试。在维度比较低2,3的时候,使用RELU对信息的损失是比较严重的。而单维度比较高15,30时,信息的损失是比较少的。

MobileNet v2中为了保证信息不被大量损失,应此在残差模块中去掉最后一个的RELU。因此,也称为线性模块单元。

MobileNet v2网络结构:

其中,t表示通道的扩大系数expansion factor,c表示输出通道数,

n表示该单元重复次数,s表示滑动步长stride

其中bottleneck模块中,stride=1和stride=2的模块分别如上图所示,只有stride=1的模块才有残差结构。

结果:

MobileNet v2速度和准确性都优于MobileNet v1

和其他结构的对比:

相关论文

相关中文论文
邢艳芳,卓文鑫,段红秀. 基于MobileNet的敏感图像识别系统设计[J]. 电视技术, 2018, 42(7):53-56.
童星,张激. 基于SSD_MobileNet模型的ROS平台目标检测[J]. 计算机系统应用, 2019, 28(1):94-99.
曹香滢,孙卫民,朱悠翔 . 基于科优先策略的植物图像识别[J]. 计算机应用, 2018, 38(11):195-199.
黄宁波. 用于目标检测的深度学习算法优化研究[D]. 长春理工大学, 2018.
杨洁.基于卷积神经网络的目标检测研究[D]. 南华大学, 2018.

引用:

https://blog.csdn.net/qq_14845119/article/details/73648100

https://blog.csdn.net/huachao1001/article/details/79171447

MobileNet v1 和 v2相关推荐

  1. MobileNet(v1、v2)——CNN经典网络模型详解(pytorch实现)

    在之前的文章中讲的AlexNet.VGG.GoogLeNet以及ResNet网络,它们都是传统卷积神经网络(都是使用的传统卷积层),缺点在于内存需求大.运算量大导致无法在移动设备以及嵌入式设备上运行. ...

  2. 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design

    手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). ​​​​​​高效的CNN设计不只是用在服务器,云端,资源 ...

  3. Mobile net系列总结(V1、V2、V3)

    一.Mobile Net V1 主要贡献: (1)使用了深度可分离卷积构建轻量级卷积神经网络,由depthwise(DW)和pointwise(PW)两个部分结合起来,用来提取特征feature ma ...

  4. 基于FPGA实现的MobileNet V1,FPGA深度学习加速器设计 CNN Accelerators based on FPGAs

    Automatic Generation of Multi-precision Multi-arithmetic CNN Accelerators for FPGAs 最近arXiv上挂出来一篇文章, ...

  5. 测开之路二十:比较v1和v2

    根据V1和V2的版本号,如果v1>v2,返回1,如果v1<v2,返回-1,除此之外返回0 # 如果v1>v2,返回1,如果v1<v2,返回-1,除此之外返回0v1 = inpu ...

  6. 论文笔记:MobileNet v1

    原文:MobileNets: Efficient Convolutional Neural Networks for MobileVision Applications MobileNet v1 1. ...

  7. python struct.pack()函数 (返回一个字节对象,其中包含根据格式字符串fmt打包的值v1,v2,...)

    def pack(fmt, *args): # known case of _struct.pack"""pack(fmt, v1, v2, ...) -> byt ...

  8. apk 签名v1与v2的区别

    在Android Studio中点击菜单 Build->Generate signed apk... 打包签名过程中, 可以看到两种签名选项 V1(Jar Signature)  V2(Full ...

  9. SAP Cloud for Customer OData v1和v2的区别

    SAP帮助文档:https://help.sap.com/viewer/1364b70b9cbb417ea5e2d80e966d4f49/2002/en-US/e4d5b5e4f6d847f7ad20 ...

最新文章

  1. java三角形创建子类_如何创建子类,以便参数属于Java中的子类类型
  2. 国产研发管理工具也在慢慢壮大,Worktile7岁了!
  3. SQL Server 数据库基础编程
  4. 2021-10-7 !二叉树的层序遍历
  5. spark读取hdfs路径下的数据_到底什么是数据湖
  6. 关于Python中迭代器的作用
  7. log4j(六)——log4j.properties简单配置样例说明
  8. mybatis 返回 插入的主键
  9. git 查看远程仓库地址
  10. C++工作笔记-对|,这些位运算的进一步认识
  11. 高德地图文本标注html,设置点标注的文本标签
  12. lucene案例demo
  13. python共享内存mmap_python - IPC在单独的Docker容器中的Python脚本之间共享内存 - 堆栈内存溢出...
  14. 知乎每日精选python阅读脚本
  15. MATLAB制作歌曲
  16. 用74161计数器芯片 设计十二进制计数器
  17. 毕业设计 - 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]
  18. 【weblogic】WTC配置(Weblogic Tuxedo Connector)
  19. spark on yarn实战 +HA
  20. java 正则表达式去除字符串中的转义字符(/b /u0002 /u001D等)

热门文章

  1. 家庭装修电路施工大全
  2. 【UE4_蓝图】用鼠标平滑稳定的在世界(三维空间)中移动物体
  3. 【无标题】Android透明度对照表
  4. Python基础入门(夏敏捷等著)课后习题答案全解
  5. QQ显IP显隐身制作原理介绍转)
  6. Ubuntu入门教程及常见错误排查
  7. KVM之Nova通过libvirt管理QEMU/KVM虚机
  8. Ubuntu清理磁盘通过Stacer工具
  9. 计算机字体安装按钮灰色,win7系统无法安装字体安装按钮灰色的的操作技巧
  10. Unity程序窗口最大化、最小化