Xception(2017):深度可分离卷积

Xception(2017):深度可分离卷积

导出时间:2025/11/23 20:21:38

研究背景与动机

(1)研究背景

在深度学习的发展过程中,图像识别的“明星模型”不断迭代:
  • VGG16/19(2014):结构简单,但参数量巨大,计算成本高。
  • Inception 系列(GoogLeNet, Inception V2/V3):通过“多分支卷积”同时捕捉不同尺度的特征,效率比 VGG 更高。
但是——Inception 模块虽然聪明,却也变得复杂:
  • 要设计不同大小的卷积分支;
  • 要人为调节参数,让每个分支合理分工;
  • 网络结构越来越像“手工拼接的乐高积木”,缺乏简洁性。
在这样的背景下,研究者开始思考: 👉 有没有一种更简单更通用的方法,可以替代 Inception 模块,又能保持甚至提升性能?

(2)研究动机

Xception 的提出,正是为了回答这个问题。它的名字来自 “Extreme Inception”,意思是“极端化的 Inception”。
研究者的核心思路是:
  • Inception 的本质:把通道相关性(不同颜色通道之间的关系)和空间相关性(像素在平面上的关系)分开处理。
  • 极端化的想法:既然可以部分分开,为什么不完全分开
于是就有了 深度可分离卷积(Depthwise Separable Convolution)
  1. 先用 Depthwise 卷积:每个通道自己做卷积,相当于每个颜色通道各自戴上“单独的眼镜”观察图像。
  2. 再用 Pointwise 卷积(1×1 卷积):把这些通道的信息重新组合,相当于“把不同眼镜看到的内容整合起来”。
这样做的好处是:
  • 结构比 Inception 简单得多(不需要手工设计多分支);
  • 参数和计算量减少了,但特征表达力更强;
  • 更容易扩展,适合在大数据集上训练。

(3)通俗类比

你可以把几种模型想象成“摄影师拍照”:
  • VGG:用一台很大的相机,一次性拍下所有细节(笨重,费电)。
  • Inception:带上不同焦距的镜头(广角、中景、特写),同时拍几张,再拼在一起(效果好,但操作麻烦)。
  • Xception:干脆让每个颜色通道各自配一副“单独的镜头”,先独立拍,再合成一张清晰的照片(简单高效,还能拍得更细)。

一句话总结: Xception 的动机是:把 Inception 的思想推向极致——完全分离通道信息和空间信息,用更简单的结构获得更强的性能。

模型结构

(1)核心思想:深度可分离卷积

Xception 的核心就是 深度可分离卷积(Depthwise Separable Convolution),它把卷积拆成了两个步骤:
  1. Depthwise 卷积(逐通道卷积)
    • 相当于“每个通道(红、绿、蓝…)自己处理自己,不和别人交流”。
    • 类比:好比有 3 个摄影师,分别只拍红光、绿光和蓝光的照片,各拍各的,不互相干扰。
  2. Pointwise 卷积(逐点卷积 / 1×1 卷积)
    Depthwise 卷积 里,每个通道各自处理,结果是:
    • 红色通道输出“红光特征图”;
    • 绿色通道输出“绿光特征图”;
    • 蓝色通道输出“蓝光特征图”。
    👉 但是这样做有个问题:通道之间完全独立,互相不交流。
    • 就像三位摄影师分别拍了红光、绿光、蓝光的照片,但此时还没有合成完整的彩色照片。
    • 如果只停在这一步,我们没法获得一个真正综合的图像理解。
    于是,Pointwise 卷积登场了。它的任务就是: 把不同通道的特征重新组合,融合成新的特征表示。
    • Pointwise 卷积就是 1×1 卷积
    • 它的卷积核大小是 1×1,但会作用在所有通道上。
    • 这意味着:
      • 它不会在空间上(高和宽)移动范围,而是专门在 通道维度上做混合
      • 相当于“把所有通道的像素点在一个位置上的信息加权整合”。
    举个例子:
    • 输入是 3 个通道(R、G、B),输出需要 5 个通道;
    • 那么 Pointwise 卷积就会用 5 个 1×1×3 的卷积核,分别学习“如何把 RGB 混合成新通道”。

(2)整体架构

image.png

1)入口流(Entry Flow)=“入厂安检 + 预处理”

目的:把大图像先缩小到合适尺寸,同时抽取第一批有用的边缘/纹理特征,为后续重加工做准备。
按图分步看(以 299×299×3 输入为例):
  • Conv 32, 3×3, stride=2 → ReLU 第一次快速“下采样”,像安检门先把人流分批放行。
  • Conv 64, 3×3 → ReLU 再做一次基础特征扫描(边缘、角点)。
  • 残差块 ×3(通道从 128→256→728,且每个残差块都做下采样) 每个残差块的主支路: ReLU → SeparableConv K, 3×3 → ReLU → SeparableConv K, 3×3 → MaxPooling 3×3, stride=2 跳支路:Conv 1×1, stride=2(做尺寸对齐) 然后相加(残差连接)。 作用:一边提炼特征、一边减半空间尺寸(如 299→149→…→19),把“原料”压缩成规格统一的中间品,方便进主车间。

设计要点:入口流里已经开始使用深度可分离卷积(SeparableConv),且卷积/可分离卷积后都接 BatchNorm(图中未画出),保证训练稳定;残差连接在除首末以外的模块广泛使用。

类比:像安检 + 初筛:先快速分流(stride=2),再把重要信息(边缘/纹理)贴上标签(通道数升高),为后续流水线做准备。

2)中间流(Middle Flow)=“主体流水线车间”

目的:在**固定的特征图尺寸(约 19×19)**上,把通道维度的表征打磨到位。
结构同一个模块重复 8 次(输出通道保持 728),每个模块都是**“深度可分离卷积 ×3 + 残差恒等映射”**: ReLU → SepConv 728 → ReLU → SepConv 728 → ReLU → SepConv 728 → 残差相加(恒等映射)
  • 为什么重复 8 次? 把“同一套高效工序”反复跑,让特征从粗到细、层层打磨;因为有残差,信息能畅通回流,避免“越堆越训不动”。
  • 为什么用深度可分离卷积?逐通道提空间特征(Depthwise),再用 1×1 混合通道(Pointwise),既省算力又有表达力——等价于把 Inception 的“多分支”思想极端简化为单一路径(论文把它称作“Extreme Inception”,即 Xception)。
类比:一个稳定可靠的自动化产线:每件半成品(特征)依次通过同样的 3 台机器(3 个可分离卷积),做精加工;残差是旁路输送带,保证加工不过度、信息不丢。

模块“重复 8 次”的事实与“三段式(入口/中间/出口)”来源于论文图 5。


3)出口流(Exit Flow)=“质检 + 打包出厂”

目的:在不再扩大特征图尺寸的前提下,拉高通道维度,做最后一次信息汇总,然后把空间维度压成向量去分类。
按图分步看
  • 过渡残差块(stride=2 下采样) 主支路:ReLU → SepConv 728 → ReLU → SepConv 1024 → MaxPool 3×3, stride=2 跳支路:Conv 1×1, stride=2相加。 作用:把 19×19×728 的“中间品”升级到更高通道数(1024),同时再压一次空间尺寸,进入“终检工位”。
  • 终检精加工 SepConv 1536, 3×3 → ReLU → SepConv 2048, 3×3 → ReLU 作用:在通道维度做更强的非线性组合,形成最有判别力的语义特征。
  • Global Average Pooling(全局平均池化)H×W×C 压成 1×1×C(即一个 C 维向量),相当于对每个通道做“全局投票”,得到2048 维特征向量。
  • (可选)全连接层Logistic/Softmax 分类器 论文实现是接逻辑回归层(Softmax),也可以在这之前插若干 FC
类比终检与打包
  • SepConv 1536/2048 = 更严格的质检与组合;
  • GAP = 把每个“特征通道”的全局表现记为一票;
  • Softmax = 打上“类别标签”,出厂。


3、模型缺点

缺点
详细解释
类比说明
1. 训练难度较高
Xception 使用了大量深度可分离卷积和残差结构,虽然参数少,但梯度传播路径变复杂,容易对学习率、初始化敏感,需要好的训练技巧(如 BN、合适的优化器)。
就像一台自动化流水线设备很高效,但按钮特别多,没经验的工人一上来很容易“调坏机器”。
2. 对硬件依赖较大
深度可分离卷积虽然理论计算量少,但在实际硬件(尤其是早期 GPU/CPU)上并不一定比普通卷积快,因为需要额外的内存访问和通道操作。
好比你设计了一台分工特别细的生产线,但工厂搬运工效率跟不上,结果没有想象中快。
3. 模块堆叠过深
中间流堆叠了 8 个相同模块,总共 36 个卷积层,对小规模数据集来说容易过拟合,需要数据增强或正则化。
就像流水线工序太多,加工过度,反而把原料磨损了。
4. 缺少多尺度特征融合
Xception 完全抛弃了 Inception 的“多分支结构”,虽然简洁,但可能丢掉了多尺度特征的优势,对目标大小差异大的任务(如检测、小目标识别)不一定最佳。
就像工厂只设计了一条单一流水线,效率高,但没法同时兼顾大件小件的产品加工。
5. 参数量和特征维度依旧较大
虽然比 Inception 高效,但最后输出是 2048 维向量,在下游任务(如嵌入、检索)中还是比较“重”,不够轻量化。
就像最终的产品虽然很精美,但包装箱还是比较大,不利于运输。

4、未来展望和改进思路(基于 Xception 的发展)

改进方向
代表模型
核心思路
类比解释
1. 轻量化部署
MobileNet 系列
把 Depthwise + Pointwise 卷积的思想继承下来,但在设计时引入 宽度因子、分辨率因子 来进一步减少参数,适合手机和嵌入式设备。
就像把 Xception 的流水线做成“便携式小工厂”,能放进背包随身带,虽然产能小一点,但能随时随地生产。
2. 多尺度特征融合
EfficientNet
Xception 虽然极简,但放弃了 Inception 的“多分支”。后续改进尝试重新结合多尺度(EfficientNet 中通过复合缩放策略:宽度+深度+分辨率一起调节)。
就像重新在流水线上增加“大小件分流工位”,让大件小件的原料都能加工得合适。
3. 自动化结构搜索
NASNet
不再完全靠人工设计,而是用 神经结构搜索(NAS) 自动寻找最优的卷积模块组合,结果往往比单纯“极端化”的 Xception 更高效。
就像工厂老板不再自己画流程图,而是请一个“AI 工程师”自动生成最优生产线。
4. 与注意力机制结合
SENet
在卷积的基础上引入通道注意力(Squeeze-and-Excitation),让模型自动学会“哪些通道更重要”。
就像工厂里的质检员,不是所有零件都一样重视,而是会特别关注关键零件。
5. 更加轻量化 & 高效推理
ShuffleNet、GhostNet
在深度可分离卷积的框架下,结合更高效的激活函数、组卷积与通道重用,进一步减少计算。
就像工厂里用上了 节能机器,既省电又快,特别适合小型工厂。