轻量级神经网络发展_宽度神经网络

轻量级神经网络发展_宽度神经网络文章目录轻量级神经网络——shuffleNetshuffleNet1逐点分组卷积(Pointwisegroupconvolution)✨✨✨通道重排(channelshuffle)✨✨✨shuffleNetUnit✨✨✨shuffleNet1的网络结果和效果轻量级神经网络——shuffleNetshuffleNet1  在之前,已经讨论过一种轻量级神经网络——MobileNet,文中对MobileNet的三个版本都做了详细的介绍,读此篇之前,建议先了解MobileNet,特别是要对其中的深度可

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

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

轻量级神经网络——shuffleNet

shuffleNet1

  在之前,已经讨论过一种轻量级神经网络——MobileNet,文中对MobileNet的三个版本都做了详细的介绍,读此篇之前,建议先了解MobileNet,特别是要对其中的深度可分离卷积有较清晰的认识,因为shuffleNet中的分组卷积和MobileNet的逐深度卷积(Depthwise Convolution)非常相似,故在此篇的描述过程中,我认为大家已经有了MobileNet的基础???

  shuffleNet1的论文只有9页,是不是还是很轻量的???我认为shuffleNet1中最主要的思想有两点,一是逐点分组卷积(Pointwise Group Convolution),二是通道重排(channel shuffle)。 下面就来具体的谈谈这两点???
 
 

逐点分组卷积(Pointwise group convolution)✨✨✨

  在说明逐点分组卷积之前先来了解一下什么是分组卷积和逐点卷积。所谓分组卷积,就是将原始的特征图分成几组后再分别对每一组进行卷积。用下图来进行解释,左图表示普通卷积,右图表示分组卷积。左图普通卷积输入特征图个数为12,采用了6个卷积核对输入图像进行卷积,得到了6个输出的特征图;右图分组卷积输入特征图的个数也是12,但其将12个特征图分成了3组(红、绿、黄),每组有4个特征图,这时同样需要6个卷积核,但需要注意的是这6个卷积核也被分成3组,即两两一组。然后将每组的输入特征图和对应的两个卷积核进行卷积,这时每组都会产生2个特征图,一共也会有6个输出特征图。注意:虽然普通卷积核分组卷积都需要6个卷积核,但他们卷积核的通道数是不一样的,对本列来说,普通卷积的卷积核通道数为12,而分组卷积的卷积核通道数为4。

image-20220228161354149

  上面谈到了普通卷积和分组卷积的区别,其实看过MobileNet的同学,应该感觉很熟悉,这和MobileNet里面的逐深度卷积(DW卷积)是非常像的,相当于DW卷积把组分得足够多,每个通道的特征图都为一组,因此不理解分组卷积的可以结合DW卷积思考思考???

  读到这里,很多读者可能要问了,为什么要采用分组卷积呢?分组卷积相对于普通卷积有什么优势呢?其实分组卷积可以有效的减少网络的容量,使网络更加轻量。下面还是结合上图来算算普通卷积核分组算计各自所消耗的参数量和计算量(不会计算参数量和计算量的请移步:神经网络参数量、计算量(FLOPS)、内存访问量(AMC)计算详解)【注意:这里假设卷积核大小为K*k,输出特征图大小为H*W】

image-20220228170351967

  通过上图,可以很明显的看出,分组卷积的参数量和计算量都比普通卷积要小。定量观察会发现,普通卷积的计算量和参数量都是分组卷积的3倍,刚好是所分的组数,这是一个一般性的结论。

  至此,分组卷积应该是叙述清楚了。这回再来谈谈逐点卷积,这个似乎真没啥好谈的了,再我的MobileNet博客中也提到过,逐点卷积其实就是卷积核为1*1的卷积。

  讨论完分组卷积和逐点卷积,就可以来定义逐点分组卷积了。顾名思义,逐点分组卷积就是将分组卷积核逐点卷积相结合,即表示卷积核大小为1*1的分组卷积。

 
 

通道重排(channel shuffle)✨✨✨

  上面介绍了逐点分组卷积,这里可以看一下逐点分组卷积后的效果,如下图所示:

image-20220228172700011

  可以看到,不同组之间是没有任何联系的,即得到的特征图只和对应组别的输入有关系。论文中也有这样的描述,这种分组因不同组之间没有任何联系,学习到的特征会非常有限,也很容易导致信息丢失,因此论文提出了channel shuffle。

image-20220228181740259

  channel shuffle具体是怎么实现的呢?下图标绿框部分即为channel shuffle的操作,即从得到的特征图中提取出不同组别下的通道,并将他们组合在一起,最终channel shaffle完成后的结果如(c)中黄色虚线框所示。

轻量级神经网络发展_宽度神经网络

  上图中从绿框传变成黄色虚线框的过程即为channel shaffle通道重排过程,现将其分解出来,看看channel shaffle通道重排具体过程,如下图:

image-20220228183536486


图片来源于B站UP主:同济子豪兄

​  
 

shuffleNet Unit✨✨✨

  (a)是最原始的残差结构,(b)、©都是shuffleNet的单元结构。先来看看(a)是如何变成(b)的,首先是用逐点分组卷积代替了逐点卷积,同时在其后跟了一个channel shuffle操作,然后中间的3x3DWConv没有变化,最后的逐点卷积依旧换成了逐点分组卷积。©是用来降采样的,和(b)主要区别在shortcut分支中采用了3x3d的步长为2的AVG Pool、主分支中DWConv中的步长变成了2以及最后使用的是Concat而不是add,这样的结构会使输入图像尺寸减半,通道数翻倍。

image-20220228184042618

  还有一些细节需要在这里提一下,一是在第二个逐点分组卷积后并没有使用channel shuffle,这是因为此时得到的结果已经相当不错了,所以不需要进行通道重排了;二是在DWConv后并没有进行Relu激活,这个原因我在MobileNetV2中有说到,不知道的可以去看一看。

image-20220228190312831

image-20220228190556317

 
 

shuffleNet1的网络结果和效果

  下图网络结构的每一步变化也较好分析,不会的可以参考我之前的博客。需要注意的是黄框框住的g表示不同的分组数,如g=3表示将特征图分成3组进行分组卷积。

轻量级神经网络发展_宽度神经网络

  下面为shuffleNet和其他一些经典网络的性能比较,可以看出shuffleNet在FLOPs一定时优势还是很明显的???

image-20220228192650743


shuffleNet和主流模块堆叠而成的网络新能比较
   

image-20220228192934740


shuffleNet和主流网络性能比较
   

image-20220228193114237


shuffleNet和MobileNet图像分类性能比较
 

 
 
如若文章对你有所帮助,那就???

咻咻咻咻~~duang~~点个赞呗

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

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

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


相关推荐

  • python socket编程实现的简单tcp迭代server

    python socket编程实现的简单tcp迭代server

    2021年12月14日
    46
  • Java深入理解深拷贝和浅拷贝区别[通俗易懂]

    Java深入理解深拷贝和浅拷贝区别[通俗易懂]一、拷贝的引入(1)、引用拷贝创建一个指向对象的引用变量的拷贝。Teacherteacher=newTeacher("Taylor",26);Teacherotherteacher=teacher;System.out.println(teacher);System.out.println(otherteacher);输出结果:blog.Teacher@355da2…

    2022年10月1日
    3
  • 监控录像数据恢复方法步骤详解

    监控录像数据恢复方法步骤详解在人们生活日益改善的今天,社会的和谐安定成为了最为重要的一个问题。一些不法分子为了一己私利,通过不法手段谋取他人的财物。这样的行为对社会对个人都是一种威胁,为了能更好的防治这类社会危害因素,那就需要我们的电子警察——视频监控出马了。视频监控在现在生活中随处可见,道路上有治安监控,各家商铺有防盗监控,随处可见的监控给人们的生命财产安全带来了一份保障。利用安全防范技术进行安全防范首先对犯罪分子

    2022年5月4日
    275
  • mybatis-plus id主键生成的坑

    mybatis-plus id主键生成的坑mybatis-plusid主键生成的坑简要说明错误解决方案一1.修改id字段类型2.调整数据库id字段类型解决方案二添加注解其他`type`类型介绍简要说明由于mybatis-plus会自动插入一个id到实体对象,不管你封装与否,所以有时候导致一些意外的情况发生默认是生成一个长数字字符串(编码不同可能结尾带有字母)错误estedexceptionisorg.apac…

    2022年6月17日
    84
  • eclipseSVN的安装及使用

    eclipseSVN的安装及使用eclipseSVN的安装及使用

    2022年4月22日
    53
  • 中国银行笔试题目回忆录_中国银行好考吗

    中国银行笔试题目回忆录_中国银行好考吗亲,戳上面的蓝字关注我们哦!中国银行笔试回忆题目昨天刚考完的中国银行笔试题目,趁着头脑还比较清醒先在这里记录一下吧,我选的是中国银行的信息技术岗位。我是提前就进了考场,中国银行考场还是比较好的,还

    2022年8月3日
    14

发表回复

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

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