← 返回题目列表

什么是深度可分离卷积?为什么能大幅减少计算量?

高频 困难 第 14 / 25 题 更新于 2026/08/02
卷积神经网络深度可分离卷积MobileNet轻量化

简化版

深度可分离卷积(Depthwise Separable Convolution) 把标准卷积拆成两步,从而大幅减少参数和计算量:① 逐通道卷积(Depthwise)——每个输入通道各用一个卷积核单独卷积(只做空间上的特征提取,不融合通道);② 逐点卷积(Pointwise,即 1×1 卷积)——用 1×1 卷积把各通道的信息融合、并调整通道数。标准卷积是「空间 + 通道」一次性做完,深度可分离卷积把它分解成「先空间、再通道」两步,计算量约降到标准卷积的 1/K²(K 是卷积核大小,如 3×3 且输出通道较大时比例趋近 1/9) 到 1/C_out。它是 MobileNet、Xception 等轻量级网络的核心,让 CNN 能跑在手机等资源受限设备上,代价是精度略有损失。

详细版

标准卷积 vs 深度可分离卷积:

标准卷积:一个 K×K×C_in 的核,一次同时做「空间卷积 + 跨通道融合」
         参数 ≈ K×K×C_in×C_out

深度可分离卷积(两步):
  ① Depthwise:每个通道各一个 K×K 核,只做空间卷积(不跨通道)
     参数 ≈ K×K×C_in
  ② Pointwise:1×1 卷积做通道融合 + 改变通道数
     参数 ≈ C_in×C_out
  合计 ≈ K×K×C_in + C_in×C_out

计算量降低比例:

深度可分离 / 标准 = (K²·C_in + C_in·C_out) / (K²·C_in·C_out)
                  = 1/C_out + 1/K²
K=3 时约 ≈ 1/9(当 C_out 较大时主要由 1/K² 决定)

代表网络: MobileNet(v1/v2/v3)、Xception、EfficientNet 的部分模块。

完整版教学

一、动机:标准卷积太贵,移动端跑不动

标准卷积在提取特征时,同时完成两件事:在空间上滑动提取局部特征(空间维度),并把所有输入通道的信息加权融合(通道维度)。一个标准卷积核的大小是 K×K×C_in,用 C_out 个这样的核,参数量和计算量约为 K×K×C_in×C_out——很大

对手机、嵌入式等资源受限设备,这个计算量太重、跑不动、耗电。深度可分离卷积的核心思想是:把「空间提取」和「通道融合」这两件事拆开分别做,大幅降低计算量,让轻量级 CNN 成为可能。

二、拆解思路:把一步拆成两步

标准卷积把「空间 + 通道」一次性混在一起算,计算冗余大。深度可分离卷积把它分解成两个更简单的步骤:

标准卷积 = 空间卷积 + 通道融合(一次做完,贵)
        ↓ 分解
深度可分离 = ① Depthwise(只做空间) + ② Pointwise(只做通道)

三、第一步:逐通道卷积(Depthwise Convolution)

每个输入通道,各用一个独立的 K×K 卷积核单独做卷积,只在空间上提取特征,通道之间互不混合

输入 C_in 个通道:
  通道1 →(自己的 3×3 核)→ 输出通道1
  通道2 →(自己的 3×3 核)→ 输出通道2
  ...   各通道独立卷积,不跨通道
输出仍是 C_in 个通道
  • 参数量 ≈ K×K×C_in(每个通道一个 K×K 核)。
  • 它只负责空间特征提取,不做通道融合——所以还需要第二步来融合通道。

四、第二步:逐点卷积(Pointwise Convolution,即 1×1 卷积)

1×1 卷积 在每个空间位置上,对所有通道做加权组合,实现跨通道信息融合,并可改变通道数(从 C_in 到 C_out):

1×1 卷积(C_out 个 1×1×C_in 的核):
  在每个位置融合所有通道 → 输出 C_out 个通道
  • 参数量 ≈ C_in×C_out
  • 它负责通道融合和通道数调整,弥补了 depthwise 不跨通道的不足(详见 1×1 卷积专题)。

两步合起来:depthwise 做空间、pointwise 做通道,同样包含空间提取与通道混合两类操作,但不是任意标准卷积的无损等价变换,但计算量小得多。

五、为什么计算量大降——算笔账

对比参数量(计算量同理):

标准卷积:       K×K×C_in×C_out
深度可分离:     K×K×C_in  +  C_in×C_out
                └depthwise┘   └pointwise┘

比例 = (K²·C_in + C_in·C_out) / (K²·C_in·C_out)
     = 1/C_out + 1/K²
  • 当输出通道 C_out 较大时,1/C_out 很小,比例主要由 1/K² 决定。
  • K=3(3×3 卷积)时,计算量约降到标准卷积的 1/9 左右(再加 1/C_out 的小项);K=5 时约 1/25。

在该 3×3、通道数较大的常见设定下可降到约 1/8~1/9 的理论计算量——这就是深度可分离卷积让 MobileNet 能在手机上实时运行的原因。代价是把「空间+通道联合建模」拆成两步,表达能力略有损失、精度稍降,但在移动端「精度略降换大幅提速」非常划算。

六、应用与相关架构

  • MobileNet(v1/v2/v3):深度可分离卷积是其核心,专为移动端设计;v2 加了倒残差和线性瓶颈,v3 加了 NAS 搜索和 SE 模块。
  • Xception:把 Inception 思想推向极致——「Extreme Inception」,用深度可分离卷积。
  • EfficientNet、ShuffleNet 等轻量/高效网络也大量使用。
  • 适用场景:移动端、嵌入式、实时推理、算力受限的部署。

七、精确计算标准卷积与深度可分离卷积

K=3C_in=32C_out=64,忽略偏置。标准卷积参数量是 3×3×32×64=18432;depthwise 部分是 3×3×32=288,pointwise 部分是 32×64=2048,合计 2336。比例为 2336/18432≈12.67%,即约减少 7.89 倍,而不是固定减少 9 倍。

standard = K² * Cin * Cout
separable = K² * Cin + Cin * Cout
ratio = 1/Cout + 1/K²   (depth multiplier=1,忽略偏置)
部分本例参数量负责什么
标准 3×318432同时做空间与通道混合
Depthwise 3×3288每个输入通道独立提取空间特征
Pointwise 1×12048混合通道
合计2336受约束的两阶段分解

参数和 MACs 下降不等于端到端延迟同比下降;depthwise 算子的内存访问与硬件利用率可能成为瓶颈。

八、常见误区与追问

  • 误区:深度可分离卷积固定比标准卷积省 9 倍。 比例还依赖 KC_out、depth multiplier 与偏置。
  • 误区:它只是标准卷积的无损重写。 空间与通道混合被因式分解,表达约束不同。
  • 追问:depthwise 卷积为什么不能直接混合通道? 每个核只作用于一个输入通道,通道交互由后续 1×1 完成。
  • 追问:参数更少为什么手机上仍可能不快? 延迟还受内存带宽、内核启动和并行利用率影响。
  • 追问:groups 等于 Cin 就一定是 depthwise 吗? 还需输出通道是输入通道乘 depth multiplier,框架约束要具体确认。

九、加强记忆

深度可分离卷积把标准卷积拆成两步降计算量:① Depthwise 逐通道卷积——每个输入通道各用一个 K×K 核单独做空间卷积、不跨通道(参数 ≈K²·C_in);② Pointwise 逐点卷积(1×1 卷积)——融合各通道信息并调整通道数(参数 ≈C_in·C_out)。标准卷积「空间+通道」一次做完(参数 K²·C_in·C_out),拆开后计算量比例 = 1/C_out + 1/K²,3×3 且输出通道较大时比例趋近 1/9。代价是表达能力略降、精度稍损,但常换来理论计算量下降,真实提速依赖硬件与实现——是 MobileNet、Xception轻量网络的核心,让 CNN 能跑在手机等资源受限设备上。