【轻量级神经网络】ShuffleNetv1-2详解

news2024/11/23 18:39:31

文章目录

  • 1、ShuffleNetV1
    • 1.1、分组卷积
    • 1.2、channel shuffle
    • 1.3、ShuffleNet基本单元
    • 1.4、整体结构
  • 2、ShuffleNetV2
    • 2.1、基本单元
    • 2.2、整体结构

1、ShuffleNetV1

1.1、分组卷积

  • Group convolution是将输入层的不同特征图进行分组,然后采用不同的卷积核再对各个组进行卷积,这样会降低卷积的计算量。因为一般的卷积都是在所有的输入特征图上做卷积,可以说是全通道卷积,这是一种通道密集连接方式(channel dense connection),而group convolution相比则是一种通道稀疏连接方式(channel sparse connection)。
  • 分组卷积的矛盾——计算量

使用group convolution的网络有很多,如Xception,MobileNet,ResNeXt等。其中Xception和MobileNet采用了depthwise convolution,这是一种比较特殊的group convolution,此时分组数恰好等于通道数,意味着每个组只有一个特征图。但这些网络存在一个很大的弊端:采用了密集的1x1 pointwise convolution。在RexNeXt结构中,其实3x3的组卷积只占据了很少的计算量,而93.4%的计算量都是1x1的卷积所占据的理论计算量。
这个问题可以解决:对1x1卷积采用channel sparse connection, 即分组卷积,那样计算量就可以降下来了,但这就涉及到下面一个问题。

  • 分组卷积的矛盾——特征通信

group convolution层另一个问题是不同组之间的特征图需要通信,否则就好像分了几个互不相干的路,大家各走各的,会降低网络的特征提取能力,这也可以解释为什么Xception,MobileNet等网络采用密集的1x1 pointwise convolution,因为要保证group convolution之后不同组的特征图之间的信息交流。

1.2、channel shuffle

  • 为达到特征通信目的,我们不采用dense pointwise convolution,考虑其他的思路:channel shuffle。其含义就是对group convolution之后的特征图进行“重组”,这样可以保证接下了采用的group convolution其输入来自不同的组,因此信息可以在不同组之间流转。进一步的展示了这一过程并随机,其实是“均匀地打乱”。
    在这里插入图片描述
  • 对于图a可以看见,特征矩阵会通过两个串行的组卷积操作计算。而对于普通的组卷积的计算可以发现,每次的卷积都是针对组内的一些特定的channel进行计卷积操作。也就是一直都是对同一个组进行卷积处理,各个组之间是没有进行交流的。
  • GConv虽然能够减少参数与计算量,但GConv中不同组之间信息没有交流。所以基于这个问题,ShuffleNetV1提出了channels shuffle的思想。
    在这里插入图片描述
  • 如图b所示,对于输入的特征矩阵,通过了GConv卷积之后得到的特征矩阵,对这些G组的特征矩阵的内部同样划分为G组,也就是现在有原来的G份变成了G*G份。那么,对于每一个大组内的G组中的同样位置,来重新构成一个channel,也就是有第1组的第1个channel,第2组的第1个channel,第3组的第1个channel,重新拼接成一个新的组。
  • 这样进行了Channel shuffle操作之后,再进行组卷积,那么现在就可以融合不同group之间的特征信息。这个就是ShuffleNetV1中的Channel shuffle思想。

1.3、ShuffleNet基本单元

  • 下图a展示了基本ResNet轻量级结构,这是一个包含3层的残差单元:首先是1x1卷积,然后是3x3的depthwise convolution(DWConv,主要是为了降低计算量),紧接着是1x1卷积,最后是一个短路连接,将输入直接加到输出上。
  • 下图b展示了改进思路:将密集的1x1卷积替换成1x1的group convolution(因为前诉了主要计算量较大的地方就是这个密集的1x1的卷积操作),不过在第一个1x1卷积之后增加了一个channel shuffle操作。值得注意的是3x3卷积后面没有增加channel shuffle,按paper的意思,对于这样一个残差单元,一个channel shuffle操作是足够了。还有就是3x3的depthwise convolution之后没有使用ReLU激活函数。这是针对stride为1的情况。
  • 下图c的降采样版本,对原输入采用stride=2的3x3 avg pool,在depthwise convolution卷积处取stride=2保证两个通路shape相同,然后将得到特征图与输出进行连接concat操作而不是相加。极致的降低计算量与参数大小。
    在这里插入图片描述

1.4、整体结构

在这里插入图片描述

  • 可以看到开始使用的普通的3x3的卷积和max pool层。然后是三个阶段,每个阶段都是重复堆积了几个ShuffleNet的基本单元。对于每个阶段,第一个基本单元采用的是stride=2,这样特征图width和height各降低一半,而通道数增加一倍。后面的基本单元都是stride=1,特征图和通道数都保持不变。对于基本单元来说,其中瓶颈层,就是3x3卷积层的通道数为输出通道数的1/4,这和残差单元的设计理念是一样的。还有其中的g表示的是分组的数量,其中较多论文使用的是g=3的版本。

2、ShuffleNetV2

  • ShuffleNet V2是旷视科技在ECCV2018上发表的最新研究成果,它在ShuffleNet[48]的基础上进一步考虑了内存访问开销(Memory Access Cost, MAC)对模型速度的影响,提出了模型加速的四项原则,并基于此提出了全新的轻量级网络架构。
  • 经理论分析和实验证明,影响MAC指标的因素包括卷积层输入和输出特征图的通道数、分组卷积(Group Convolution)的数量、模型的分支数量以及元素级(element-wise)操作的数量,并得出相应的结论:
  1. 当卷积层输入输出通道数相等时,内存访问开销最小,模型计算效率越高;
  2. 内存访问开销随着分组卷积数量的增多而增大,减少分组卷积操作能提升模型速度;
  3. 模型的分支设计降低了可并行度,分支数越少模型速度越快;
  4. 元素级操作的对模型速度的影响较大,应尽可能减少该类型操作。

2.1、基本单元

  • 回顾ShuffleNetV1的结构,其主要采用了两种技术:pointwise group convolutions与bottleneck-like structures。然后引入“channel shuffle”操作,以实现不同信道组之间的信息通信,提高准确性。
  • both pointwise group convolutions与bottleneck structures均增加了MAC,与G1和G2不符合。这一成本是不可忽视的,特别是对于轻型机型。此外,使用太多group违反G3。shortcut connection中的元素element-wise add操作也是不可取的,违反了G4。因此,要实现高模型容量和高效率,关键问题是如何在不密集卷积和不过多分组的情况下,保持大量的、同样宽的信道。
  • 其中图c对应stride=1的情况,图d对应stride=2的情况
    在这里插入图片描述
  • 为此,ShuffleNetV2做出了改进,如图( c )所示,在每个单元的开始,c特征通道的输入被分为两个分支(在ShuffleNetV2中这里是对channels均分成两半)。根据G3,不能使用太多的分支,所以其中一个分支不作改变,另外的一个分支由三个卷积组成,它们具有相同的输入和输出通道以满足G1。两个1 × 1卷积不再是组卷积,而改变为普通的1x1卷积操作,这是为了遵循G2(需要考虑组的代价)。卷积后,两个分支被连接起来,而不是相加(G4)。因此,通道的数量保持不变(G1)。然后使用与ShuffleNetV1中相同的“channels shuffle”操作来启用两个分支之间的信息通信。需要注意,ShuffleNet v1中的“Add”操作不再存在。像ReLU和depthwise convolutions 这样的元素操作只存在于一个分支中。
  • 对于空间下采样,单元稍作修改,移除通道分离操作符。因此,输出通道的数量增加了一倍。具体结构见图(d)。所提出的构建块( c )( d )以及由此产生的网络称为ShuffleNet V2。基于上述分析,我们得出结论,该体系结构设计是高效的,因为它遵循了所有的指导原则。积木重复堆叠,构建整个网络。

2.2、整体结构

  • 总体网络结构类似于ShuffleNet v1,如表所示。只有一个区别:在全局平均池之前增加了一个1 × 1的卷积层来混合特性,这在ShuffleNet v1中是没有的。与下图类似,每个block中的通道数量被缩放,生成不同复杂度的网络,标记为0.5x,1x,1.5x,2x
    在这里插入图片描述
    参考链接:
    https://clichong.blog.csdn.net/article/details/118187759

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/892707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KVM配置使用ovs网桥

KVM配置使用ovs网桥 1、安装openvswitch 2、启动服务 3、配置ovs 重启网络服务 systemctl restart network 4、 KVM配置使用ovs网桥 配置生效:virsh net-define br0.xml virsh net-start bro virsh net-autostart br0 5、虚…

怎么实现技术评卷时间0投入的?(上)

01 痛苦的技术问答题评审 指针走到了九点,凝视着时钟的技术招聘官Jasmine从昏沉中回到现实,她将咖啡连同叹息一口抿了下去,并端正坐在电脑前。又是一天的评卷日…… 技术招聘已持续数周,公司筛选出了100位嵌入式工程师候选人的技…

ATA-2000系列高压放大器——应用场景介绍

ATA-2000系列高压放大器——应用场景介绍 ATA-2000系列是一款理想的可放大交、直流信号的高压放大器。最大差分输出1600Vp-p (800Vp)高压,可以驱动高压型负载。电压增益数控可调,一键保存常用设置,为您提供了方便简洁的操作选择,同…

【03 英语语法:从句(名词从句、定语从句/形容词从句、状语从句/副词从句)】

从句 从句:名词从句、定语从句、状语从句(名定状名形副)1. 名词从句(名词):主语、宾语、表语、同位语、宾补▲名词从句的种类(按引导词): that、whether、疑问词 句子⑴…

pycharm配置anaconda环境

前提: 使用anaconda已经创建了一个环境名为test,现在要将test环境中的python解释器作为pycharm中工程的解释器。 如何添加解释器 点击:File->Project->Python Interpreter->右上角Add Interpreter->Add Local Interpreter. 选…

blender 发射体粒子

发射体粒子的基础设置 选择需要添加粒子的物体,点击右侧粒子属性,在属性面板中,点击加号,物体表面会出现很多小点点,点击空格键,粒子会自动运动,像下雨一样; bender 粒子系统分为两…

UE4/UE5 “无法双击打开.uproject 点击无反应“解决

一、方法一:运行UnrealVersionSelector.exe 1.找到Epic Game Lancher的安装目录, 在lancher->Engine->Binaries->Win64->UnrealVersionSelector.exe 2.把UnrealVersionSelector.exe 分别拷贝到UE4 不同版本引擎的 Engine->Binaries->…

【Modbus通信实验二】VC++编写串口调试助手

编写串口调试助手并能在虚拟机中实现虚拟端口通信。步骤如下: 项目中引入Microsoft Communications Control组件,并编写串口初始化函数。 void CMODBUSDlg::initcomm() {//串口状态,避免重复打开串口CommOpenFlag FALSE;//设置串口端口号…

Maven构建工具下载与配置(图文详细)

一.下载安装 1.找到官网 2.进行下载 3.解压文件到想要的目录 二.系统配置 配置本地仓库localRepository 1.配置本地仓库位置xml 为了方便管理,在apache-maven-3.9.4目录下创建mvn_rep 2.找到ocalRepository标签 3.设置本地仓库路径 配置私服(由于正常…

2023年7月京东空调行业品牌销售排行榜(京东数据运营)

上半年空调市场的热度较高,尽管受家电市场整体环境的影响,同比来看空调销量销额有一定幅度的下滑,但从环比来看,空调市场的销量销额纷纷翻倍增长。不过,进入7月份,空调市场整体就比较低迷了。 根据鲸参谋平…

matlab中exp和expm的区别

exp()为数组 X 中的每个元素返回指数 e x e^{x} ex expm()计算 X 的矩阵指数。 两个函数传入矩阵后计算的结果是不同的,千万不能混淆。之前曾经想当然得把exp里传入矩阵当矩阵指数使用,也未验证正确性,实不应该。

Viobot开机指南

0.前言 本篇旨在让每个拿到Viobot设备的用户都能够第一时间测试它的效果,以及将设备配置到自己的环境下面。 1.上电 首先,我们先要把设备接上电源线和网线,最简单的方式就是网线直连电脑。 电源选用12V1.5A设备自带的电源即可。 2.配置网…

免费的苹果笔记本清理内存软件CleanMyMac X

苹果笔记本如何清理内存?CleanMyMac X给你支招。随着时间的推移,苹果笔记本的内存可能会变得拥挤,导致性能下降。不过,你不必担心,因为我们有一种解决方案,能够帮助你优化你的苹果笔记本的内存使用效率。Cl…

小型气象站——智能监测、多要素集成

小型气象站是一种简易的气象监测设备,具有智能监测、多要素集成、便于安装携带的特点,能够让人们随时随地获取当地的气象信息,接下来,就让我们介绍一下它的基本信息吧。 1.小型气象站的概念 小型气象站可以同时测量风速、风向、…

「Python|aiohttp|并发与协程」将HTTP请求提速成百上千倍!一次性掌握把requests请求改成协程的通用方法

本文主要介绍如何通过使用aiohttp库将同步的http请求改成异步方式请求,从而降低等待网络IO过程中时间和计算资源的浪费。 主要包括如何将常见的requests请求改用aiohttp异步执行以及如何将异步的批量请求方法封装成普通方法/同步调用方式,给业务模块调用…

Docker容器进入的4种方式(推荐最后一种)

Docker容器进入的4种方式【推荐最后一种】 在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法。 一、使用docker attach进入Docker容器二、…

问题解决 | 关于torch中遇到的错误及解决

本博客主要解决在torch使用中遇到的问题与解决~ 1.安装相关问题 1.1.conda虚拟环境内无法安装torch(pip install torch ) 解决方案: 如果是GPU版本,先查看cuda版本如果nvcc -V 命令运行后出来的是cuda11.3的话,其他…

修改 el-select 背景图 样式

1. 原图------------效果图 2. css /***********大的背景图***************/ .el-popper.is-pure {background: url(/src/assets/imgList/memuBG.png) no-repeat;border: none;background-size: 100% 100%; }/*********选中行的字体***********/ .el-select-dropdown__item.s…

【数据库系统】--【3】DBMS数据组织

DBMS数据组织 01关系表的数据组织02索引的数据组织03元数据的数据组织04数据组织的优化 01关系表的数据组织 02索引的数据组织 03元数据的数据组织 04数据组织的优化 小结. ●关系表的数据组织 ●索引的数据组织 B树索引HASH索引Bitmap索引 ●元数据的数据组织 ●数据组织的优…

一文了解汽车芯片的分类及用途介绍

汽车芯片按其功能可分为控制类(MCU和AI芯片)、功率类、传感器和其他(如存储器)四种类型。市场基本被国际巨头所垄断。人们常说的汽车芯片是指汽车里的计算芯片,按集成规模可分为MCU芯片和AI芯片(SoC芯片&am…