旷视轻量化网络shufflenet算法解读

目录

预备知识

 1. 回顾MobileNet V1的核心思想---深度可分离卷积

2.ShuffleNet主要有两个创新点

2.1 分组卷积与1×1分组卷积

2.2  channel Shuffle(通道重排)

2.3 通道重排过程 

3. ShuffleNet网络结构

3.1 ShuffleNet unit

3.2  不同分组数的ShuffleNet网络结构

4. ResNet、ResNeXt、ShuffleNetV1 基本单元 FLOPs 对比

5. 推荐阅读

预备知识

卷积神经网络概述
https://www.bilibili.com/video/BV1sb411P7pO
https://www.bilibili.com/video/BV1gb411P7JD
卷积神经网络精讲
https://www.bilibili.com/video/BV1K7411W7So?p=5
https://www.bilibili.com/video/BV1K7411W7So?p=6
经典卷积神经网络结构
https://www.bilibili.com/video/BV1K7411W7So?p=11
谷歌轻量化卷积神经网络MobileNet V1
https://www.bilibili.com/video/BV16b4y117XH

 

 1. 回顾MobileNet V1的核心思想---深度可分离卷积

Howard 等人提出的 MobileNet V1利用深度可分离卷积对标准的卷积操作进行了分解,如图3所示.
深度可分离卷积可分为深度卷积(
depthwise convolution)和逐点卷积(pointwise convolution)两个操作:
(1)深度卷积对于每个输入通道采用不同的卷积核
,即一个通道对应一个卷积核,卷积操作是按照通道进行分解的;
(2)逐点卷积是卷积核大小为
1×1 的标准卷积,作用在输入的所有通道上,将来自不同通道的特征进行融合.
      对于任意大小的图像,应用深度可分离卷积能节省多少时间呢?假设对于一个大小为 H×W×D 的输入图像,我们要进行 2D 卷积(步幅=1,填充=0),使用 Nc 个大小为 h×h×D 的卷积核。这将把输入层 (H×W×D) 转换为输出层 (H−h+1×W−h+1×Nc)。所需的乘法运算总量为:Nc×h×h×D×(H−h+1)×(W−h+1)。

另一方面,对于相同的转换,深度可分离卷积所需的乘法运算总量为:
D×h×h×1×(H−h+1)×(W−h+1)+Nc×1×1×D×(H−h+1)×(W−h+1) =(h×h+Nc)×D×(H−h+1)×(W−h+1)。
深度可分离卷积和二维卷积之间的乘法运算比率是:

简化后得到:

对于大多数现代架构来说,输出层通常有许多通道,例如几百个甚至几千个【这样会导致深度可分离卷积的主要计算量集中在 1×1 的逐点卷积上。】。在这样的层中(Nc>>h),上述表达式简化为 1/(h×h)。这意味着在这种渐近情况下,如果使用 3 x 3 的滤波器,2D 卷积的计算量是深度可分卷积的 9 倍;如果使用 5 x 5 的滤波器,则是 25 倍。
深度可分离卷积的主要计算量集中在 1×1 的逐点卷积上还可根据MobileNet论文中表2.

该图来自MobileNet论文


因此:深度可分离卷积的主要计算量集中在 1×1 的逐点卷积上。为解决这个问题,ShuffleNet提出了 Group 逐点卷积,将逐点卷积进行分组卷积操作,以降低在逐点卷积操作方面的计算消耗。

2.ShuffleNet主要有两个创新点

Group Pointwise Convolution(1×1分组卷积);channel Shuffle(通道重排)。

2.1 分组卷积与1×1分组卷积

      分组卷积(Grouped Convolutions)是一种卷积操作,最早由 AlexNet 引入并在 ResNeXt 和 MobileNet 等模型中广泛使用。与传统的卷积不同,分组卷积将输入特征通道分成多个小组,并在每个小组上分别进行卷积操作,最后将各个组的结果进行拼接。它可以减少计算复杂度,提高卷积操作的效率,特别是在处理大量特征通道时。

https://arxiv.org/pdf/1711.09224

上图来源:CondenseNet: An Efficient DenseNet using Learned Group Convolutions
标准卷积参数量:3×3×12×6=648;分组卷积参数量:3×3×(12/3)×(6/3)*3=216

1×1 分组卷积是分组卷积的一种特殊情况,其中卷积核的大小为 1×1。1×1 卷积本身已经是一个非常高效的操作,通常用于降低通道维度或进行通道间的线性组合。而通过在 1×1 卷积中引入分组卷积,则可以进一步减少计算量。

1×1 分组卷积的原理:

  • 1×1 卷积:使用 1×1 大小的卷积核,只在通道维度上进行计算,不改变空间维度。它的作用通常是对输入特征进行通道混合,即每个输出通道是输入所有通道的加权求和。

  • 分组卷积:在常规分组卷积中,输入通道被分成若干组,每个组独立应用卷积核。

将两者结合,1×1 分组卷积的操作流程如下:

  1. 将输入特征通道划分为若干组,每组单独进行 1×1 卷积。
  2. 各组之间的卷积是独立的,卷积核只在组内的通道上进行运算,组与组之间不会有任何信息共享。
  3. 最终将各个组的结果拼接成完整的输出特征图。

举例:

假设输入张量的大小为 H×W×C,其中 H 和 W 是空间尺寸,C 是通道数。若使用 1×1 分组卷积,并且将通道分成 4 组,则每个组的卷积核只作用于 C/4 个通道,输出也相应是 4 组卷积结果的拼接。

2.2  channel Shuffle(通道重排)

(a)为一般分组卷积,造成分组之间信息无法流通; (b)和图 (c)为通道混洗(channel shuffle)操作


ShuffleNet首先将输入通道分组,在每个组中进行单独的卷积运算.如果单纯地堆叠分组卷积操作,会造成各个组之间的信息无法流通,影响网络的表达能力.为了让分组卷积能够得到其他分组产生的特征,ShuffleNet 提出了混洗(shuffle)操作,将来自不同组的特征重新进行排列,使得新的分组中包含来自之前各个组的特征,保证了各个组之间的信息流通.

2.3 通道重排过程 

 

3. ShuffleNet网络结构

3.1 ShuffleNet unit

 
(a)图表示具有3×3 DWConv(depthwise convolution)卷积模块的BottleNeck模块。
(b)图表示具有1×1 GConv(pointwise group convolution) 和channel shuffle 的ShuffleNet unit。
(c)图表示stride=2时的ShuffleNet unit。

3.2  不同分组数的ShuffleNet网络结构
ShuffleNet 架构。复杂度通过 FLOPs 来评估,即浮点乘加运算的次数。需要注意的是,对于 阶段 2,我们没有在第一个逐点卷积层上应用分组卷积,因为输入通道的数量相对较少,只有24个。

 

4. ResNetResNeXtShuffleNetV1 基本单元 FLOPs(只考虑乘法) 对比

 给定输入尺寸大小为c×h×wbottleneck通道数为m。
c=256;m=64                           c=256;m=4;g=cardinality=32

5. 推荐阅读

知乎:如何看待 Face++旷视科技出品的轻量高效网络 ShuffleNet ?https://ww.zhihu.com/question/62243686
知乎:如何评价shufflenet V2 ? https://www.zhihu.com/question/287433673/answer/455350957
知乎:轻量级神经网络“巡礼”(-)-- ShuffleNetV2:https://zhuanlan.zhihu.com/p/67009992 

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

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

相关文章

AlexNet项目图片分类通用模型代码

目录 一:建立AlexNet模型(在model文件中写) 1.构造5层卷积层 2.构造3层神经网络层 3.forward函数 4.模型最终代码 二:训练数据(在train中写) 1.读出数据 2.训练 3. 测试模型更新参数 4.完整的训练…

问题——IMX6UL的uboot无法ping主机或Ubuntu

主要描述可能的方向,不涉具体过程,详细操作可以查阅网上相关教程 跟随正点原子教程测试以太网端口时,即便按照步骤多次尝试也无法ping通,后补充了些许网络工程基础知识解决了这个问题。 uboot无法ping主机或Ubuntu有多种可能&…

Redis集群知识及实战

1. 为什么使用集群 在哨兵模式中,仍然只有一个Master节点。当并发写请求较大时,哨兵模式并不能缓解写压力。我们知道只有主节点才具有写能力,那如果在一个集群中,能够配置多个主节点,是不是就可以缓解写压力了呢&…

总结拓展十:SAP开发计划(下)

第一节 接口功能开发说明书设计 1、软件系统接口作用 答:系统接口,是实现系统间数据传输的功能。 2、软件系统接口特点 1)采用Web Service技术作为平台,有众多的数据传输协议标准,通过API与外界交流数据。 2&…

Vscode搭配latex简易教程

1. 找镜像网站下载texlive的iso文件 清华源镜像 下载之后直接打开iso文件,打开install-tl-windows.bat文件,进行安装即可,安装大概30分钟左右 2. VScode端配置 2.1 下载这三个插件 2.2 打开设置 2.3 追加内容到配置json文件当中 // Latex…

14_input子系统my_touch_device,my_touch_handlerLinux内核模块

01_basicLinux内核模块_the kernel was built by:x86 64-linux-gnu-gcc-12(ub-CSDN博客文章浏览阅读678次,点赞3次,收藏3次。环境IDubuntuMakefilemodules:clean:basic.creturn 0;运行效果。_the kernel was built by:x86 64-linux-gnu-gcc-12(ubuntu 12…

贷款年利率迷局:年利率3.8%为何变成2.07%?

朋友们,聊聊贷款那点事儿,特别是那个让人又爱又恨的年利率,听起来简单,3.8%就是一年给银行3.8%的贷款总额当利息,对吧?但别急,这里头学问大着呢!有时候,你发现标着3.8%的…

keil调试变量值被篡改问题

今天遇到一个代码中变量值被篡改的问题,某个数组的第一个值运行一段时间之后变成了0,如图: 看现象基本可以断定是内存越界导致的,但是要如果定位是哪里内存越界呢? keil提供了两个工具 1、set access breakpoint at(设置访问断点…

ES6标准---【八】【学习ES6看这一篇就够了!!!】

目录 前言 export命令 输出变量 输出函数/类 export中的as别名 export必须一一对应 export接口的响应性 注意 import命令 import命令的语法 import命令里的as别名 import的只读性 import命令具有提升性 import的一些约定 import的静态执行 import的唯一执行性 模…

基于SmartUpload组件实现文件上传功能的案例

SmartUpload组件简介 SmartUpload组件 专门用于实现文件上传及下载的免费组件SmartUpload组件特点 使用简单:编写少量代码,完成上传下载功能能够控制上传内容能够控制上传文件的大小、类型缺点:目前已停止更新服务 SmartUpload组件应用 单文…

【Java】多线程前置知识 初识Thread

多线程前置知识 & 初识Thread 冯诺依曼体系结构初步认识存储设备CPU指令 操作系统初识操作系统内核态和用户态 进程/任务进程是什么进程的管理进程的调度虚拟内存地址进程间的通信 线程线程的出现线程是什么线程可能出现的问题线程与进程的联系和区别 协程初识Thread类Thre…

Java lambda表达式的变量捕获

有人看到这个lambda表达式能够访问isQuit这个变量而且还是可以被修改的变量,就发出疑问了,之前不是说lambda不能不或变量吗? 1.规则 java的lambda表达式变量捕获规则只是针对于外部作用域的局部变量来说的!!&#xf…

Linux环境变量进程地址空间

目录 一、初步认识环境变量 1.1常见的环境变量 1.2环境变量的基本概念 二、命令行参数 2.1通过命令行参数获取环境变量 2.2本地变量和内建命令 2.3环境变量的获取 三、进程地址空间 3.1进程(虚拟)地址空间的引入 3.2进程地址空间的布局和理解 …

【机器学习】:深潜智能的底层逻辑、前沿探索与未来展望】

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 在科技的浩瀚星空中,机器学习犹如一颗璀璨的新星,以其独特的魅力和无限潜力,引领着我们向智能的深处探索。今天,我们将一同踏上这场深度之旅,不仅解析…

pdf图片怎么提取出来?这6个pdf图片提取工具全搞定,值得推荐!

在我们的日常办公和学习中,pdf文件成为了信息传递的重要载体。然而,有时我们在pdf文档中发现一些精彩的图片,想将其提取出来供个人使用或分享给他人。无论是为了更灵活的处理,还是为了发送特定的图像,提取pdf中的图片都…

国产新港海岸NCS8622Type-C/DP1.4 to HDMI2.0 Converter

NCS8622是一款高性能低功耗的Type-C/DP1.4至HDMI2.0转换器,设计用于将USB Type-C源或DP1.4源连接到HDMI2.0。
 NCS8622集成了符合DP1.4标准的接收器和符合HDMI2.0标准的发射器。 此外,CC控制器用于CC通信以实现DP替代模式。
 DP接收器集成了HDCP 1.…

gazebo 仿真阶段性问题汇总二

目录 写在前面的话遇到的问题问题一:启动了多个 robot_state_publisher解决办法 问题二:rviz 启动报错解决办法 问题三:rviz 中 wheel 一直指向 base_link解决方法 问题四:摄像头和opencv坐标系的问题解决方法 问题五:…

Submariner 部署全过程

Submariner 部署全过程 部署集群配置 broker 集群: pod-cidr:11.244.0.0/16 service-cidr 11.96.0.0/12 broker 172.100.0.109 node 172.100.0.108 集群 1( pve3 ): pod-cidr:10.244.0.0/16 service-…

微信支付开发-支付工厂JsApi产品代码

一、JSAPI支付产品、APP支付产品、小程序支付产品流程图 二、H5支付产品、Native支付产品 三、工厂父类抽象类代码开发 <?php /*** 微信父类抽象类* User: 龙哥三年风水* Date: 2024/9/19* Time: 11:33*/ namespace Payment\WechatPay; abstract class WechatPaymentHandl…

翻页时钟 2.0-自动置顶显示,点击小时切换显示标题栏不显示标题栏-供大家学习研究参考

更新内容 自动置顶显示点击小时切换显示标题栏&#xff0c;&#xff08;显示标题栏后可移动时钟位置&#xff0c;鼠标拖动边框调整时钟大小&#xff09;不显示标题栏时&#xff0c;透明部分光标可穿透修正一个显示bu 下载地址&#xff1a; https://download.csdn.net/download…