模型結構 1 1的卷積核與Inception

2021-08-20 04:45:43 字數 1701 閱讀 1910

原博文:

本文介紹1*1的卷積核與googlenet裡面的inception。正式介紹之前,首先回顧卷積網路的基本概念。

1. 卷積核:可以看作對某個區域性的加權求和;它是對應區域性感知,它的原理是在觀察某個物體時我們既不能觀察每個畫素也不能一次觀察整體,而是先從區域性開始認識,這就對應了卷積。卷積核的大小一般有1x1,3x3和5x5的尺寸。卷積核的個數就對應輸出的通道數,這裡需要說明的是對於輸入的每個通道,輸出每個通道上的卷積核是不一樣的。比如輸入是28x28x192(wxdxk,k代表通道數),然後在3x3的卷積核,卷積通道數為128,那麼卷積的引數有3x3x192x128,其中前兩個對應的每個卷積裡面的引數,後兩個對應的卷積總的個數。

2. 池化(pooling):卷積特徵往往對應某個區域性的特徵。要得到globa的特徵需要將全域性的特徵就行乙個aggregation。池化就是這樣乙個操作,對於每個卷積通道,將更大尺寸(甚至是globa)上的卷積特徵進行pooling就可以得到更有全域性性的特徵。這裡的pooling當然就對應了cross region。與1x1的卷積相對應,後者可以看作乙個cross channel的pooling操作。pooling的另外乙個作用就是公升維或者降維,後面我們可以看到1x1的卷積也有相似的作用。

下面從一般卷積過程介紹1x1的卷積,借用[1]中的圖來表示卷積的過程:

對於nxn(n>1)的卷積核,我們通常還要考慮pad(邊緣補0的個數),stride(每次卷積移動的步長)。但是當尺寸是1x1時,對於single channel而言就相當於對原特徵的scala操作;但是我們一般遇到的都是multi-channel的情況,此時我們便可以根據自己的需要定義卷積核的個數,從而進行降(公升)維。如上面所說,如果將它看作cross channel的pooling 操作,它還能幫我們得到在同一位置不同通道之間進行特徵的aggregation。

總結一下,1x1的卷積核可以進行降維或者公升維,也就是通過控制卷積核(通道數)實現,這個可以幫助減少模型引數,也可以對不同特徵進行尺寸的歸一化;同時也可以用於不同channel上特徵的融合。乙個trick就是在降維的時候考慮結合傳統的降維方式,如pca的特徵向量實現,這樣效果也可以得到保證。

以googlenet[3]中的inception模組為例,來說明1x1的卷積如何來減少模型引數。

左邊是*****的inception模組,右邊是加入1x1 convolution進行降維的inception。按照上面的說法,我們的這層的模型引數與輸入的特徵維數(28x28x192),卷積核大小以及卷積通道數(包括三種卷積核,分別是1x1x64,3x3x128,5x5x32),右圖中在3x3,5x5 convolution前新加入的1x1的卷積核為96和16通道的,在max pooling後加入的1x1卷積為32通道。那麼圖a該層的引數為(1x1x192x64)+(3x3x192x128)+(5x5x192x32)

圖b該層的引數為(1x1x192x64)+(1x1x192x96)+(1x1x192x16)+(3x3x96x128)+(5x5x16x32)+(1x1x192x32).

比較可知,模型引數減少了。

reference

[1][2]

[3]going deeper with convolutions

談談1 1的卷積核

最近在看yolo3,發現對於1 1的卷積核的理解有些遺忘,藉此強化一下記憶。最早我對此有些疑惑,1 1卷積核不會改變高 height 和寬 width 在stride和padding等其他引數為預設狀態時 但 通道數 channel 可以隨意變化,例如在pytorch中 nn.conv2d 256,...

卷積核引數的計算及1 1卷積核

首先,明確乙個概念 卷積並不只是乙個二維的過程,實際上對於輸入的一般而言是三個通道的 r g b 那為什麼輸出的結果可以是128個通道呢?實際上經過卷積過後的通道數是由卷積核的個數來決定的,整個的卷積過程二維情況下也就是在每個通道下發生的卷積過程為 在多通道情況下的卷積情況如下 其實濾波器的維度應該...

1 1卷積核的作用

如何理解跨通道的資訊互動和整合呢?首先還得從三維卷積的計算開始。如圖所示,藍色部分是乙個7 7 n 維數 的feature map,黃色塊為3 3 3的卷積核,將卷積核對應到藍色特徵中可以得到乙個紅色陰影區域,舉個具體的例子 假設卷積核所有的引數都為1。那麼紅色部分的數值 1 1 4 1 3 1 2...