1x1的卷積及其作用

本文將解決如下問題:

  1. 1x1的卷積有什麼作用?
  2. 爲什麼要用1x1的卷積?

圖1:左::3x3卷積;右:1x1卷積

1x1卷積可以擴增或減少數據

1x1的卷積核,也被稱作網中網(Network in Network)。圖1中右圖顯示的數據的channel是1,此時1x1卷積只是把原始數據乘以一個倍數(卷積核的數值)。1x1卷積一般只改變輸出通道數(channels),而不改變輸出的寬度和高度。

設輸入數據的維度爲width ×\times height ×\times channels,卷積核的維度是1×11\times 1 ×\times channels ×\times #filters,則卷積過後,輸出數據的維度是width ×\times height ×\times #filters。

通過調整#filters的數值大小,可以對數據進行擴增數據和減少數據的操作:

  1. #filters >> channels時,擴增數據;
  2. #filters << channels時,減少數據

在擴增或減少數據的過程中,feature map的尺度不變(即不損失分辨率)。

擴增或減少channels的過程中,其實就是inputs的不同channels之間信息的線性組合變換。

實例:1x1卷積用於降低參數的數量

如圖2所示,以GoogLeNet的3a模塊爲例,輸入的數據大小是28×28×192,3a模塊中1×1卷積通道爲64,3×3卷積通道爲128,5×5卷積通道爲32,如果是左圖結構,那麼卷積核參數爲1×1×192×64+3×3×192×128+5×5×192×32,而右圖對3×3和5×5卷積層前分別加入了通道數爲96和16的1×1卷積層,這樣卷積核參數就變成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),參數大約減少到原來的三分之一。
在這裏插入圖片描述

圖2:GoogLeNet中的1x1卷積

ResNet中同樣使用1x1卷積來降低參數的數量,如圖3所示。第一個1x1的卷積把256維channel降到64維,然後在最後通過1x1卷積恢復,整體上用的參數數目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的話就是兩個3x3x256的卷積,參數數目: 3x3x256x256x2 = 1179648,差了16.94倍。

常規深度的網絡(如34層)可以不適用bottleneck design,但對於較深的網絡(如101層),通常要是用bottleneck design來減少計算量和參數量。
在這裏插入圖片描述

圖3:ResNet bottleneck design
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章