1. 程式人生 > >【深度學習】Inception層詳解

【深度學習】Inception層詳解

本文參考Torch的dpnn包中Inception層的原始碼,講解該模組引數含義以及網路結構。

核心思想

Inception模組的起點是類似下圖的結構:通道從M變換到N,把多個不同尺寸的卷積結果串接(concat)起來。
這裡寫圖片描述
由於M,N往往很大,這種結構的模型大小和運算量都不小。

卷積運算,輸入M層,輸出N層,核尺寸k。輸入資料大小H*W。
卷積引數數量:weight + bias = M*N*k*k+N
卷積運算量:H*W*N*M^2*K^4

Inception將後續三路中插入一個1*1卷積,讓每一路構成能夠節省引數的“瓶頸結構”
這裡寫圖片描述
在每一路瓶頸結構中,首先從M通道壓縮到K通道,再由K通道擴充套件到N通道。K比M,N都小。

1*1卷積相當於在每個畫素施加同一個fully connected層,所以又稱為network in network。

整體結構

Inception的最外層結構是一個DepthConcat,把各路資料沿第2維(channel維度)串聯起來。
根據引數設定,可能有N+1或者N+2個通路。
這裡寫圖片描述

為設定簡便,後文中所有提到的Transfer層和Pooling層都具有統一型別。例如都是ReLU或者都是MaxPooling;所有的BatchNorm層通過統一的開關新增或者取消。

前N個通路

前N個通路的核心是兩個卷積層(綠),分別後續BatchNorm(青)和Transfer(紅)。
這裡寫圖片描述

第一個卷積層:減少channel數量,保持原尺寸。涉及引數reduceSize, reduceStride
第二個卷積層:增加channel數量,同時縮小尺寸。涉及引數outputSize, kernelSize, kernelStride。padding如果設True,選擇保持原始尺寸,否則padding為0。

這種先降維度後升維度的瓶頸型結構十分經典,能夠利用深層次提高抽象能力,同時節約計算。可見於殘差網路Hourglass人體姿態分析

第N+1個通路

這個通路的核心是一個Pooling層(灰),以及一個可選擇的卷積層(綠),後接BatchNorm和Transfer。
這裡寫圖片描述

Pooling層提取更大範圍特徵,縮小尺寸。涉及引數poolSize, poolStridue
卷積層:和前N的個通路的第一個卷積層類似,減少維度,保持原尺寸。涉及引數reduceSize,reduceStridue

第N+2個通路

這一通路本身是可選擇的,核心是一個卷積層,後接BatchNorm和Transfer。
這裡寫圖片描述

卷積層:和前N的個通路的第一個卷積層類似,減少維度,保持原尺寸。涉及引數reduceSize,reduceStridue

組合

如果各個通路輸出尺寸不同,將各結果中心對齊,補零之後串聯。