轻量级网络什么意思_轻量级网络有哪些

轻量级网络什么意思_轻量级网络有哪些轻量级网络ShuffleNetv1有事没事扯扯淡关注0.0732019.01.1014:50:55字数1,803阅读2,698ShuffleNetpaperShuffleNet是旷视科技提出的一种计算高效的CNN模型,其和MobileNet和SqueezeNet等一样主要是想应用在移动端。所以,ShuffleNet的设计目标也是如何利用有限的计算资源来达到最好的模型精度,这需要很好地在…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

ShuffleNet paper

ShuffleNet是旷视科技提出的一种计算高效的CNN模型,其和MobileNet和SqueezeNet等一样主要是想应用在移动端。所以,ShuffleNet的设计目标也是如何利用有限的计算资源来达到最好的模型精度,这需要很好地在速度和精度之间做平衡。ShuffleNet的核心是采用了两种操作:pointwise group convolution和channel shuffle,这在保持精度的同时大大降低了模型的计算量。目前移动端CNN模型主要设计思路主要是两个方面:模型结构设计和模型压缩。ShuffleNet和MobileNet一样属于前者,都是通过设计更高效的网络结构来实现模型变小和变快,而不是对一个训练好的大模型做压缩或者迁移。

Group convolution

谈论起MoblieNet/ShuffleNet这些网络结构,就绕不开Group convolution,甚至可以认为这些网络结构只是Group convolution的变形而已。那么什么是Group convolution?

轻量级网络什么意思_轻量级网络有哪些

convolution

假设有输入feature map,尺寸为 HxWxC ,同时有khxw卷积核。对于一般卷积,输出feature map尺寸为H'xW'xk(这里不关心H'W' )。

轻量级网络什么意思_轻量级网络有哪些

Group convolution(group=2)

而Group convolution的实质就是将convolution分为 g 个独立的组,分别计算。即:

  • 把input feature分为g组,每组的大小为HxWx(C/g)(假设可以整除,下同)
  • 把kernel也分为g组,每组大小hxwx(k/g)
  • 按顺序,每组input feature和kernel分别做普通卷积,输出gH'xW'xk/g,一共H'xW'xk
轻量级网络什么意思_轻量级网络有哪些

ResNet bottlenect结构

这里简单介绍一下ResNet的bottleneck网络结构。注意Channel维度变化: 256D>>64D>>256D ,宛如一个中间细两端粗的瓶颈,所以称为“bottleneck”。这种结构相比VGG,早已经被证明是非常效的,能够更好的提取图像特征。

下图展示了ShuffleNet的结构,其中(a)就是加入Depthwise的ResNet bottleneck结构,而(b)和(c)是加入Group convolution和Channel Shuffle的ShuffleNet的结构。

轻量级网络什么意思_轻量级网络有哪些

ShuffleNet的基本单元是在一个残差单元的基础上改进而成的。如图a所示,这是一个包含3层的残差单元:首先是1×1卷积,然后是3×3的depthwise convolution(DWConv,主要是为了降低计算量),这里的3×3卷积是瓶颈层(bottleneck),紧接着是1×1卷积,最后是一个短路连接,将输入直接加到输出上。现在,进行如下的改进:将密集的1×1卷积替换成1×1的group convolution,不过在第一个1×1卷积之后增加了一个channel shuffle操作。值得注意的是3×3卷积后面没有增加channel shuffle,按paper的意思,对于这样一个残差单元,一个channel shuffle操作是足够了。还有就是3×3的depthwise convolution之后没有使用ReLU激活函数。改进之后如图b所示。对于残差单元,如果stride=1时,此时输入与输出shape一致可以直接相加,而当stride=2时,通道数增加,而特征图大小减小,此时输入与输出不匹配。一般情况下可以采用一个1×1卷积将输入映射成和输出一样的shape。但是在ShuffleNet中,却采用了不一样的策略,如图c所示:对原输入采用stride=2的3×3 avg pool,这样得到和输出一样大小的特征图,然后将得到特征图与输出进行连接(concat),而不是相加。这样做的目的主要是降低计算量与参数大小。

那么ShuffleNet为何要这样做?既然是轻量化网络,我们还是来算算计算量。
假设输入feature为HxWxC,所有的1x1卷积数为C3x3Depthwise卷积数为k,Group convolution都分为g, (a)和(b)的网络乘法计算量:

a) ResNet bottleneck:HW(2Ck+9)
b) ShuffleNet stride=1结构:HW(2Ck+9)+shufflecost

相比原始加入Depthwise的ResNet缩小了很多的计算量。所以ShuffleNet相当于保留ResNet结构,同时又压低计算量的改进版。这里解释下为何要做Channel Shuffle操作:

ShuffleNet的本质是将卷积运算限制在每个Group内,这样模型的计算量取得了显著的下降。然而导致模型的信息流限制在各个Group内,组与组之间没有信息交换,如图15,这会影响模型的表示能力。因此,需要引入组间信息交换的机制,即Channel Shuffle操作。同时Channel Shuffle是可导的,可以实现end-to-end一次性训练网络。

轻量级网络什么意思_轻量级网络有哪些

group convolution存在一个弊端,如图a所示,其中GConv是group convolution,这里分组数是3。可以看到当堆积GConv层后一个问题是不同组之间的特征图是不通信的,这就好像分了三个互不相干的路,大家各走各的,这目测会降低网络的特征提取能力。这样你也可以理解为什么Xception,MobileNet等网络采用密集的1x1卷积,因为要保证group convolution之后不同组的特征图之间的信息交流。但是达到上面那个目的,我们不一定非要采用dense pointwise convolution。

如图b所示,你可以对group convolution之后的特征图进行“重组”,这样可以保证接下了采用的group convolution其输入来自不同的组,因此信息可以在不同组之间流转。这个操作等价于图c,即group convolution之后对channels进行shuffle,但并不是随机的,其实是“均匀地打乱”。在程序上实现channel shuffle是非常容易的:假定将输入层分为g组,总通道数为gxn ,首先你将通道那个维度拆分为(g,n)两个维度,然后将这两个维度转置变成(n,g),最后重新reshape成一个维度。如果你不太理解这个操作,你可以试着动手去试一下,发现仅需要简单的维度操作和转置就可以实现均匀的shuffle。利用channel shuffle就可以充分发挥group convolution的优点,而避免其缺点。

当然,ShuffleNet有2个重要缺点:

  1. Shuffle channel在实现的时候需要大量的指针跳转和Memory set,这本身就是极其耗时的;同时又特别依赖实现细节,导致实际运行速度不会那么理想。
  2. Shuffle channel规则是人工设计出来的,不是网络自己学出来的。这不符合网络通过负反馈自动学习特征的基本原则,又陷入人工设计特征的老路(如sift/HOG等)。

参考链接
轻量化网络ShuffleNet MobileNet v1/v2 解析
CNN模型之ShuffleNet

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195704.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 重绘与回流_html回流重绘

    重绘与回流_html回流重绘文章目录css图层图层创建的条件重绘(Repaint)回流触发重绘的属性触发回流的属性常见的触发回流的操作优化方案requestAnimationFrame—-请求动画帧写在最后css图层浏览器在渲染一个页面时,会将页面分为很多个图层,图层有大有小,每个图层上有一个或多个节点。也就是我们各种各样的Dom标签在渲染DOM的时候,浏览器所做的工作实际上是:1.获取DOM后分割为多个图层2.对每个图层的节点计算样式结果 (Recalculatestyle–样式重计算)3.为每个节点生

    2025年8月5日
    2
  • 搭建自己的git服务器_自建服务器

    搭建自己的git服务器_自建服务器在服务器端:新建一个空git仓库sudogitinit–baresample.gitsudochown-Rgit:gitsample.git在本地:添加remotegitremoteaddmyservergit@server_ip:/path-to-git-repo把本地内容push上去gitadd.gitcommit-m”xxx”…

    2022年10月5日
    5
  • docker连接宿主机mysql_docker搭建mysql主从

    docker连接宿主机mysql_docker搭建mysql主从相信我,看完这一篇,mysql主从复制能遇到的错误在我这里都遇到了,docker能遇到的错误在我这里也遇到了,包括centos的错误如果你还没有用docker搭建过mysql先不要急着搭建集群,可以显示着用docker搭建一个mysql,这里有教程,可以先试着去搭建一个mysql:之前我们使用docker搭建了一个Mysql,那既然一个Mysql我们可以搭建成功,集群还不是分分钟,今天我们就简单搭建一个Mysql集群,就搭建一个最简单的一主一从的主从复制吧,

    2022年8月13日
    5
  • 华为0基金会——图片整理

    华为0基金会——图片整理

    2022年1月6日
    124
  • 计算机二级考试数据结构与算法知识点_算法与数据结构是计算机两大基础

    计算机二级考试数据结构与算法知识点_算法与数据结构是计算机两大基础按照自己的理解写的解题思路,如有错误希望指正。1.算法的复杂度: ①时间复杂度:执行算法所需的计算工作量(又叫:基本运算次数) ②空间复杂度:执行算法所需的内存 它们是没有任何关系的!!!2.求二叉树序列类题目 要点:前序—根左右 中序—左根右 后序—左右根 例1:已知前序ABCDE,中序BCADE,求后序;同类型,已知任意两个求第三个 解题思路: 由前序知道A是根,结合中序,CB是左子树,DE…

    2022年8月18日
    7
  • Redis过期键的删除策略[通俗易懂]

    文章目录立即删除惰性删除定时删除Redis使用的策略Redis中有个设置时间过期的功能,即对存储在redis数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的token或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。我们setkey的时候,都可以给一个expir…

    2022年4月10日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号