【深度學習】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。
組合
如果各個通路輸出尺寸不同,將各結果中心對齊,補零之後串聯。