CNN 中1X1卷积核的作用
生活随笔
收集整理的這篇文章主要介紹了
CNN 中1X1卷积核的作用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自:?
http://blog.csdn.net/u014696921/article/details/52950247
http://www.caffecn.cn/?/question/136
1. 實現跨通道的交互和信息整合
2. 進行卷積核通道數的降維和升維
?
下面詳細解釋一下:
1. 這一點孫琳鈞童鞋講的很清楚。1×1的卷積層(可能)引起人們的重視是在NIN的結構中,論文中林敏師兄的想法是利用MLP代替傳統的線性卷積核,從而提高網絡的表達能力。文中同時利用了跨通道pooling的角度解釋,認為文中提出的MLP其實等價于在傳統卷積核后面接cccp層,從而實現多個feature map的線性組合,實現跨通道的信息整合。而cccp層是等價于1×1卷積的,因此細看NIN的caffe實現,就是在每個傳統卷積層后面接了兩個cccp層(其實就是接了兩個1×1的卷積層)。
2. 進行降維和升維引起人們重視的(可能)是在GoogLeNet里。對于每一個Inception模塊(如下圖),原始模塊是左圖,右圖中是加入了1×1卷積進行降維的。雖然左圖的卷積核都比較小,但是當輸入和輸出的通道數很大時,乘起來也會使得卷積核參數變的很大,而右圖加入1×1卷積后可以降低輸入的通道數,卷積核參數、運算復雜度也就跟著降下來了。以GoogLeNet的3a模塊為例,輸入的feature map是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),參數大約減少到原來的三分之一。同時在并行pooling層后面加入1×1卷積層后也可以降低輸出的feature map數量,左圖pooling后feature map是不變的,再加卷積層得到的feature map,會使輸出的feature map擴大到416,如果每個模塊都這樣,網絡的輸出會越來越大。而右圖在pooling后面加了通道為32的1×1卷積,使得輸出的feature map數降到了256。GoogLeNet利用1×1的卷積降維后,得到了更為緊湊的網絡結構,雖然總共有22層,但是參數數量卻只是8層的AlexNet的十二分之一(當然也有很大一部分原因是去掉了全連接層)。
最近大熱的MSRA的ResNet同樣也利用了1×1卷積,并且是在3×3卷積層的前后都使用了,不僅進行了降維,還進行了升維,使得卷積層的輸入和輸出的通道數都減小,參數數量進一步減少,如下圖的結構。(不然真不敢想象152層的網絡要怎么跑起來TAT)
?對于單通道的feature map和單個卷積核之間的卷積來說,題主的理解是對的,CNN里的卷積大都是多通道的feature map和多通道的卷積核之間的操作(輸入的多通道的feature map和一組卷積核做卷積求和得到一個輸出的feature map),如果使用1x1的卷積核,這個操作實現的就是多個feature map的線性組合,可以實現feature map在通道個數上的變化。接在普通的卷積層的后面,配合激活函數,就可以實現network in network的結構了
還有一個重要的功能,就是可以在保持feature map 尺寸不變(即不損失分辨率)的前提下大幅增加非線性特性,把網絡做得很deep。
對于兩位在解答中說的1X1卷積核能夠對多個feature map實現線性組合。我的個人理解是不是和全局平均池化類似,只不過一個是求feature map的平均值,一個是線性組合?
總結
以上是生活随笔為你收集整理的CNN 中1X1卷积核的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Faster R-CNN论文笔记——FR
- 下一篇: 目标检测(Object Detectio