ShuffleNet paper笔记(附shuffle代码)

Channel Shuffle通道洗牌 Channel Shuffle通过在网络中重新排列特征图的通道顺序来增加特征间的信息交流,有助于提升网络的表达能力,同时避免了计算上的负担。它在一些高效的深度学习架构中(如ShuffleNet)得到了广泛应用。 阅读详情

shuffleNet是一个轻量化的CNN模型,paper链接
主要面向mobile device(有限的算力)设计。
主要有2个新的operations: pointwise group convolution 和 channel shuffle

pointwise group convolution

说到pointwise group convolution,不得不先提到group convolution,
它是在AlexNet中第一次提到,详细介绍见这篇文章
在这里插入图片描述
channel分成了G个组,每个组的卷积核尺寸为C/G * K * K, C是input channel数量。
output channel数量为N,分到每个组的channel就为N/G,所以每个组需要N/G个卷积核。
大概就是这个意思。

再说一下pointwise convolution, 它就是1x1卷积。

pointwise group convolution, 就是卷积核的大小是1x1,再加上上面的分组操作。
后面再说它用在哪。

channel shuffle

然后是channel shuffle的提出,为什么要shuffle。
在这里插入图片描述

因为面临有限的计算资源下,小网络channel受限的问题,
这时可以用稀疏的channel,group convolution就是一个例子,
但是group convolution有一个副作用,就是一个特定的output channel只和一小部分的input channel有关,信息量变少了。
想增加信息量可以通过group卷积时,把每个group进一步分成sub group, 多加一些group的信息进来,
在这里插入图片描述
这种从不同的sub group里采样的做法,等效于channel shuffle.
具体怎么shuffle,
在这里插入图片描述
channel数转为矩阵,矩阵转置再压平。而且channel shuffle是可导的,因此可用在back propagation,
也就是能嵌入到网络结构中。

def channel_shuffle(x, groups):
    # type: (torch.Tensor, int) -> torch.Tensor
    batchsize, num_channels, height, width = x.data.size()
    channels_per_group = num_channels // groups

    # reshape
    #channel变为groups x channels_per_group
    x = x.view(batchsize, groups, channels_per_group, height, width)

	#转置为channels_per_group x groups
    x = torch.transpose(x, 1, 2).contiguous()

    # flatten
    x = x.view(batchsize, -1, height, width)

    return x
ShuffleNet unit

以bottleneck为例
在这里插入图片描述
左边的是bottleneck结构,中间的把1x1卷积换成1x1 分组卷积,紧跟一个channel shuffle,
最后一个1x1 分组卷积不再跟channel shuffle. 这是stride = 1的情况。
右边的是stride=2的情况,在residual的部分加上了3x3 average pooling,
同时用channel concat 代替了直接add.

整个shuffleNet的结构如下

在这里插入图片描述
stage2的第一个1x1 layer没有用分组卷积,因为channel比较少。
这个是用于imageNet分类的。

分组卷积只用在bottleneck里。
在这里插入图片描述

分组的效果比较
在这里插入图片描述
其中ShuffleNet sx表示channel缩放了多少倍
在这里插入图片描述
output channel缩放了s倍,就意味着filter个数缩放了s倍,
在这里插入图片描述
后面有实验证明channel shuffle能降低error
在这里插入图片描述

channel shuffle通道洗牌 channel shuffle 阅读详情

相关推荐

目标检测轻量化压缩

目标检测轻量化压缩 目标检测难点概述 目标检测是计算机视觉中一个重要问题,在行人跟踪、车牌识别、无人驾驶等领域都具有重要的研究价值。近年来,随着深度学习对图像分类准确度的大幅度提高,基于深度学习的目标检测算法逐渐成为主流。 自 2014 年以来,目标检测框架分为two-stage 和 one-stage 两大类,前者以经典方法 Faster R-CNN 为代表,后者以 YOLO 和 SSD 为主要...

吴建明wujianming_110117 2031

PyTorch简单理解ChannelShuffle与数据并行技术解析

和。通过重排通道来提高网络性能,尤其在 ShuffleNet 架构中显著。和分别提供了模块级数据并行的实现。适用于单节点多GPU训练,而不仅在单节点多GPU训练中表现更佳,也支持大规模的分布式训练。这些模块共同使 PyTorch 成为处理复杂、大规模深度学习任务的强大工具。

CDBmax的博客 2835

【Paper Reading】

不过欧洲的会有一个不好,就是他们的人通常英语口音很重,有些人甚至不太会说英文,所以开会和交流的时候,稍微有些费劲。《International Comference on Computer Vision》,正如很多和他一样的名字的会议一行,这样最朴实的名字的会议,通常也是这方面最nb的会议。通常比较 junior 的审稿人会更严厉一些,发现一些小问题就会倾向于给低分,而 senior 的审稿人反倒宽松一些,如果觉得论文确有可取之处,通常不会太计较一些小问题。是一个关于机器学习和计算神经科学的国际会议。

bryant_meng 4660

利用Pytorch实现ShuffleNet网络

针对组卷积的group之间没有联系的问题,作者提出了channel shuffle的思想,并且在下一个版本的网络中提出了4条如何设计高效网络的准则,还对block进行了改进。

AdjsWsgz的博客 1160

边缘侧轻量级视觉自监督学习:edgemae实战部署与优化指南

视觉自监督学习是一种让模型从无标签数据中自动学习视觉表征的技术,其核心原理是通过设计预测任务(如图像补全、对比学习)让模型理解图像的内在结构。这项技术的价值在于大幅降低对昂贵标注数据的依赖,提升模型在新场景下的泛化能力。在边缘计算场景中,轻量级视觉模型需要部署在资源受限的设备上执行实时推理。edgemae作为专为边缘设备优化的掩码自编码器框架,通过结合高掩码率、非对称编解码器和硬件协同优化等策略,实现了在树莓派等设备上的高效自监督预训练。这使得边缘设备能够利用现场无标签数据自主学习,只需少量标注即可快速适配

chouchijiao8952的博客 432

手把手教你用Multisim搭建FM直接调频电路(附完整波形分析)

本文通过Multisim仿真软件,手把手教你搭建FM直接调频电路。详细介绍了从核心概念理解、压控振荡器(VCO)参数设置、电路搭建与波形观测,到带通滤波器设计与信号优化的完整流程。通过对比滤波前后的时域波形与频谱分析,帮助读者直观理解频率调制原理,并提供了常见问题的排查思路与参数调试方法,将抽象的通信理论转化为可操作的实践技能。

weixin_29230773的博客 214

Paper Reading - Model系列 - ShuffleNet Chanel Attention

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices Paper 更多可见计算机视觉-Paper&Code - 知乎 目录 ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices Abstract Related Work Channel Shuffle 深度可分离

weixin_43953700的博客 7721

【遥感数字图像处理(朱文泉)】第一章 数字图像基础

关于图像的定义、类型、模拟图像和数字图像

甜子yu的博客 4401

ShuffleNet系列论文:从v1-v2

v1 paper:https://arxiv.org/pdf/1707.01083.pdf v2paper:https://arxiv.org/abs/1807.11164 code:本文不提供code,参见各个框架的reademe 讲道理,存在mobielnet的情况下,我对shuffleNet的用法就少了很多,最大的存在感是shuffleNetV2提出了嵌入式芯片设计网络时的准则,这个才是关键所在,其他的一般情况下还是用mobilenet比较成熟,配合检测算法用的也比较多,部署框架支持的也...

lovep1的博客 1474

一文说清STM32CubeMX中文汉化全流程(图解说明)

详细讲解STM32CubeMX中文汉化的完整流程,通过图文并茂的方式手把手教学,解决界面英文带来的使用障碍,让开发更高效。掌握stm32cubemx中文汉化技巧,提升嵌入式开发体验。

weixin_42499004的博客 6263

aic8800出现insmod: can‘t insert ‘/lib/modules/4.9.191/aic8800_fdrv.ko‘: No such device

2、如果单独编译wifi驱动,则把CONFIG_PLATFORM_UBUNTU?= y都改为CONFIG_PLATFORM_ALLWINNER?1、如果把wifi驱动嵌入到内核编译,则在makefile中加入这一句。后面再修改对应平台的交叉编译链和内核吗路径等。

mantouyouyou的博客 509

Face Paper: ShuffleNet网络详解

转载论文:http://m.blog.youkuaiyun.com/u014380165/article/details/75137111 论文:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices  论文链接:https://arxiv.org/abs/1707.01083 算法详解

BigCowPeking 1173

DeepSeek在实时计算与流处理系统中的突破性实践

对于技术决策者而言,现在正是将DeepSeek实时计算技术纳入企业架构蓝图的关键时机,那些能够率先构建实时智能能力的企业,将在数据驱动的商业竞争中赢得决定性优势。DeepSeek通过创新的流处理架构,成功将复杂事件处理(CEP)的延迟降低到亚秒级,同时保证了计算结果的精确性。DeepSeek研发的神经架构搜索(NAS)与知识蒸馏联合优化框架,可在保持模型精度的前提下,将参数量压缩至原始模型的1/100,实现边缘设备的实时AI推理。随着5G和物联网技术的普及,对实时处理能力的需求将呈指数级增长。

Programming Talk 289

Paper Reading: ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices(arXiv:1707.01083v2) Motivation 专为计算能力非常有限(例如10-150 MFLOP)的移动设备设计的模型,且弥补了之前Group convolution的缺点 Architecture Channel Shuffle for Group Convolutions 假设卷积层具有g组,其输出具有g×n个通道; 首

yzhang的博客 291

基于Python的CT骨料图像分割与STL批量导出完整指南

本文介绍了一套完整的Python解决方案,用于CT骨料图像的分割与STL导出。针对CT图像中颗粒粘连、噪声伪影等技术难点,提出基于分水岭算法的分割策略,结合距离变换与标记控制实现颗粒分离。内容包括环境配置、数据读取与预处理、Otsu阈值分割、分水岭算法实现、表面提取与STL导出等关键步骤。教程提供详细代码及解释,帮助读者从CT体数据出发,最终生成每个颗粒的三维网格文件,便于后续定量分析和数值模拟。

huanghm88的专栏 235

基于Python的雪球网投资组合数据爬取与分析实战:从入门到精通

在当今数字化投资时代,数据已成为投资者最重要的资产之一。雪球网作为中国领先的投资社交平台,汇聚了大量优质的投资组合数据,这些数据对于量化投资研究和个人投资决策具有重要价值。本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的雪球网投资组合爬虫,并深入分析获取的数据。投资组合持仓明细及变动历史投资收益率曲线与风险指标投资者操作策略与调仓频率热门行业与个股关注度。

2201_76125261的博客 920

轻量级网络ShuffleNet v1

ShuffleNet paper ShuffleNet是旷视科技提出的一种计算高效的CNN模型,其和MobileNet和SqueezeNet等一样主要是想应用在移动端。所以,ShuffleNet的设计目标也是如何利用有限的计算资源来达到最好的模型精度,这需要很好地在速度和精度之间做平衡。ShuffleNet的核心是采用了两种操作:pointwise group convolution和channel shuffle,这在保持精度的同时大大降低了模型的计算量。目前移动端CNN模型主要设计思路主要是两个方面:

like_study_cat的博客 312

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Paper Reading - Model系列 - ShuffleNet Chanel Attention_patch-unshuffle and channel attention

一般卷积操作中那么每一个filter都要和所有的feature map做卷积,然后相加作为一个卷积的结果。如图中的(a)如果引入group操作,这样每个filter不再需要和输入的全部feature map做卷积,而是和一个group中的feature map做卷积,这种操作可以大大减少计算量,且最早被AlexNet用来切分网络进行多卡训练。。且组卷积要谨慎使用,注意分组的数目同时注意避免网络碎片化。

2401_84976170的博客 377

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

shufflenet中channel shuffle原理

分组卷积 Group convolution是将输入层的不同特征图进行分组,然后采用不同的卷积核再对各个组进行卷积,这样会降低卷积的计算量。因为一般的卷积都是在所有的输入特征图上做卷积,可以说是全通道卷积,这是一种通道密集连接方式(channel dense connection),而group convolution相比则是一种通道稀疏连接方式 具体过程可见我的另一个博客 https://blo...

ding_programmer的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Channel Shuffle类

ShuffleNet 中引入了 channel shuffle, 用来进行不同分组的特征之间的信息流动, 以提高性能。而Detectron2使用的pytorch版本一般较低,没有channel shuffle这个类,因此编写这个轮子用于通道洗牌。实现了与1.11.0官方库相同的结果。官方文档:ChannelShuffle — PyTorch 1.11.0 documentation...

guhuoone的博客 1579

channel_shuffle代码实现

结构图,先将输入的图像进行通道拆分为组GConv1,每个GConv1再拆分Feature,每个GConv1的Feature进行合并GConv2,输出Output。输入图像x,拆分为groups个组,每隔组的通道数为channels_per_group。再将1和2的维度进行调换 ,就实现了Feature到GConv2。

weixin_73101319的博客 900

ShuffleNet笔记

① channel shuffle ②四条准则 ③channel spilt

qq_45200830的博客 352

深度学习第五周 ShuffleNet & EfficientNet

channel shuffle就是解决组织间信息交流的问题,通过将每个组内划分若干个小块,并将各个组织间的小块组合起来,形成新的组合的channel。提出评价检测的速度不能只关注浮点计算数,还要关注其他的影响因素,比如memory access cost(MAC,内存访问的时间成本)。上图可以得出,当单一改变这三个因素的时候大概到80%的时候就达到了饱和,但是同时改变这三个因素的时候可以获得更好的效果。本次使用的是迁移学习,但是由于识别的种类不同,需要修稿全连接层的1000类替换2各类。...

weixin_45573034的博客 2058

深度学习之路=====11=====>>ShuffleNet(tensorflow2)

tensorflow2 shufflenet

Big_SHOe的博客 1068

轻量化网络mobileNet与ShuffleNet

摘要 最近出了一篇旷视科技的孙剑团队出了一篇关于利用Channel Shuffle实现的卷积网络优化——ShuffleNet。我关注了一下,原理相当简单。它只是为了解决分组卷积时,不同feature maps分组之间的channels信息交互问题,而提出Channel Shuffle操作为不同分组提供channels信息的通信的渠道。然而,当我读到ShuffleNet Unit和Network ...

爱破破爱科研 7238
上一篇: leetcode 1323. Maximum 69 Number(最大的69数字)
下一篇: leetcode 1544. Make The String Great(变成good字符串)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值