轻量级神经网络——shuffleNet2

简介: 详细介绍轻量级神经网络——shuffleNet2

轻量级神经网络——shuffleNet

shuffleNet2

  通过对shuffleNet1的讲解,相信大家已经对分组卷积和通道重排有了清晰的认识。那么shuffleNet2相较于shuffleNet1有什么不同之处呢?下面就让我们一起来学习学习✈✈✈

  在shuffleNet2论文开始,文章就指出了一个观点:使用广泛使用的FLOPs来度量一个网络的运算量是不全面的,也通过实验表明即使具有相同的FLOPs,也会有不同的速度,如下图所示。【图中横坐标表示FLPOs的大小,纵坐标表示速度】

image-20220301195124593

  使用间接测量网络速度的FLOPs不准确,是因为还有别的因素影响着网络的速度。下图展示了在网络整个运行时间被分解为不同的部分。我们注意到FLOPs度量只考虑了卷积部分。虽然这部分操作耗费的时间最多,但其他操作包括数据I/O、数据转移和元素操作(AddTensor、ReLU等)也会占用大量的时间。因此,FLOPs对实际运行时的估计不够精确。

image-20220301200720892

  基于这一观察,论文从几个不同的方面对运行时(或速度)进行了详细的分析,并得出了高效的网络架构设计的4个实用指南。

 

G1:输入输出通道数相同,MAC最小✨✨✨

  MAC为内存访问量,不会计算的请移步神经网络参数量、计算量(FLOPS)、内存访问量(AMC)计算详解。由于现代网络通常采用深度可分离卷积,1x1的逐点卷积占了很大一部分的运算量。论文中以1x1的卷积核为例,假设输入通道数量为C1,输出通道数量为C2,特征图大小为hxw,则1x1的卷积的FLOPs=hwC1C2。我们还可以通过不等式进行相关推导,如下图:当C1=C2时,MAC取最小值。

image-20220301204721069

  论文中不仅给出了证明,同时也做了一系列的对照实验来证明,下表为不同输入输出通道比(C1:C2)下GPU和CPU下网络的处理速度,可以发现当C1=C2时,网络处理的速度最快。【注意:这里要控制FLOPs不变,因此不仅调节C1、C2的比例,还会将他们的通道数进行一定的改变以达到FLOPs不变】

image-20220301204921948

 

G2:分组数过大的分组卷积会增加MAC✨✨✨

​  首先需要知道分组卷积的计算量和参数量都是普通卷积的$\frac{1}{g}$(假设分组的组数为g)。接下来我们仍然可以做一些算术推导证明结论。由下图可知,MAC和分组数成正相关,即分组卷积的分组数越大,MAC越大。

image-20220301211511567

  同样的,论文中对这部分也做了一系列的对照实验,下表为不同分组g下GPU和CPU下网络的处理速度,可以发现分组数越大,网络的处理速度越慢。【注意:同样需要保持FLOPs不变,这里也是通过改变通道数c来调节FLOPs的,后面的所有对照实验都是保持FLOPs不变的】

image-20220301212801628
 

G3:碎片化操作对并行加速不友好

  这部分没有公式上的推导,作者认为碎片化的结构虽然有利于提高精度,但可能会降低效率,因为它不利于GPU等有强大并行计算机能力的设备,还引入了额外的开销。这一结构论文中通过实验也进一步得到证明,可以发现,下图中随着分支的增加,网络速度再GPU这种并行能力强的硬件上速度大幅减少,在CPU上相对降低较少。

image-20220301213825527

  下图为上表中几种结构的图示。

image-20220301214445385
 

G4:逐元素操作带来的内存和耗时不可忽略✨✨✨

  逐元素的操作在作者看来对耗时的影响也是不可忽略的,逐元素的操作包括Relu、Add等等。这部分同样没有理论上的证明,作者做了一系列的对照实验来进行说明。下表展现了是否有Relu和short-cut对网络速度的影响,结果显示没有Relu和short-cut时网络速度更快。

image-20220302112844231

 


shuffleNet2 unit✨✨✨

  基于上述的四个准则和实验验证,得出一个高效的网络结构应该:

  1. 使用“平衡卷积”,即输入输出的通道数应相等
  2. 意识到使用分组卷积的代价
  3. 降低网络的碎片化程度
  4. 减少逐元素操作

  有了这些准则,shuffleNet网络结构就被巧妙的设计出来了,如下图所示:

image-20220302145417410

(a)、(b)为shuffleNet1;(c)、(d)为shuffleNet2


 
 

 

  在上一篇文章中,已经分析过shuffleNet1的结构,即(a)、(b)。这里着重来看看shuffleNet2的基础单元和下采样单元。先来看(c),首先是Channel Split操作,将含c个通道的输入特征图一分为二,一部分含c'个通道,则另一部分还c-c'个通道(论文中是这样表述的,通常是将输入通道数平均分成两份)。左侧分支是一个恒等映射,右侧分支是三个卷积操作,最终将两部分Concat在一起。【注意:这里使用的是Concat,不是Add,因此没有了逐元素操作带来的耗时,满足G4;俩部分Concat结合在一起时,输入输出的通道数是一致的,满足G1】再来看右侧的三个卷积,注意这时没有采用shuffleNet1提出的分组卷积,而是仅仅使用1x1卷积,没有使用分组卷积自然不要channel shuffle,3x3的DWConv没有进行改变。【注意:这里的三次卷积同样会满足输入输出的通道数相等,满足G1;没有使用分组卷积满足G2】最后就是Concat后又进行了一次Channel shuffle【注意:这里虽然没有使用通道重排,但Split操作是类似channel shuffle的,但又没有使用分组卷积,十分巧妙!!!】

  至于(d)是shuffleNet2的下采样模块,和(c)是非常类似的。主要的改变是将DWConv的步长s调整为2,并删除了channel Split的操作。这样做的目的就是要下采样,使特征图尺寸减半,通道数翻倍。

  可能细心的读者发现上文我们没有谈及准则G3,因为我感觉仅从G3来说,shuffleNet2的结构和shuffleNet1结构在整体上还是很像的,没有什么多余分支。而且我们也不能过度的追求G3,这样会使网络过度简单,虽然速度快,但却牺牲了准确度。论文中就拿MobileNetv1举例进行了论证。

image-20220302154258999

 

shuffleNet2的网络结构和效果

  这个网络结构每一步的变化也非常的好分析(0.5x,1x这些是宽度超参数),这里不再赘述,不明白的可以参考我之前的博客【文中会对网络变化后特征图的尺寸改变有详细分析】。

image-20220302160759548
 

  下面再来看看shuffleNet2的模型效果【表中速度方面基本都是MobileNetv1比较快,但其准确率较低,原因已经再上一节中说明】

image-20220302161534799
 

上一篇:轻量级神经网络——shuffleNet1
 
 
如若文章对你有所帮助,那就🛴🛴🛴

咻咻咻咻~~duang\~~点个赞呗
相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
8月前
|
机器学习/深度学习 计算机视觉 iOS开发
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
425 0
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
|
8月前
|
机器学习/深度学习 存储
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
481 15
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
|
8月前
|
机器学习/深度学习 计算机视觉 iOS开发
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
461 12
|
8月前
|
机器学习/深度学习 存储
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
292 0
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
|
11月前
|
机器学习/深度学习 计算机视觉 Python
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力本文提出了一种简单且高效的卷积神经网络(ConvNets)注意力模块——SimAM。与现有模块不同,SimAM通过优化能量函数推断特征图的3D注意力权重,无需添加额外参数。SimAM基于空间抑制理论设计,通过简单的解决方案实现高效计算,提升卷积神经网络的表征能力。代码已在Pytorch-SimAM开源。
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
|
机器学习/深度学习 Web App开发 人工智能
轻量级网络论文精度笔(一):《Micro-YOLO: Exploring Efficient Methods to Compress CNN based Object Detection Model》
《Micro-YOLO: Exploring Efficient Methods to Compress CNN based Object Detection Model》这篇论文提出了一种基于YOLOv3-Tiny的轻量级目标检测模型Micro-YOLO,通过渐进式通道剪枝和轻量级卷积层,显著减少了参数数量和计算成本,同时保持了较高的检测性能。
420 2
轻量级网络论文精度笔(一):《Micro-YOLO: Exploring Efficient Methods to Compress CNN based Object Detection Model》
|
机器学习/深度学习 编解码 算法
轻量级网络论文精度笔记(三):《Searching for MobileNetV3》
MobileNetV3是谷歌为移动设备优化的神经网络模型,通过神经架构搜索和新设计计算块提升效率和精度。它引入了h-swish激活函数和高效的分割解码器LR-ASPP,实现了移动端分类、检测和分割的最新SOTA成果。大模型在ImageNet分类上比MobileNetV2更准确,延迟降低20%;小模型准确度提升,延迟相当。
415 1
轻量级网络论文精度笔记(三):《Searching for MobileNetV3》
|
编解码 人工智能 文件存储
轻量级网络论文精度笔记(二):《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object ..》
YOLOv7是一种新的实时目标检测器,通过引入可训练的免费技术包和优化的网络架构,显著提高了检测精度,同时减少了参数和计算量。该研究还提出了新的模型重参数化和标签分配策略,有效提升了模型性能。实验结果显示,YOLOv7在速度和准确性上超越了其他目标检测器。
307 0
轻量级网络论文精度笔记(二):《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object ..》
|
数据采集 资源调度 JavaScript
Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
【8月更文挑战第4天】Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
237 5
|
机器学习/深度学习 计算机视觉 网络架构
【YOLOv8改进- Backbone主干】YOLOv8 更换主干网络之 PP-LCNet,轻量级CPU卷积神经网络,降低参数量
YOLO目标检测专栏介绍了PP-LCNet,一种基于MKLDNN加速的轻量级CPU网络,提升了模型在多任务中的性能。PP-LCNet利用H-Swish、大核卷积、SE模块和全局平均池化后的全连接层,实现低延迟下的高准确性。代码和预训练模型可在PaddlePaddle的PaddleClas找到。文章提供了网络结构、核心代码及性能提升的详细信息。更多实战案例和YOLO改进见相关链接。

热门文章

最新文章