卷积网络基础知识---Group Convolution分组卷积

本文深入探讨了GroupConvolution分组卷积的概念及其在深度学习中的应用,包括DepthwiseConvolution和GlobalDepthwiseConvolution。从AlexNet引入,讨论了分组卷积如何通过减少参数量来提高效率,并详细解释了其工作原理。最后,比较了不同类型的卷积在参数量和计算效率上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution

https://www.cnblogs.com/shine-lee/p/10243114.html

写在前面
Group Convolution分组卷积,最早见于AlexNet——2012年Imagenet的冠军方法,Group Convolution被用来切分网络,使其在2个GPU上并行运行,AlexNet网络结构如下:

在这里插入图片描述
Convolution VS Group Convolution
在介绍Group Convolution前,先回顾下常规卷积是怎么做的,具体可以参见博文《卷积神经网络之卷积计算、作用与思想》。如果输入feature map尺寸为C∗H∗W,卷积核有N个,输出feature map与卷积核的数量相同也是N,每个卷积核的尺寸为C∗K∗K,N个卷积核的总参数量为N∗C∗K∗K,输入map与输出map的连接方式如下图左所示,图片来自链接:

在这里插入图片描述
Group Convolution顾名思义,则是对输入feature map进行分组,然后每组分别卷积。假设输入feature map的尺寸仍为C∗H∗W,输出feature map的数量为N个,如果设定要分成G个groups,则每组的输入feature map数量为CG,每组的输出feature map数量为NG,每个卷积核的尺寸为CG∗K∗K,卷积核的总数仍为N个,每组的卷积核数量为NG,卷积核只与其同组的输入map进行卷积,卷积核的总参数量为N∗CG∗K∗K,可见,总参数量减少为原来的 1G,其连接方式如上图右所示,group1输出map数为2,有2个卷积核,每个卷积核的channel数为4,与group1的输入map的channel数相同,卷积核只与同组的输入map卷积,而不与其他组的输入map卷积。

下图则是一个群卷积的CNN结构。filters被分成了两个group。每一个group都只有原来一半的feature map。
在这里插入图片描述

Group Convolution的用途
减少参数量,分成G组,则该层的参数量减少为原来的1G
Group Convolution可以看成是structured sparse,每个卷积核的尺寸由C∗K∗K变为CG∗K∗K,可以将其余(C−CG)∗K∗K的参数视为0,有时甚至可以在减少参数量的同时获得更好的效果(相当于正则)。
当分组数量等于输入map数量,输出map数量也等于输入map数量,即G=N=C、N个卷积核每个尺寸为1∗K∗K时,Group Convolution就成了Depthwise Convolution,参见MobileNet和Xception等,参数量进一步缩减,如下图所示

在这里插入图片描述
更进一步,如果分组数G=N=C,同时卷积核的尺寸与输入map的尺寸相同,即K=H=W,则输出map为C∗1∗1即长度为C的向量,此时称之为Global Depthwise Convolution(GDC),见MobileFaceNet,可以看成是全局加权池化,与 Global Average Pooling(GAP) 的不同之处在于,GDC 给每个位置赋予了可学习的权重(对于已对齐的图像这很有效,比如人脸,中心位置和边界位置的权重自然应该不同),而GAP每个位置的权重相同,全局取个平均,如下图所示:

在这里插入图片描述

以上参考
A Tutorial on Filter Groups (Grouped Convolution)
Interleaved Group Convolutions for Deep Neural Networks

11

<think>首先,用户的问题是关于ShuffleNetV1的分组卷积groupconvolution),用户特别请求示意图、结构图或相关解释。用户引用了四个站内引用:引用[1]是关于BatchNormalization,引用[2]是关于深度卷积(depthwiseconvolution)和通道重组(channelshuffle),引用[3]是关于ShuffleNet_V1的基础单元,提到组数g控制连接稀疏性,引用[4]是关于分组卷积的问题(GroupConvolution)。我需要专注于用户的查询:"ShuffleNetV1分组卷积示意图结构图详解"。用户想了解ShuffleNetV1中的分组卷积,特别要求示意图、结构图或详解。回顾我的系统级指令:-所有行内数学表达式必须使用$...$格式。-独立公式必须使用$$...$$格式并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-引用的段落末尾自然地添加引用标识,如[^1]。用户提到站内引用,但这些引用的内容并不是用户的真正需求,我应尽可能参考用户上一次的问题和我的回答。用户上一次的问题可能是在整个会话中,但从消息看,这是用户给出的引用列表;所以我需要基于这些引用来帮助回答。用户上一次的问题是基于这些引用查找ShuffleNetV1分组卷积的示意图或解释。我的回答应该结构化、清晰,逐步解决问题。关键点:-ShuffleNetV1使用分组卷积groupconvolution)来减少计算量。-在ShuffleNet_V1中,分组卷积用于pointwise卷积部分,以降低计算成本。-结合通道重组(channelshuffle)来解决组卷积的限制(即不同组之间缺乏交流)。-引用[3]提到组数g控制连接稀疏性,允许在相同参数下增加通道数。-引用[4]指出组卷积可能导致特征局限,通过通道重组解决这个问题。我需要提供一个详解:1.**解释分组卷积**:分组卷积是将输入特征图分成多个组,然后在每个组内部进行卷积。而不是所有输入通道都与所有输出通道相连。-数学上,标准卷积:输入C_in通道,输出C_out通道,卷积核大小为K,计算量为K*K*C_in*C_out。-分组卷积:输入分成g个组,每组C_in/g通道,输出也分成g个组,每组C_out/g通道;计算量为K*K*(C_in/g)*(C_out/g)*g=K*K*C_in*C_out/g。所以计算量减少了g倍。2.**在ShuffleNetV1的应用**:ShuffleNet单元中,使用1x1分组卷积(pointwiseconvolution)来减少计算量。-ShuffleNet单元包括:-Groupedpointwiseconvolution(1x1convwithgroups)-Channelshuffleoperationaftergroupedconv-Depthwiseconvolution(3x3convoneachchannelseparately)-Anotherpointwiseconv(possiblywithgroups)-Residualconnection3.**通道重组(ChannelShuffle)**:为了解决组卷积导致的不同组之间特征不交流的问题。通道重组是对特征图通道顺序进行随机重排,这样下一次组卷积可以混合来自不同组的信息。4.**示意图**:由于这是文本格式,我无法直接给出图像,但我可以描述结构或提供文字描述。或者,提到在论文或相关资源中可以找到。-例如,引用论文"ShuffleNet:AnExtremelyEfficientConvolutionalNeuralNetworkforMobileDevices"(XiangyuZhangetal.,2017)。-标准图:一个ShuffleNet单元通常输入,然后1x1groupedconv+BN+ReLU,然后channelshuffle,然后3x3depthwiseconv+BN+ReLU,然后1x1groupedconv+BN,最后addresidualconnectionifpossible.提供详解:-**分组卷积的目的**:减少参数和计算量,使模型更轻量,适用于移动设备。-**ShuffleNetV1的单元结构**:1.输入特征图:假设通道数为C2.Pointwisegroupedconvolution(1x1conv):将输入分成g组,每组C/g通道,输出同样分组;每个组内部执行1x1conv。3.Channelshuffle:对输出通道进行重新排序,确保后续操作能处理混合组的信息。4.Depthwiseconvolution:3x3depthwiseconv,作用于每个通道独立。5.Anotherpointwisegroupedconvolution:类似步骤2。6.如果输入输出尺寸匹配,可以加shortcutconnection做residual。-好处:通过分组减少计算量,而通道重组维持特征表达力。生成相关问题:-我应该生成2-3个相关问题。-例如:ShuffleNetV1与其他轻量级模型的比较?通道重组的具体实现?在代码中如何实现分组卷积?回答结构:1.介绍ShuffleNetV1的背景和分组卷积的作用。2.解释分组卷积的概念和在ShuffleNet中的应用。3.提供结构描述(既然无法图片)。4.涉及相关引用。5.生成相关问题。确保使用中文。最后,添加引用标识:[^1]fortheBNref,[^2]forthedepthwise,etc.,但要自然整合。我的回答:-开头:简述用户需求。-主体:-分组卷积定义。-ShuffleNetV1结构简述。-Channelshuffle作用。-结构描述。-结束:生成相关问题。</think> ### ShuffleNet V1 分组卷积详解 您的查询是关于ShuffleNet V1中的分组卷积group convolution),包括其示意图、结构图和详细解释。我将基于您提供的站内引用(特别是引用[3]和[4])以及相关论文知识,逐步解释ShuffleNet V1的分组卷积机制。ShuffleNet是一种高效的卷积神经网络(CNN),专为移动设备设计,以降低计算成本和参数数量。其核心创新之一是引入分组卷积并结合通道重组(channel shuffle)来解决组卷积的局限性。 由于本平台为文本格式,无法直接展示图像,我将用文字详细描述结构图和示意图的原理。您可以在原始论文《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices》(Zhang et al., 2017)或开源代码库(如PyTorch实现)中找到直观图示。 #### 1. **分组卷积Group Convolution)的基本概念** 分组卷积是ShuffleNet V1的关键组件,旨在减少计算量和模型大小。其原理是: - **定义**:在标准卷积中,输入特征图的所有通道都与每个输出通道相连。而分组卷积将输入特征图的通道划分为$g$个组(组数称为group number),每个组独立进行卷积操作。数学上,如果输入通道数为$C_{\text{in}}$,输出通道数为$C_{\text{out}}$,卷积核大小为$K$: - 标准卷积计算量为$K^2 \times C_{\text{in}} \times C_{\text{out}}$。 - 分组卷积(组数为$g$)计算量为$K^2 \times \frac{C_{\text{in}}}{g} \times \frac{C_{\text{out}}}{g} \times g = K^2 \times \frac{C_{\text{in}} \times C_{\text{out}}}{g}$,因此计算量减少到原来的$1/g$,同时保持输出维度不变[^3]。 - **目的**:在给定参数量限制下,使用分组卷积(如1x1卷积)允许增加输出通道数,从而提升特征表达力而不增加计算负荷。例如,在ShuffleNet V1中,组数$g$(通常在论文中取值如3或8)控制连接的稀疏性:$g$越大,输出通道数可以更大,参数效率更高[^3]。 - **问题**:纯分组卷积会导致不同组之间的特征缺乏交流(即特征局限),因为后续层只处理对应组的特征,限制了模型的表达能力[^4]。 #### 2. **ShuffleNet V1 的分组卷积机制与通道重组** ShuffleNet V1 的单元结构将分组卷积与通道重组结合,解决了特征局限问题。其核心是一个基本单元(ShuffleNet unit),分为两种类型:步长为1(输入输出尺寸相同)和步长为2(下采样)。以下是**步长为1单元**的详细结构(示意图文字描述): - **输入特征图**:尺寸$H \times W \times C$(高度×宽度×通道数)。 - **Pointwise grouped convolution(1x1分组卷积)**: - 输入通道分为$g$组(每组$C/g$通道),每个组内执行1x1卷积输出$C/g$通道。 - 示例:如果$C=24$、$g=3$,则输入分成3组(每组8通道),1x1卷积后输出8通道每组。 - 目的:降低计算量(标准1x1卷积计算量是$C \times C$,分组后减为$C \times C / g$)。 - **Channel shuffle(通道重组)**: - 对上一输出的特征通道进行重新排序(shuffle),例如使用固定规则或随机置换。 - 示例:输出通道(24通道)被随机重排,确保后续操作能混合不同组的信息。 - 目的:打破组间隔离,使特征图能跨组流动,提升模型表达能力[^4][^2]。 - **Depthwise convolution(深度卷积)**: - 执行3x3 depthwise卷积,每个通道独立处理,无跨通道交互。 - 输出尺寸相同,计算量低。 - **第二Pointwise grouped convolution(1x1分组卷积)**: - 类似第一步,但输出通道数可能与输入相同或调整。 - **Residual connection(残差连接)**: - 如果输入和输出尺寸匹配,通过shortcut连接添加残差操作。 - 单元最终输出尺寸$H \times W \times C$。 这个过程的核心是:分组卷积负责高效计算,通道重组确保信息融合。结构图示意如下(基于论文描述): ``` 输入特征图 (H × W × C) │ ├─ Pointwise分组卷积(1x1 conv,groups=g) → 通道数为C │ │ │ ├─ Batch Normalization (BN) 和 ReLU激活 │ ├─ 通道重组(Shuffle):对输出通道重排 │ ├─ 3x3 Depthwise卷积 → 输出尺寸H × W × C │ │ │ ├─ Batch Normalization (BN) 和 ReLU激活 │ ├─ Pointwise分组卷积(1x1 conv,groups=g) → 输出通道数C │ │ │ ├─ Batch Normalization (BN) │ ├─ Residual connection:添加输入(如果尺寸匹配) │ 输出特征图 (H × W × C) ``` - **总效果**:通过分组卷积,计算量显著减少(例如,在ImageNet任务上,ShuffleNet V1达到ResNet-50的性能但参数不到1/10),而通道重组解决了特征局限性问题。引用[3]指出,在ShuffleNet_V1基础单元中,组数$g$控制1×1卷积的连接稀疏性,更大的$g$允许输出通道数更大而参数几乎不变[^3]。Batch Normalization被用于加速训练[^1]。 #### 3. **与相关概念的联系** - **深度卷积(Depthwise Convolution)**:在ShuffleNet中,深度卷积用于空间特征提取,计算量更低(类似Xception)。但分组卷积更强调通道维度的分组优化[^2]。 - **优化好处**:与标准CNN相比,ShuffleNet V1的参数量和计算量大幅下降,适合移动部署。引用[4]强调,没有通道重组的分组卷积可能导致特征局限,但ShuffleNet通过重组解决了此问题[^4]。 如果您需要代码实现(如PyTorch),可以参考开源库:ShuffleNet_V1的1x1分组卷积层通常通过设置卷积层的`groups`参数实现,通道重组则需手动或使用特定函数重排通道索引。 ####
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值