1. 程式人生 > >卷積神經網路中1x1卷積的作用

卷積神經網路中1x1卷積的作用

1. 來源

[1312.4400] Network In Network (如果1×1卷積核接在普通的卷積層後面,配合啟用函式,即可實現network in network的結構)

2. 應用

GoogleNet中的Inception、ResNet中的殘差模組

3. 作用

1、降維(減少引數)
例子1 : GoogleNet中的3a模組
輸入的feature map是28×28×192
1×1卷積通道為64
3×3卷積通道為128
5×5卷積通道為32
左圖卷積核引數:192 × (1×1×64) +192 × (3×3×128) + 192 × (5×5×32) = 387072
右圖對3×3和5×5卷積層前分別加入了通道數為96和16的1×1卷積層,這樣卷積核引數就變成了:
192 × (1×1×64) +(192×1×1×96+ 96 × 3×3×128)+(192×1×1×16+16×5×5×32)= 157184
同時在並行pooling層後面加入1×1卷積層後也可以降低輸出的feature map數量(feature map尺寸指W、H是共享權值的sliding window,feature map 的數量就是channels)
左圖feature map數量:64 + 128 + 32 + 192(pooling後feature map不變) = 416 (如果每個模組都這樣,網路的輸出會越來越大)
右圖feature map數量:64 + 128 + 32 + 32(pooling後面加了通道為32的1×1卷積) = 256
GoogLeNet利用1×1的卷積降維後,得到了更為緊湊的網路結構,雖然總共有22層,但是引數數量卻只是8層的AlexNet的十二分之一(當然也有很大一部分原因是去掉了全連線層)
在這裡插入圖片描述


例子2:ResNet中的殘差模組
假設上一層的feature map是wh256,並且最後要輸出的是256個feature map
左側運算元:wh25633256 =589824wh
右側運算元:w
h2561164 + wh643364 +wh6411256 = 69632wh,,左側引數大概是右側的8.5倍。(實現降維,減少引數)
在這裡插入圖片描述2、升維(用最少的引數拓寬網路channal)
例子:上一個例子中,不僅在輸入處有一個11卷積核,在輸出處也有一個卷積核,33,64的卷積核的channel是64,只需新增一個11,256的卷積核,只用64256個引數就能把網路channel從64拓寬四倍到256。
3、跨通道資訊互動(channal 的變換)

例子:使用11卷積核,實現降維和升維的操作其實就是channel間資訊的線性組合變化,33,64channels的卷積核後面新增一個11,28channels的卷積核,就變成了33,28channels的卷積核,原來的64個channels就可以理解為跨通道線性組合變成了28channels,這就是通道間的資訊互動。
注意:只是在channel維度上做線性組合,W和H上是共享權值的sliding window
4、增加非線性特性
1*1卷積核,可以在保持feature map尺度不變的(即不損失解析度)的前提下大幅增加非線性特性(利用後接的非線性啟用函式),把網路做的很deep。
備註:一個filter對應卷積後得到一個feature map,不同的filter(不同的weight和bias),卷積以後得到不同的feature map,提取不同的特徵,得到對應的specialized neuro。

4. 從fully-connected layers的角度來理解1*1卷積核

將其看成全連線層
在這裡插入圖片描述左邊6個神經元,分別是a1—a6,通過全連線之後變成5個,分別是b1—b5
左邊6個神經元相當於輸入特徵裡面的channels:6
右邊5個神經元相當於11卷積之後的新的特徵channels:5
左邊 W
H6 經過 11*5的卷積核就能實現全連線
In Convolutional Nets, there is no such thing as “fully-connected layers”. There are only convolution layers with 1x1 convolution kernels and a full connection table– Yann LeCun