1*1卷積層的簡單理解

在很多模型中都會有一些111*1的卷積層,打眼一看感覺這些layer很雞肋,不知道放在模型裏能起到什麼作用。但深入理解一下就能發現,1*1的卷積是非常有用的,可以很靈活地控制特徵圖的深度,並能起到減少參數量的作用。

本文就基於個人粗淺的理解,簡單討論一下1*1卷積的作用。

1. 升維降維,實現跨通道的信息整合

feature map和1*1的卷積核做卷積時,只需要考慮當前像素即可,並不需要考慮周圍的像素值。因此第一個作用主要是可以用來調節feature map的通道數,對不同通道上的像素點進行線性組合,即可實現feature map的升維或降維功能,這也是通道見信息的交互和整合過程。

例如現在的feature map維度是(48, 28, 28),48表示channel,28表示長和寬。如果給定一個1*1的卷積層,輸入channel=48,出的channel=32,那麼就可以對特徵圖實現從48維到32維的降維操作。

同樣地,只要輸出channel大於48,就可以實現升維操作。

2. 減少模型參數量

減少模型參數這一想法最早應該是在GoogleNet中提出的,假設給定如下兩個Inception模塊:
在這裏插入圖片描述

如上圖,現在藍色方框中,左側是333*3的卷積,而右側是111*1和一個333*3的卷積。兩者的功能是一樣的,即得到的輸出維度相同。現在要計算兩者的參數量,直覺上來說,單個333*3的卷積參數似乎較少,但事實真的如此嗎?

我們假設Previous Layer得到結果的維度是(96, 28, 28),即這個Inception模塊的輸入是96通道,長寬均爲28的feature map,卷積後輸出通道爲48。假設經過左側和右側模塊的方框所需要的計算參數分別爲p1,p2,則p1和p2的計算公式如下:

p1 = 963348=4147296*3*3*48=41472

右圖中第一個111*1卷積可以先將原始輸入降維,假設這裏降到32維,則:

p2 = 961132+323348=1689696*1*1*32+32*3*3*48=16896

注:卷積核的通道數與輸入的feature map一致,而卷積核的個數與輸出channel一致。

我們驚奇的發現,反而是第二種採用了111*1333*3兩次卷積的結構,擁有更少的訓練參數。由此可見,雖然加入了這額外的111*1的卷積層,但竟然可以減少訓練的參數。

Resnet中的殘差模塊使用111*1卷積核意義也是如此:
在這裏插入圖片描述
假設輸入feature map的維度是(256, 28, 28),左側和右側模塊的參數量分別是p1和p2,那麼p1和p2的計算值分別如下(爲了追求兩者輸入輸出的一致性,需要把左側圖的64都改爲256,且中間只有一層332563*3*256的卷積層):

p1 = 25633256=589824256*3*3*256=589824

p1 = 2561164+643364+6411256=69632256*1*1*64+64*3*3*64+64*1*1*256=69632

可見採用了111*1卷積後的參數量會減少很多,我覺得這主要是111*1卷積核可以先進行降維,降維之後需要的333*3的卷積核數目就變少了。而真正佔用參數量的是333*3卷積核,1*1$卷積核的參數量其實非常少,所以引入了111*1卷積核來減少訓練參數。

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