ShuffleNet 系列(1): ShuffleNet v1 理论讲解

article/2025/11/10 16:50:40

ShuffleNet V1 概述

论文:ShuffleNet:An Extremely Efficient Convolutional Netural Network for Mobile Devices

ShuffleNet跟MobileNet一样也是一种轻量化网络,ShuffleNet V1.0版本中作者有提出Channel shuffle的概念。在ShuffleNet Block当中使用的基本上都是GConvDWConv
在这里插入图片描述
在这里插入图片描述
ShuffleNet v1 性能指标
在这里插入图片描述
可以看出:

  • ShuffleNet0.5xerr 率与我们AlexNet其实是差不多的(43.2% 42.8%)
  • 在晓龙820处理器上的推理时间是15.2ms,而AlexNet需要184ms
  • ShuffleNet 1x 的err率是32.6%,推理时间是37.8ms``;ShfuffleNet 2xerr率是26.3%,推理时间是108.8ms; 对比MobileNet 1.0它的err率是29.4,推理时间是110ms;可以看出ShuffleNet 2x的性能会比较好

Channel Shuffle

ShuffleNet v1论文提出了Channel Shuffle这个概念
在这里插入图片描述

  • 在这幅图中我们可以看到,对于我们的输入特征矩阵,通过串行的2个GConv(Group Conv),对于普通的组卷积计算我们发现,它每次卷积都是针对该组内的一些channel的信息进行卷积操作。如果只是简单的串联的话,你会发现它一直都是针对同一个组内的channel数据进行处理,每个group之间是没有任何交流的,这样效果肯定就不好
  • 虽然采用group conv能减少参数和运算量,如果只是直接对我们组卷积进行简单的堆叠你会发现。GConv中不同组之间的信息是没有交流的。

为了解决每个group之间是没有任何信息交流的问题,作者提出了channel shuffle的概念:

  • 首先我们还是通过我们的输入input,经过一个group conv得到它对应的特征矩阵。
  • 假设如图,Gconv划分了3个group,我们针对每个group生成的特征矩阵,在进一步划分对每个group划分了3个子group。我们将每个group当中的第一份给放到一起,将每个group的第二份也放到一起,每个group的第三份也放到一起。这样我们就得到了经过channel shuffle之后的特征矩阵了。
    在这里插入图片描述
  • 在使用经过channel shuffle之后的特征矩阵进行group卷积的话,这样它就以已经能够融合不同group之间的channel信息了。这就是channel shuffle思想。

用group卷积替换pw卷积

作者发现在ResNeXt中pw卷积占了93.4%的理论计算量,通过这个可以发现在网络上使用group卷积(对应ResNeXt中的DW卷积)占用的计算量是很小的,大部分都被1x1的普通卷积给占用了。
在这里插入图片描述

  • 所以在shuffleNet1.0版本中,作者将(a)图中的1x1卷积以及我们输出的1x1卷积,全全部都给换成了group卷积。
    在这里插入图片描述
  • 图 b 它是针对strip=1的情况,左边捷径分支直接将输入引过来了。右边部分,首先通过1x1 的GConv以及BNRelu,对得到的特征矩阵进行channel shuffle.然后通过一个3x3DWConv以及BN,紧接着通过1x1GConv,在通过BN,最后在与我们的输入特征矩阵进行相加的操作,通过Relu激活函数得到输出。
  • 图 c它是针对 shufflenet的strip=2的情况,在ResNet或者ResNeXt的网络当中,当strip=2的情况下我们在捷径分支上之前是直接通过一个卷积来进行下采样的,然后在shuffleNet网络中是通过池化层大小为3x3,步距为2的池化层进行下采样的。右边部分,首先通过1x1 的GConv以及BNRelu,对得到的特征矩阵进行channel shuffle.然后通过一个3x3DWConv这里的strip=2以及BN,紧接着通过1x1GConv,在通过BN。需要注意最后是通过Concat拼接在一起的,并没有像图a,图b一样通过add方式进行相加。通过concat拼接,然后relu输出。

ShuffleNet V1网络搭建

下表是ShuffleNet v1中作者给出的一个表,这个表格中作者给出了如何搭建我们的shuffleNet,这里我们只需要看g=3这个版本就可以了。因为原论文很多实验,都是使用当g=3这个版本,g表示的是group数.
在这里插入图片描述

  • 首先输入图片通过一个卷积核KSize为3x3,步距stride为2,重复次数Repeat为1,输出channel为24个卷积核。然后接一个池化核为3x3,步距stride为2的MaxPool.
  • 然后接Stage2Stage3Stage4,针对每个stage它就是将我们shuffleNet中的每个block进行堆叠。
  • Stage2中第一个block,它的步距为2,重复次数为1,它的输出channel为240;然后在对我们步距为1的block堆叠3次,它的输出channel为240.对于后面的Stage3,Stage4 都是通过一样的方式堆叠。
  • 经过stage 后,通过grouppool平均池化以及全连接层得到我们最终的输出。这就是我们整个shuffleNet v1的框架。
  • 对于Stage2~Stage4,它的第一个block都是一个步距为2的block,也就是上图图c所对应的block,对于其他stride=1都是采用图b所示的block.
  • 对于下个stage,输出特征矩阵的channel会进行一个翻倍的操作,stage2到stage3我们能够看到特征矩阵的channel从240到翻到了480.再从480翻到了960,这就是原文所说的翻倍操作。
  • 这里还需要注意一点,对于我们Stage 2,论文中说到对于我们第一个pw卷积(1x1)我们是不会使用GConv的,也就是对应图c的block,它的1x1卷积直接使用的是普通卷积没有用GConv,因为对于第一个pw它的input channel是非常小的,只有24.对于一个channel为24的特征矩阵。我们就没有必要使用GConv卷积了。对于其他的block都是使用GConv代替pw卷积

ShuffleNet V1轻量化

对比ResNet,ResNeXt,ShuffleNet的Flops,我们假设输入特征矩阵的channel为c, 高宽为h,w; 中间的bottleneck,这里指的是第一个1x1卷积和第2个DW卷积,它的输出channel为m,我们可以计算ResNet,ResNeXt,ShuffleNet的Flops:
在这里插入图片描述

R e s N e t : h w ( 1 ∗ 1 ∗ c ∗ m ) + h w ( 3 ∗ 3 ∗ m ∗ m ) + h w ( 1 ∗ 1 ∗ m ∗ c ) = h w ( 2 c m + 9 m 2 ) ResNet: hw(1*1*c*m) +hw(3*3*m*m) +hw(1*1*m*c) = hw(2cm+9m^2) ResNet:hw(11cm)+hw(33mm)+hw(11mc)=hw(2cm+9m2)
R e s N e X t : h w ( 1 ∗ 1 ∗ c ∗ m ) + h w ( 3 ∗ 3 ∗ m ∗ m ) / g + h w ( 1 ∗ 1 ∗ m ∗ c ) = h w ( 2 c m + 9 m 2 / g ) ResNeXt: hw(1*1*c*m) +hw(3*3*m*m)/g +hw(1*1*m*c) = hw(2cm+9m^2/g) ResNeXt:hw(11cm)+hw(33mm)/g+hw(11mc)=hw(2cm+9m2/g)
S h u f f l e N e t : h w ( 1 ∗ 1 ∗ c ∗ m ) / g + h w ( 3 ∗ 3 ∗ m ) + h w ( 1 ∗ 1 ∗ m ∗ c ) / g = h w ( 2 c m / g + 9 m ) ShuffleNet: hw(1*1*c*m) /g+hw(3*3*m) +hw(1*1*m*c)/g = hw(2cm/g+9m) ShuffleNet:hw(11cm)/g+hw(33m)+hw(11mc)/g=hw(2cm/g+9m)

  • ResNeXtblockResNet的区别是首先接一个1x1的卷积,然后接一个GConv卷积,最后接一个1x1卷积,因为GConv卷积的参数是一般卷积参数的 1 / g 1/g 1/g,所以ResNeXt第二项表达式为: h w ( 3 ∗ 3 ∗ m ∗ m ) / g hw(3*3*m*m)/g hw(33mm)/g
  • ShuffleNet v1,第一个1x1GConv,第二个为3x3GConv,第三个为1x1的GConv;第一个GConv的计算量为普通卷积的 1 / g 1/g 1/g,同理最后一个1x1的GConv的计算量为普通卷积的 1 / g 1/g 1/g;对于中间的DW卷积就是我们GConv的特殊情况,当我们的g=m的时候,当g=m时就约去了一个m,所以就有 h w ( 3 ∗ 3 ∗ m ) hw(3 * 3 *m) hw(33m)

通过这3个对比,我们就知道ShuffleNet的Flops是最小的。

总结

ShuffleNet v1网络的主要思想是:

  • 我们在GConv加上了一个channel shuffle模块
  • 对于block而言,将其中两个1x1卷积全部替换成GConv

http://chatgpt.dhexx.cn/article/q57j1SeR.shtml

相关文章

ShuffleNet心得

channel shuffle: 1)利用group ,再组间进行深度卷积。 优点:1)极大减小计算量(FLOPS) 由于每个filter不再是和输入的全部feature map做卷积,而是仅仅和一个group的feature map做卷…

ShuffleNet V2

原文链接: ShuffleNet V2 论文阅读笔记​blog.csdn.net 论文链接: Practical Guidelines for Efficient CNN Architecture Design​arxiv.org 我自己基于 caffe 框架的复现: anlongstory/ShuffleNet_V2-caffe​github.com 本文主要是对目…

【CV】ShuffleNet:通过 GroupConv 和 ChannelShuffle 实现轻量化 CNN 架构

论文名称:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 论文下载:https://arxiv.org/abs/1707.01083 论文年份:2017 论文被引:3925(2022/05/11) 论文代码&#xf…

shufflenet_v1

本文使用的是轻量级模型shufflenet,使用keras框架进行训练。 参考链接(模型详解):https://blog.csdn.net/zjn295771349/article/details/89704086 代码如下: 1.data_process.py(数据处理:这里…

ShuffleNet V1

论文:https://arxiv.org/abs/1707.01083 1 问题提出 当前的CNN发展趋势是网络越大,性能越好。但是,在计算能力有限的应用场景下(无人机、机器人及智能手机上),因为内存和计算能力的限制,无法部署大规模的神经网络。虽…

ShuffleNet 算法的介绍

引言 ShuffleNet是旷视科技最近提出的一种计算高效的CNN模型,其和MobileNet和SqueezeNet等一样主要是想应用在移动端。所以,ShuffleNet的设计目标也是如何利用有限的计算资源来达到最好的模型精度,这需要很好地在速度和精度之间做平衡。Shuf…

ShuffleNet网络学习笔记

目录 ShuffleNet V1 论文 介绍 Channel Shuffle ShuffleNet v1 单元 ShuffleNet v2 论文 介绍 高效模型的设计准则 ShuffleNet V2结构 ShuffleNet v2和DenseNet 总结 ShuffleNet V1 论文 ShuffleNet: An Extremely Efficient Convolutional Neural Network for M…

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…