MobileNet v1中 深度可分离卷积(Depthwise Separable Convolution) 是怎么回事

本文深入探讨深度可分离卷积(Depthwise Separable Convolution)在MobileNetv1中的应用,通过与标准卷积的对比,揭示其如何显著减少计算量和参数数量,适合移动端视觉任务。

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

MobileNet v1中 深度可分离卷积(Depthwise Separable Convolution) 是怎么回事

flyfish

深度可分卷积,深度可分离卷积,depthwise separable convolution
相同的意思,不同的名字

卷积是人工神经网络(ANN)中一种非常重要的数学运算。卷积神经网络(CNN)可以用来学习特征。
CNN有很多种类型,其中一类是深度可分离的卷积神经网络。

这些类型的CNN之所以被广泛使用,是因为以下两个原因:
与标准CNN相比,它们需要调整的参数数量更少,这减少了过度拟合。
它们的计算成本更低,因为它们的计算量更少,这使得它们适合于移动端视觉应用。
这些类型的CNN就像MobileNet、Xception(都是由Google提出的)

我们通过普通卷积和深度可分离卷积的计算过程对比,理解深度可分离卷积是如何减少计算量的。

正常卷积运算过程

假设有大小为Df x Df x M的输入数据,其中Df x Df是图像大小,M是通道数(对于RGB图像为3)。
假设有大小为Dk x Dk x M的N个卷积核,如果执行正常的卷积运算,则输出大小将为Dp x Dp x N。
在这里插入图片描述

1次卷积运算中的乘法次数=卷积核大小= D k ∗ D k ∗ M Dk * Dk * M DkDkM
由于有N个卷积核并且每个卷积核垂直和水平滑动 D p Dp Dp次,
乘法总数变为 N ∗ D p ∗ D p ∗ ( 每 次 卷 积 的 乘 法 ) N * Dp * Dp * (每次卷积的乘法) NDpDp()
所以对于正常的卷积运算的乘法总数= N ∗ D p 2 ∗ D k 2 ∗ M N * Dp^2 * Dk^2 * M NDp2Dk2M

深度可分离卷积的计算过程

深度可分离卷积分为深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)

1、深度卷积(Depthwise Convolution)

在深度操作中,卷积一次应用于单个通道,而不像标准CNN那样对所有M个通道进行卷积。因此,这里的卷积核的大小为 D k ∗ D k ∗ 1 Dk * Dk *1 DkDk1
假设输入数据中有M个通道,则需要M个这样的过滤器。输出的大小为 D p ∗ D p ∗ M Dp * Dp * M DpDpM
在这里插入图片描述

卷积核在所有M个通道上滑动 D p ∗ D p Dp* Dp DpDp次,
单个卷积运算的计算量是 D k ∗ D k Dk * Dk DkDk
由于卷积核在所有M个通道上滑动 D p ∗ D p Dp*Dp DpDp次,
乘法总数等于 M ∗ D p ∗ D p ∗ D k ∗ D k M * Dp * Dp *Dk * Dk MDpDpDkDk

因此,对于 深度卷积的运算乘法总数= M ∗ D k 2 ∗ D p 2 M*Dk^2 * Dp^2 MDk2Dp2

2、逐点卷积(Pointwise Convolution)

在逐点卷积运算中,在M个通道上应用1×1卷积运算。因此,此操作的卷积核大小将为 1 ∗ 1 ∗ M 1 * 1 * M 11M
假设我们使用N个这样的卷积核,则输出大小为 D p ∗ D p ∗ N Dp * Dp* N DpDpN
在这里插入图片描述

单次卷积运算需要 1 ∗ M 1*M 1M次乘法。
由于卷积核滑动 D p ∗ D p Dp*Dp DpDp次,
乘法总数等于 M ∗ D p ∗ D p ∗ ( 卷 积 核 的 数 量 ) M * Dp * Dp *(卷积核的数量) MDpDp()
因此,对于逐点卷积的运算乘法总数 = M ∗ D p 2 ∗ N =M *Dp^2 * N =MDp2N
深 度 可 分 离 卷 积 总 计 算 量 = M ∗ D k 2 ∗ D p 2 + M ∗ D p 2 ∗ N = M ∗ D p 2 ∗ ( D k 2 + N ) 深度可分离卷积总计算量 = M * Dk^2 * Dp^2 + M * Dp^2 * N = M * Dp^2 * (Dk^2 + N) =MDk2Dp2+MDp2N=MDp2(Dk2+N)

对比

[ d e p t h w i s e ] [ s e p a r a b l e ] [ c o n v o l u t i o n ] [ s t a n d a r d ] [ c o n v o l u t i o n ] = M ∗ D p 2 ∗ ( D k 2 + N ) N ∗ D p 2 ∗ D k 2 ∗ M = 1 / N + 1 / D k 2 \frac{[depthwise][ separable][ convolution]}{[standard ][convolution ]}=\frac{M * Dp^2 * (Dk^2 + N)}{N * Dp^2 * Dk^2 * M} = 1/N + 1/Dk^2 [standard][convolution][depthwise][separable][convolution]=NDp2Dk2MMDp2(Dk2+N)=1/N+1/Dk2

再看两个易于理解的图
普通卷积
在这里插入图片描述
深度可分离卷积
在这里插入图片描述
深度分离就是通道分离各自计算,然后堆叠起来,最后用1×1得到你想输出的通道数

参考

假设
输入是 7 * 7 * 3
输出是 5 * 5 * 128

标准卷积步骤一步就完成
因为 7 * 7 * 3 -》3 * 3 * 3 = 5 * 5 * 1

所以 7 * 7 * 3 -》3 * 3 * 3(128个) = 5 * 5 * 128

深度可分卷积需要经过两步

7 * 7 * 3 -》3 * 3 * 1(3个)= 5 * 5 * 3
5 * 5 * 3 -》1 * 1 * 3(128个)= 5 * 5 * 128

标准卷积计算次数
128个 3 * 3 * 3 移动了 5 * 5 次
128 * (( 3 * 3 * 3 )* ( 5 * 5 ))=128 * 675 =86400

深度可分卷积计算次数
第一步:3 * 3 * 1(3个)移动了 5 * 5 次

第二步:1 * 1 * 3(128个)移动了 5 * 5 次

3 * (( 3 * 3 * 1 ) * ( 5 * 5 )) + 128 * (( 1 * 1 * 3 ) * ( 5 * 5 ))

=675 + 9600 = 10275

此处的计算结果是
标准卷积的计算量 是 深度可分卷积计算量的8.4倍(当前实例)

在《MobileNetV2: Inverted Residuals and Linear Bottlenecks》

论文中已经给他们起了名字
depthwise convolution,pointwise convolution
Depthwise(DW)卷积,Pointwise(PW)卷积

The first layer is called a depthwise convolution, it performs lightweight filtering by applying a single convolutional filter per input channel.

The second layer is a 1 × 1 convolution, called a pointwise convolution, which is responsible for building new features through computing linear combinations of the input channels

在《Xception: Deep Learning with Depthwise Separable Convolutions》这篇论文中也有描述
a depthwise convolution followed by a pointwise convolution

<think>好的,我现在需要回答用户关于深度可分离卷积的其他名称或叫法的问题。首先,我得回忆一下这个术语在学术论文或技术资料中的常见别名。深度可分离卷积是深度学习中的一个概念,主要应用在卷积神经网络中,尤其是在轻量级模型设计里,比如MobileNet。 首先,深度可分离卷积的英文是Depthwise Separable Convolution,可能有一些翻译上的不同,比如中文里可能会有不同的译名。比如“深度可分离卷积”是否还有其他说法?我记得有时候会看到“深度分离卷积”这样的简化说法,或者“深度可分解卷积”?不过不确定是否正确,需要验证。 另外,可能需要拆分来看,深度可分离卷积其实分为两个步骤:Depthwise卷积和Pointwise卷积。所以有时候可能会分开提到这两个部分,或者用这两个步骤的组合来描述整个操作。比如,有的文献可能会直接称为Depthwise和Pointwise卷积的组合,而不直接使用“深度可分离卷积”这个术语。 还有,是否有其他替代术语?比如在MobileNet的论文中,他们提到使用Depthwise Separable Convolution来减少计算量,可能有的地方简称为“Separable Convolution”。但要注意,Separable Convolution在传统图像处理中指的是另一种分解方式,比如将卷积核分解为空间可分离的,比如水平和垂直方向,这可能和深度可分离卷积不同,需要区分。不过可能在深度学习的上下文中,有时会混用,需要确认这一点。 另外,是否有其他的别名?比如“通道分离卷积”或者“分组卷积”的某种变体?不过分组卷积(Grouped Convolution)和深度可分离卷积不同,虽然它们都涉及对通道的分组处理,但深度可分离卷积Depthwise部分是对每个输入通道单独应用滤波器,而Pointwise则是1x1卷积来组合通道。所以分组卷积可能不是别名,而是一个相关但不同的概念。 还要考虑是否有其他中文翻译,比如“深度方向可分离卷积”或者“深度分解卷积”?需要查阅相关资料确认是否有这些说法。比如在一些中文论文或技术博客中,可能使用不同的翻译,但标准术语应该是“深度可分离卷积”。 总结可能的别名: 1. 深度分离卷积(可能简化的说法) 2. 深度可分解卷积(不太常见,但可能有人用) 3. 分解卷积(但可能不够准确) 4. 或者直接称为Depthwise和Pointwise卷积的组合 5. 是否有时被称为“通道可分离卷积”?不过不太确定,可能不准确。 同时,需要注意区分传统的空间可分离卷积(Spatially Separable Convolution),比如将3x3的卷积分解为3x11x3的卷积核,这与深度可分离卷积不同。后者是在深度方向(即通道维度)进行分解,而前者是在空间维度分解。 因此,正确的替代术语可能包括“深度方向可分离卷积”来强调在通道维度上的分解,或者直接使用英文的Depthwise Separable Convolution的直译。另外,可能需要指出,在部分文献中可能简称为“可分离卷积”,但需注意上下文以避免混淆。 最后,是否有其他学术上的术语?可能需要参考一些权威资料或论文中的用法。例如,MobileNet v1和v2的论文中均使用Depthwise Separable Convolution,所以可能这是最标准的术语,而其他名称可能较少使用,但可能存在一些变体。例如,有的地方可能称为“深度分解卷积”或类似的翻译,但需要确认是否有这样的用法。 综上所述,用户的问题需要回答深度可分离卷积的别名或替代术语,可能需要列举几个可能的名称,并指出哪些是正确的,哪些可能存在混淆,同时引用相关文献中的例子。</think>深度可分离卷积在学术文献和技术资料中主要有以下别名或替代术语: 1. **深度分离卷积** 这是对英文术语"Depthwise Separable Convolution"的直接简化翻译,常见于中文技术文档或讨论中[^1]。 2. **深度方向可分离卷积** 强调卷积操作在通道(深度)方向上的分离特性,用于区分传统的空间可分离卷积(如将$3×3$卷积分解为$3×1$和$1×3$的操作)。 3. **Depthwise + Pointwise卷积组合** 由于深度可分离卷积包含两个步骤: - **Depthwise卷积**:对每个输入通道单独应用滤波器 - **Pointwise卷积**:通过$1×1$卷积跨通道组合特征 因此部分文献会直接以这两个步骤的组合命名该操作。 4. **通道分离卷积**(需谨慎使用) 部分非正式场景中可能使用此术语,但需注意与分组卷积(Grouped Convolution)区分。深度可分离卷积的滤波器数量等于输入通道数,而分组卷积是将通道分组后分别处理。 **需注意的易混淆术语**: - **可分离卷积(Separable Convolution)**:传统图像处理中指空间可分离的卷积核分解,例如将二维高斯核分解为两个一维核的乘积。在深度学习中若未明确说明上下文,可能引发歧义[^1]。 --- ### 相关问题 1. 深度可分离卷积与传统卷积的计算复杂度差异如何? 2. MobileNet如何通过深度可分离卷积实现模型轻量化? 3. 深度可分离卷积在哪些场景下可能影响模型精度? [^1]: 引用内容中提到的"分层"思想与深度学习的层级结构相关,深度可分离卷积通过分解标准卷积的通道与空间操作,进一步细化了网络层的功能划分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

二分掌柜的

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

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

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

打赏作者

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

抵扣说明:

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

余额充值