ShuffleNet网络学习笔记

article/2025/11/10 17:33:47

目录

ShuffleNet V1

论文

介绍

Channel Shuffle

ShuffleNet v1 单元

ShuffleNet v2

论文

介绍

高效模型的设计准则

ShuffleNet V2结构

ShuffleNet v2和DenseNet

总结


ShuffleNet V1

论文

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile

https://arxiv.org/abs/1707.01083   2017年

介绍

建立更深更大卷积神经网络是当前主要趋势,但是智能手机等终端设备运算能力有限

Xceotion和ResNeXt等网络由于大量使用1*1卷积而变慢

提出使用pointwise group convolutions 来降低1*1卷积的计算复杂度

提出channel shuffle操作来应对组卷积的副作用

性能优于MobileNet

在arm架构中执行代码,最终在准确度上和AlexNet差不多的情况下,速度快13倍。

ResNeXt讲解:ResNeXt详解 - 知乎 

        分组卷积作为传统卷积和深度可分离卷积的一种折中方案在AlexNet中就已经有了,当时主要是让模型在双GPU上的训练解决训练效率问题,ResNeXt也借鉴了这种group操作改进了原本的ResNet。

        这时大量的对于整个Feature Map的Pointwise卷积成为了ResNeXt的性能瓶颈。一种更高效的策略是在组内进行Pointwise卷积,但是这种组内Pointwise卷积的形式不利于通道之间的信息流通,为了解决这个问题,ShuffleNet v1中提出了通道洗牌(channel shuffle)操作。

        在ShuffleNet v2的文章中作者指出现在普遍采用的FLOPs评估模型性能是非常不合理的,因为一批样本的训练时间除了看FLOPs,还有很多过程需要消耗时间,例如文件IO,内存读取,GPU执行效率等等。作者从内存消耗成本,GPU并行性两个方向分析了模型可能带来的非FLOPs的行动损耗,进而设计了更加高效的ShuffleNet v2。ShuffleNet v2的架构和DenseNet[4]有异曲同工之妙,而且其速度和精度都要优于DenseNet。

Channel Shuffle

回顾深度可分离卷积: 

FLOPs = Ci * K * K  * H * W + M * N * H * W 

            = M * K * K  * H * W + M * N * H * W

由上式转换深度卷积和Pointwise卷积不同之处就是前者K*K=15(大多数场景反而是3*3),后者是N,一般N的值远大于15,因此深度可分离卷积压力都在1*1卷积上,那么如果逐点卷积采用分组策略分为g组,那么

FLOPs = M * K * K  * H * W + (M * N * H * W)/ g 这样就解决了性能瓶颈问题了,但是正如上文说到的,分组后组内Pointwise卷积会导致通道之间的信息流通被阻断。

        因此ShuffleNet的通道洗牌思想就横空出世了

通道洗牌+pointwise group convolutions的流程:

        在上图中的Feature这一步,先把Feature Map(形状为h*w*c)的c个通道分成g组,然后重组顺序后,再按照组内Pointwise卷积进行操作。

ShuffleNet v1 单元

b和c介绍了ShuffleNet v1全部的实现细节:

        ShuffleNet v1的上下两个1*1的卷积会采用分组1*1卷积,分组 g 一般不会很大,论文中的几个值分别是1,2,3,4,8。当g=1时退化为Xception,g需要被通道整除。

        在第一个 1*1 卷积之后添加一个Channel Shuffle操作。
        如图c中需要降采样的情况,左侧shortcut部分使用的是步长为2的 3*3 平均池化,右侧使用的是步长为2的 3*3 的Depthwise卷积。
        去掉了 3*3 卷积之后的ReLU激活,目的是为了减少ReLU激活造成的信息损耗,原因和MobileNet v2一样。
        如果进行了降采样,为了保证参数数量不骤减,往往需要加倍通道数量。所以在图c中使用的是拼接(Concat)操作用于加倍通道数,而图b中则是一个单位加。

ShuffleNet v2

论文

ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

https://arxiv.org/abs/1807.11164  2018年

介绍

        之前我们统一使用FLOPs作为评估一个模型的性能指标,但是在ShuffleNet v2的论文中作者指出这个指标是间接的,因为一个模型实际的运行时间除了要把计算操作算进去之外,还有例如内存读写,GPU并行性,文件IO等也应该考虑进去。最直接的方案还应该回归到最原始的策略,即直接在同一个硬件上观察每个模型的运行时间。如图4所示,在整个模型的计算周期中,FLOPs耗时仅占50%左右,如果我们能优化另外50%,我们就能够在不损失计算量的前提下进一步提高模型的效率。

        在ShuffleNet v2中,作者从内存访问代价(Memory Access Cost,MAC)和GPU并行性的方向分析了网络应该怎么设计才能进一步减少运行时间,直接的提高模型的效率。

高效模型的设计准则

当输入通道数和输出通道数相同时,MAC最小

MAC与分组数量 g 成正比

网络的分支数量降低并行能力

Element-wise操作是非常耗时的

        总结一下,在设计高性能网络时,我们要尽可能做到:

  1. 使用输入通道和输出通道相同的卷积操作;
  2. 谨慎使用分组卷积;
  3. 减少网络分支数;
  4. 减少element-wise操作。

        例如在ShuffleNet v1中使用的分组卷积是违背2的,而每个ShuffleNet v1单元使用了bottleneck结构是违背1的。MobileNet v2中的大量分支是违背3的,在Depthwise处使用ReLU6激活是违背4的。

ShuffleNet V2结构

        仔细观察(c),(d)对网络的改进我们发现了以下几点:

        在(c)中ShuffleNet v2使用了一个通道分割(Channel Split)操作。这个操作非常简单,即将 c 个输入Feature分成 c -  两组,一般情况下  。这种设计是为了尽量控制分支数,为了满足G3。
        在分割之后的两个分支,左侧是一个直接映射,右侧是一个输入通道数和输出通道数均相同的深度可分离卷积,为了满足G1。
        在右侧的卷积中,1*1 卷积并没有使用分组卷积,为了满足G2。
        最后在合并的时候均是使用拼接操作,为了满足G4。
        在堆叠ShuffleNet v2的时候,通道拼接,通道洗牌和通道分割可以合并成1个element-wise操作,也是为了满足G4。
        最后当需要降采样的时候我们通过不进行通道分割的方式达到通道数量的加倍,如图6.(d),非常简单。

ShuffleNet v2和DenseNet

        ShuffleNet v2能够得到非常高的精度是因为它和DenseNet有着思想上非常一致的结构:强壮的特征重用(Feature Reuse)。在DenseNet中,作者大量使用的拼接操作直接将上一层的Feature Map原汁原味的传到下一个乃至下几个模块。从6.(c)中我们也可以看处,左侧的直接映射和DenseNet的特征重用是非常相似的。

        不同于DenseNet的整个Feature Map的直接映射,ShuffleNet v2只映射了一半。恰恰是这一点不同,是ShuffleNet v2有了和DenseNet的升级版CondenseNet[8]相同的思想。在CondenseNet中,作者通过可视化DenseNet的特征重用和Feature Map的距离关系发现距离越近的Feature Map之间的特征重用越重要。ShuffleNet v2中第 i 个和第 i + j 个Feature Map的重用特征的数量是 。也就是距离越远,重用的特征越少。

总结

        截止本文截止,ShuffleNet算是将轻量级网络推上了新的巅峰,两个版本都有其独到的地方。

        ShuffleNet v1中提出的通道洗牌(Channel Shuffle)操作非常具有创新点,其对于解决分组卷积中通道通信困难上非常简单高效。

        ShuffleNet v2分析了模型性能更直接的指标:运行时间。根据对运行时间的拆分,通过数学证明或是实验证明或是理论分析等方法提出了设计高效模型的四条准则,并根据这四条准则设计了ShuffleNet v2。ShuffleNet v2中的通道分割也是创新点满满。通过仔细分析通道分割,我们发现了它和DenseNet有异曲同工之妙,在这里轻量模型和高精度模型交汇在了一起。

        ShuffleNet v2的证明和实验以及最后网络结构非常精彩,整篇论文读完给人一种畅快淋漓的感觉,建议读者们读完本文后拿出论文通读一遍,你一定会收获很多。

参考:ShuffNet v1 和 ShuffleNet v2 - 知乎


http://chatgpt.dhexx.cn/article/6tF7ZGUe.shtml

相关文章

shuffleNet系列

目录 分组卷积 分组卷积的矛盾——计算量 分组卷积的矛盾——特征通信 channel shuffle ShuffleNet V1 ShuffleNet基本单元 ShuffleNet网络结构 对比实验 ShuffleNet V2 设计理念 网络结构 对比实验 分组卷积 Group convolution是将输入层的不同特征图进行分组&a…

Shufflenet解读

论文:ShuffleNet: AnExtremely Efficient Convolutional Neural Network for Mobile Devices 论文提到模型加速的方法为: 1) 修剪网络,减少分支(pruningnetwork connections)。 2) 对于一个…

ShuffleNet模型解读

原文链接::https://arxiv.org/abs/1707.01083 Abstract 论文提出了一种计算效率极高的卷积神经网络结构——ShuffleNet,它是专门为计算能力有限的移动平台设计的。这个新结构用来两个新操作——逐渐群卷积(pointwise group convulution)和通…

ShuffleNet

ShuffleNetV2 的构建模块。首先,卷积步长为 1 的瓶颈块中,先将输入特征按通道一分为二,化成两个分支来 代替原先的分组卷积结构,并且每个分支中的卷积层都 是保持输入输出通道数相同。其中一个分支不采取任何操作以减少参数量和计…

轻量级网络——ShuffleNetV2

文章目录 1.ShuffleNetV2的介绍2.ShuffleNetV2的四条实用指南G1) Equal channel width minimizes memory access cost (MAC)G2) Excessive group convolution increases MACG3) Network fragmentation reduces degree of parallelismG4) Element-wise operations are non-negli…

轻量化网络结构——ShuffleNet

论文:《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices》—Face 1.shuffle具体来说是channel shuffle,是将各部分的feature map的channel进行有序的打乱,构成新的feature map,以解决group…

【论文阅读】ShuffleNet——ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

文章目录 论文阅读代码实现modeltrainpredict 实验结果 论文阅读 感谢P导 ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 文章中提出了一个非常有效的Architecture——ShuffleNet,主要使用两种操作,分组PW卷积…

ShuffleNet V1、V2 EfficientNet 迁移学习

一、ShuffleNet V1 ShuffleNet Unit中全是GConv和DWConv。 在左侧的网络结构中,对于输入特征矩阵,有串行的GConv1和GConv2,对于普通的组卷积的计算,只针对该组内的channel的信息进行计算。组卷积虽然能够减少参数和计算量&#xf…

论文阅读笔记:ShuffleNet

1. 背景 由于深度学习模型结构越来越复杂,参数量也越来越大,需要大量的算力去做模型的训练和推理。然而随着移动设备的普及,将深度学习模型部署于计算资源有限基于ARM的移动设备成为了研究的热点。 ShuffleNet[1]是一种专门为计算资源有限的…

轻量级神经网络——shuffleNet

文章目录 轻量级神经网络——shuffleNetshuffleNet1逐点分组卷积(Pointwise group convolution)✨✨✨通道重排(channel shuffle)✨✨✨shuffleNet Unit✨✨✨shuffleNet1的网络结果和效果 轻量级神经网络——shuffleNet shuffleNet1 在之前,已经讨论过一种轻量级神…

【zynq】‘Underfined reference Xil_out 32’报错解决方法

在zynq book Exercise 4A实验中,按照文档流程会报错‘Underfined reference Xil_out 32’。没有找到#include "xil_io.h"。无法直接在”led_controller.h”中加入”xil_io.h”。 可以在"xparameters.h"加入#include“xil_io.h”解决。 插入后l…

vivado SDK Underfined reference Xil_out 32’。

在黑金ZYNQ 实验中,按照文档流程会报错‘Underfined reference Xil_out 32’。 如下图所示,网上提示是没有xil_io.h 解决办法 在文件中添加#include "xil_io.h"即可解决这个问题。

xil_printf打印遇到的问题

xil_printf打印遇到的问题 使用xil_printf打印遇到的问题解决方法 使用xil_printf打印遇到的问题 最近在使用vitis做zynq的开发。 在使用xil_printf函数的时候发现打印会出现一些问题: 使用xil_printf函数打印“%f”时,没有打印出来数据, x…

第九节,ZYNQ的双核启动

ZYNQ的双核启动 1 双核运行原理 ZYNQ是一种主从关系的AMP架构,通过松散耦合共享资源,允许两个处理器同时运行自己的操作系统或者裸机应用程序,在各自运行自己的程序或者系统的时候,可以通过共享内存进行双核之间的交互。双核启动…

ZYNQ基本使用(4) 中断 -- 私有定时器中断

目录 中断 中断简介 私有、共享和软中断 通用中断控制器GIC 复位和时钟 模块图 CPU中断信号直通 功能说明 软件生成的中断 SGI CPU私有外设中断PPI 共享外围中断SPI 硬件系统 软件系统 私有定时器中断 函数API 参考 中断 中断简介 UG585 CH7 Interrupts 以下…

Zynq-PS-SDK(4) 之 GIC 配置

目录 1、Configuration 2、GIC SDK Architecture 2.1、Structures 2.1.1、GIC interrupt vector table 2.1.2、GIC info 2.1.3、GIC 2.2、Functions 2.2.1、Basic 2.2.2、APIs 2.3、Configure flow 2.3.1、XScuGic_LookupConfig 2.3.2、XScuGic_CfgInitialize 2.3…

Xilinx软件开发:FreeRTOS快速入门

目录 第一章. 测试环境和软件版本 第二章. 创建hello world 第三章. 创建FreeRTOS2 第四章. 增加两个任务 1. 增加任务 2. 增加计数 第五章. 发送增加延时 第六章. 接收增加消息判断 第七章. 创建两个生产者 第八章. 注意事项 1. …

关于xilinx vitis 中的报错“fatal error: xil_printf.h: No such file or directory helloworld.c“问题解决

问题源:此问题是由于在VIVADO中使用了自动有AXI—IP造成的; 分析:在自定义了AXI-IP之后,会在自定义IP文件夹下生成“makefile”文件,该文件用于在vitis中生成对应文件的,所以需要修改你自定义IP的文件下的…

Vivado2019.1 ZYNQ7020无Uart SDK调试打印调试信息xil_printf

Vivado2019.1 ZYNQ7020无Uart SDK调试打印调试信息xil_printf Vivado2019.1 ZYNQ7020无Uart SDK调试打印调试信息xil_printf 前提条件:步骤: ** Vivado2019.1 ZYNQ7020无Uart SDK调试打印调试信息xil_printf ** 前提条件: Vivado 2019.1已…

ZYNQ开发中SDK输出串口选择以及打印函数print、printf、xil_printf的差别

ZYNQ开发系列——SDK输出串口选择以及打印函数print、printf、xil_printf的差别 前言两个串口到底是谁在打印?print 和 printf 和 xil_printf 前言 在最初的helloworld工程中,我们实现了通过串口每个1秒钟打印一次Hello World。 这里我们就来搞清楚以下…