浅谈 Mobilenet V1-V3
文章目录
- 一:复杂网络模型移植问题
- 二:模型剪枝策略
- 1.剪枝
- 2.网络设计策略
- 三:Mobilenet v1的横空出世
- 四:Mobilenet v2大杂烩
- 五:Mobilenet v3完全体
一:复杂网络模型移植问题
移植难点:
- 很多嵌入式,手机端无法使用庞大的网络结构
- 一个几百M的模型难以随便移植
- 复杂网络的参数和计算量庞大,难以DIY后强加训练,预期效果不尽人意
那么一个简洁时效的网络结构该如何设计呢,答案就是模型的剪枝策略。其实,剪枝和策略是两种侧重点不同的方法,前者是对较为冗长的网络结构进行训练后的删减简化,而后者则是直接设计出轻巧、高移植性的网络架构。本文针对Mobilenet重点讲解网络设计策略。
二:模型剪枝策略
1.剪枝
有关剪枝的具体细节可以参考本人另一篇文章
2.网络设计策略
几种常见的策略:
Feature map的channels聚类
对特征图每个通道的γ权重值聚类,如上图聚成四个簇。接着用每一个簇中心的权重值代替特征图,达到剪值效果。ensembling networks Learning
借鉴类似随机森林的集成思想,首先用大量数据训练出N个网络集成的大型网络,将训练出的标签结果作为small net的目标标签(先验值),学起来的话会更容易,而且不易过拟合,可以理解为一群学长将自己几年的学习经验先分享给了你,那么直接对着他们的话学起来,自然就轻松许多,也会少走很多弯路(不易过拟合)。类似SVD的网络分解法
一种类似与奇异值分解的思想,如上图举例,在长度N和M层之间插入一个长度k的线性层,那么原本的param由M×N变成了M×K+N×K,肉眼可见的参数量减少。
上述几种老早提出的模型架构设计方法,效果都不尽人意,接下来我们的主角登场了。
三:Mobilenet v1的横空出世
上图是YOLO_v3目标检测模型在手机端的运行结果,时效性和准确度都达到了预期要求。那么为什么相对庞大的检测算法能如此轻易地移植到手机端呢?正是因为他们将YOLO_v3中的backbone替换成了Mobilenet_v1,替代了常用的Resnet和VGG作为backbone,降低了模型的复杂度,参数量和计算量大大减少。
下面我来讲讲Mobilenet_v1的思想,首先从经典卷积计算讲起:
传统的卷积就是一个filter对特征图的每个通道都进行卷积,虽然能融合不同通道的信息,却增加了计算量,拿下面的模型举例:
可见经典卷积所需计算量巨大,所以Mobilenet_v1提出了Depthwise卷积概念,每一个filler只对一层channel卷积计算,所以说input的通道数等于output的通道数,如下图所示:
那么输出和输入是对应的,怎么能扩展通道数呢,这里Mobilenet_v1又提出了Pointwise卷积概念,实际上就是通过Conv 1*1卷积,扩大了通道数,没什么特殊的,如下图所示:
综上所述,Mobilenet_v1实际上就是depthwise卷积 + Pointwise卷积 的组合,作者又将他们整合成一个叫Depthwise Seperable卷积,整个Mobilenet_v1的核心步骤可用下图表示出:
Mobilenet_v1中其实还提出了一种新的激励函数ReLU6,当x超过6后y不再改变,增加了非线性与泛化能力,同时降低了梯度爆炸的风险。如下图:
最后,我们来看看参数量和计算量到底减少了多少,空口无凭,上图!
四:Mobilenet v2大杂烩
延用Mobilenet_v1中的可分离卷积,v2版本主要对架构进行了修改,主要是如下两点:
- 整体网络架构改变,借鉴Resnet思想,设计了反残差网络,也就是Shotcut模块。
- Relu激活函数改变,用线性替代
通过研究发现,ReLU对低维数据影响很大,部分数据会丢失,但对于高维数据,则没太大影响。
所以作者改变了v1中先depthwise后1×1卷积扩通道的架构,而是选择先1×1卷积扩大维度,后depthwise的架构,实验表明各效果相对于v1都有所提升。如下图所示:
其实这种架构,就是类似于将Resnet中的bottleneck思想反过来运用,先窄后宽— >先宽后窄。Shotcut模块如下图所示:
下面贴上Mobilenet_v2的整体结构框图,供大家参考学习:
对比实验结果:
五:Mobilenet v3完全体
借鉴Mobilenet_v2中的Shotcut结构的思想,v3版本又提出了SE结构,主要是如下两点:
- 引入Squeeze-Excitation结构
- 非线性变换改变,h-swish替代swish
SE-net其实就是将注意力机制引入到了特征图通道中来,先是S操作得到各channel的注意力权重,而后E操作,将权重加权到特征图中。具体操作不再赘述,如下图所示:
SE-net可以和很多经典模型融合,如下图所示:
至于hard-swish并不是那么重要,直接贴图:
至此,v1-v3的结构全部讲完,最后贴上我们的Mobilenet_v3完全体的网络结构:
(exp size:bneck模块中neck的宽度,NL:非线性方法ReLU或hard-Swish)
效果分析:
至此我对Mobilenet模型v1-v3版本,进行了简单讲解,希望对大家有所帮助,有不懂的地方或者建议,欢迎大家在下方留言评论。
我是努力在CV泥潭中摸爬滚打的江南咸鱼,我们一起努力,不留遗憾!
浅谈 Mobilenet V1-V3相关推荐
- 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design
手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). 高效的CNN设计不只是用在服务器,云端,资源 ...
- Android安全开发之浅谈密钥硬编码
Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...
- 浅谈三极管、运放、MOS管驱动 的常见电路
浅谈三极管.运放.MOS管驱动的常见电路 前言 一.三极管的应用电路 二.运算放大器的应用电路 三.MOS管驱动电路 总结 前言 随着对电路应用能力的要求越来越高,模拟电路中的三极管和运放显得越来越重 ...
- 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...
自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...
- 浅谈pnpm (软链接 与 硬链接)
概述: 前端常见包管理工具:yarn.npm.pnpm,本文主要浅谈三种包管理工具的优劣与pnpm的原理与使用. pnpm官网:https://pnpm.io/zh/motivation 一.npm. ...
- 浅谈 Linux 系统中的 SNMP Trap 【转】
文章来源:浅谈 Linux 系统中的 SNMP Trap 简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前,首先认识一下 SNMP 吧. 简单网络管理协议(Simple Network ...
- Android应用安全开发之浅谈密钥硬编码
Android应用安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很 ...
- YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(上)
YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(上) YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(中) YOLO系列(v1~v3)的学习及Y ...
- 浅谈Service Mesh体系中的Envoy
摘要: 提到Envoy就不得不提Service Mesh,说到Service Mesh就一定要谈及微服务了,那么我们就先放下Envoy,简单了解下微服务.Service Mesh以及Envoy在Ser ...
最新文章
- 全国计算机等级考试培训方案,第23次全国计算机等级考试培训安排.doc
- 二叉树 跳表_漫谈 LevelDB 数据结构(一):跳表(Skip List)
- CMake基础 第3节 静态库
- linux搜索文件内容含有星号,文本内容查找grep、文件查找find、正则匹配
- 示例解读 Python 2 和 Python 3 之间的主要差异
- 创造性模式——原型模式
- Python Tree库绘制多叉树的用法介绍
- SOP 中的 Service
- prototype小解
- winform 通过驱动注册ID检测是否已安装驱动
- mybatis 多数据源_SpringBoot+Mybatis配置多数据源及事务方案
- DevC++的一些使用技巧
- R语言实战 R语言读取不同文件类型中数据的4种方法
- 微信云托管云调用使用指南
- windows系统下itunes的备份路径修改
- 计算机打字考试软件使用说明,电脑打字指法练习_学习使用电脑的基本知识打字,需要怎么练习?...
- 简单选择排序(Eternallyc)
- NNNNNNNNNN
- browsersync——代码变动实时更新到页面
- Android拦截黑名单(简易版)