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

轻量级神经网络发展_宽度神经网络文章目录轻量级神经网络——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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 机器学习:海量数据挖掘解决方案

    达观数据团队分享基于大数据的机器学习应用经验。

    2022年4月13日
    75
  • smartselect是什么意思_Smart Connect

    smartselect是什么意思_Smart Connect一、什么是S.M.A.R.T.SMART是一种磁盘自我分析检测技术,早在90年代末就基本得到了普及每一块硬盘(包括IDE、SCSI)在运行的时候,都会将自身的若干参数记录下来这些参数包括型号、容量、温度、密度、扇区、寻道时间、传输、误码率等硬盘运行了几千小时后,很多内在的物理参数都会发生变化某一参数超过报警阈值,则说明硬盘接近损坏此时硬盘依然在工作,如果用户不理睬这个报警继续

    2022年10月8日
    1
  • centos 7.5 内核版本_内核版本多少算好手机

    centos 7.5 内核版本_内核版本多少算好手机实验环境CentOS-7-x86_64-Minimal-1708.isoCentOSLinuxrelease7.4.1708(Core)Kernel3.10.0-693.el7.x86_64方案一:小版本升级连接并同步CentOS自带yum源,更新内核版本。此方法适用于更新内核补丁。具体实验步骤:sudoyumlistkernelsudoyumupdate-yke…

    2022年8月23日
    8
  • c++视频转字符画_c++字符数组转化为字符串

    c++视频转字符画_c++字符数组转化为字符串运行此程序需要有graphics图形库#include <stdio.h>#include <graphics.h> // 图形库的头文件#define HEIGHT 8 // 转换后的高度#define WIDTH 8 // 转换后的宽度#define ASCII1 32 // 转换ASCII数量struct ASCII{ char as…

    2022年8月18日
    6
  • Matlab调用excel数据绘制折线图「建议收藏」

    Matlab调用excel数据绘制折线图「建议收藏」如题,matlab之前没接触过,但是电脑上一直有安装,有些老师需要做几张图放论文里,所以尝试了一下(excel其实效果也行,但matlab感觉更专业)x=2:2:778;%x轴上的数据,第一个值代表数据开始,第二个值代表间隔,第三个值代表终止a=xlsread(‘d:/RVA-zlx.xls’,1,’D2:D390′);%a数据y值b=xlsread(‘d:/RVA-zlx.xls…

    2022年6月3日
    43
  • Linux vim退出_怎么关闭vim

    Linux vim退出_怎么关闭vim有些终端在vim退出后可以恢复到打开vim前终端的状态,类似这样:$vim/etc/sysconfig/####这里表示打开vim#####sdskk,一些文件内容:q$vim/etc/sysconfig/##终端恢复到先前状态但是有些不行,解决这个问题需要以下两步:1、设置TERM环境变量为xterm或者xterm-color,可以在.ba…

    2022年8月24日
    5

发表回复

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

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