MobileNet v1 和 v2
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相关推荐
- MobileNet(v1、v2)——CNN经典网络模型详解(pytorch实现)
在之前的文章中讲的AlexNet.VGG.GoogLeNet以及ResNet网络,它们都是传统卷积神经网络(都是使用的传统卷积层),缺点在于内存需求大.运算量大导致无法在移动设备以及嵌入式设备上运行. ...
- 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design
手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). 高效的CNN设计不只是用在服务器,云端,资源 ...
- Mobile net系列总结(V1、V2、V3)
一.Mobile Net V1 主要贡献: (1)使用了深度可分离卷积构建轻量级卷积神经网络,由depthwise(DW)和pointwise(PW)两个部分结合起来,用来提取特征feature ma ...
- 基于FPGA实现的MobileNet V1,FPGA深度学习加速器设计 CNN Accelerators based on FPGAs
Automatic Generation of Multi-precision Multi-arithmetic CNN Accelerators for FPGAs 最近arXiv上挂出来一篇文章, ...
- 测开之路二十:比较v1和v2
根据V1和V2的版本号,如果v1>v2,返回1,如果v1<v2,返回-1,除此之外返回0 # 如果v1>v2,返回1,如果v1<v2,返回-1,除此之外返回0v1 = inpu ...
- 论文笔记:MobileNet v1
原文:MobileNets: Efficient Convolutional Neural Networks for MobileVision Applications MobileNet v1 1. ...
- python struct.pack()函数 (返回一个字节对象,其中包含根据格式字符串fmt打包的值v1,v2,...)
def pack(fmt, *args): # known case of _struct.pack"""pack(fmt, v1, v2, ...) -> byt ...
- apk 签名v1与v2的区别
在Android Studio中点击菜单 Build->Generate signed apk... 打包签名过程中, 可以看到两种签名选项 V1(Jar Signature) V2(Full ...
- SAP Cloud for Customer OData v1和v2的区别
SAP帮助文档:https://help.sap.com/viewer/1364b70b9cbb417ea5e2d80e966d4f49/2002/en-US/e4d5b5e4f6d847f7ad20 ...
最新文章
- java三角形创建子类_如何创建子类,以便参数属于Java中的子类类型
- 国产研发管理工具也在慢慢壮大,Worktile7岁了!
- SQL Server 数据库基础编程
- 2021-10-7 !二叉树的层序遍历
- spark读取hdfs路径下的数据_到底什么是数据湖
- 关于Python中迭代器的作用
- log4j(六)——log4j.properties简单配置样例说明
- mybatis 返回 插入的主键
- git 查看远程仓库地址
- C++工作笔记-对|,这些位运算的进一步认识
- 高德地图文本标注html,设置点标注的文本标签
- lucene案例demo
- python共享内存mmap_python - IPC在单独的Docker容器中的Python脚本之间共享内存 - 堆栈内存溢出...
- 知乎每日精选python阅读脚本
- MATLAB制作歌曲
- 用74161计数器芯片 设计十二进制计数器
- 毕业设计 - 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]
- 【weblogic】WTC配置(Weblogic Tuxedo Connector)
- spark on yarn实战 +HA
- java 正则表达式去除字符串中的转义字符(/b /u0002 /u001D等)