Inception 系列 — Xception

李謦伊
謦伊的閱讀筆記
5 min readNov 19, 2020

上篇文介紹了 InceptionV4, Inception-ResNet-v1, Inception-ResNet-v2,本篇將介紹 Xception 模型

Xception 取自 Extreme Inception,即表示 Xception 是一種極端的 Inception,於2016 年提出

📝 Paper: https://arxiv.org/pdf/1610.02357.pdf

以 InceptionV3 為基礎去做改進,採用 depthwise separable convolution 來替代原本的 Inception module,並且加入了 ResNet 的 Residual Learning 方法

在介紹 Xception 前,先來回顧一下 InceptionV3 的架構及想法,原本的 Inception module 是為了讓模型自己去找到最好的特徵提取方式,所以將輸入都放入 1x1、3x3、5x5 (InceptionV3 改為兩個 3x3) 卷積層與池化層各自萃取特徵後再做 concat

接著將 Inception module 簡化後會得到下圖的樣子

從 Figure 2 延伸可以看出Inception module 簡化後的架構其實就跟 Figure 3 一樣:先使用 1x1 卷積層,再將輸出分割給三個 3x3 卷積層做輸入 (每個 3x3 卷積層都各自為 1/3 的維度)

接著再更進一步,將每個維度都各自使用一個相應的 3x3 卷積層,也就是把每個維度都各自分開來,這也就是Xception 的核心思想 — 將空間與通道分離

這個方式就是前面所說的採用 depthwise separable convolution 來替代原本的 Inception module,作者將這個 Inception module 叫做 Extreme Inception

❓ 什麼是 depthwise separable convolution?

depthwise separable convolution 是 MobileNet 中所用到的方法,Xception 所採用的空間與通道分離的方式跟 MobileNet 所用的不同,詳細部分可以參考我之前寫的 MobileNetV1 文章

簡單的說 depthwise separable convolution分為兩步,一步是 depthwise convolution,即是對各個維度通道各自做卷積運算;另一步則是 pointwise convolution,即是將不同維度通道進行融合

我畫了一個卷積運算的比較圖,可以更清楚的了解一般的卷積運算、depthwise convolution 及 pointwise convolution 的差別

📚 Xception 與 depthwise separable convolution 的不同之處:

depthwise separable convolution 先對通道進行卷積再進行 1x1 卷積運算,並且兩個卷積之間不使用激活函數;而 Xception 則是先進行 1x1卷積運算後,再對通道卷積,且卷積之間會通過ReLU

  • Xception 的架構

下圖就是 Xception 的整體架構,跟 Inception 一樣由多個不同的 module 組成,總共分為三個 flow — Entry/Middle/Exit,其中 Middle flow 會重複使用八次

圖中的 sparsableConv就是指 depthwise separable convolution,而加號則是使用 Residual Learning

  • 結果比較

Xception 在 ImageNet 及 JFT 影像分類中皆擁有更高的準確度

並且 Xception 的參數比 InceptionV3 少,訓練時間也較短

Inception 文章

Inception 系列 — InceptionV2, InceptionV3

Inception 系列 — InceptionV4, Inception-ResNet-v1, Inception-ResNet-v2

--

--