文章目录

  • 一:复杂网络模型移植问题
  • 二:模型剪枝策略
    • 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相关推荐

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

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

  2. Android安全开发之浅谈密钥硬编码

    Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...

  3. 浅谈三极管、运放、MOS管驱动 的常见电路

    浅谈三极管.运放.MOS管驱动的常见电路 前言 一.三极管的应用电路 二.运算放大器的应用电路 三.MOS管驱动电路 总结 前言 随着对电路应用能力的要求越来越高,模拟电路中的三极管和运放显得越来越重 ...

  4. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  5. 浅谈pnpm (软链接 与 硬链接)

    概述: 前端常见包管理工具:yarn.npm.pnpm,本文主要浅谈三种包管理工具的优劣与pnpm的原理与使用. pnpm官网:https://pnpm.io/zh/motivation 一.npm. ...

  6. 浅谈 Linux 系统中的 SNMP Trap 【转】

    文章来源:浅谈 Linux 系统中的 SNMP Trap 简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前,首先认识一下 SNMP 吧. 简单网络管理协议(Simple Network ...

  7. Android应用安全开发之浅谈密钥硬编码

    Android应用安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很 ...

  8. YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(上)

    YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(上) YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(中) YOLO系列(v1~v3)的学习及Y ...

  9. 浅谈Service Mesh体系中的Envoy

    摘要: 提到Envoy就不得不提Service Mesh,说到Service Mesh就一定要谈及微服务了,那么我们就先放下Envoy,简单了解下微服务.Service Mesh以及Envoy在Ser ...

最新文章

  1. 全国计算机等级考试培训方案,第23次全国计算机等级考试培训安排.doc
  2. 二叉树 跳表_漫谈 LevelDB 数据结构(一):跳表(Skip List)
  3. CMake基础 第3节 静态库
  4. linux搜索文件内容含有星号,文本内容查找grep、文件查找find、正则匹配
  5. 示例解读 Python 2 和 Python 3 之间的主要差异
  6. 创造性模式——原型模式
  7. Python Tree库绘制多叉树的用法介绍
  8. SOP 中的 Service
  9. prototype小解
  10. winform 通过驱动注册ID检测是否已安装驱动
  11. mybatis 多数据源_SpringBoot+Mybatis配置多数据源及事务方案
  12. DevC++的一些使用技巧
  13. R语言实战 R语言读取不同文件类型中数据的4种方法
  14. 微信云托管云调用使用指南
  15. windows系统下itunes的备份路径修改
  16. 计算机打字考试软件使用说明,电脑打字指法练习_学习使用电脑的基本知识打字,需要怎么练习?...
  17. 简单选择排序(Eternallyc)
  18. NNNNNNNNNN
  19. browsersync——代码变动实时更新到页面
  20. Android拦截黑名单(简易版)

热门文章

  1. 20210226某体育公司前端面试总结
  2. pat是什么意思中文_pat是什么意思
  3. 图像滤镜处理算法:柔化、光照、放大镜、哈哈镜
  4. android中textview记录日志,Android中TextView属性全纪录
  5. 调整el-datetimepicker时间选择器的样式大小
  6. Java培训实现月薪15k,我都经历了什么(绝不是广告)
  7. wireshark抓包vx ip
  8. 使用map_server保存并使用已有地图
  9. Redis之Codis
  10. 配置使用console口连接三层交换机