1. 程式人生 > >多通道影象卷積基礎知識介紹

多通道影象卷積基礎知識介紹

轉:https://blog.csdn.net/williamyi96/article/details/77648047

1.對於單通道影象+單卷積核做卷積

Conv layers包含了conv,pooling,relu三種層。以python版本中的VGG16模型中的faster_rcnn_test.pt的網路結構為例,如圖2,Conv layers部分共有13個conv層,13個relu層,4個pooling層。這裡有一個非常容易被忽略但是又無比重要的資訊,在Conv layers中:

  1. 所有的conv層都是:kernel_size=3,pad=1
  2. 所有的pooling層都是:kernel_size=2,stride=2

為何重要?在Faster RCNN Conv layers中對所有的卷積都做了擴邊處理(pad=1,即填充一圈0),導致原圖變為(M+2)x(N+2)大小,再做3x3卷積後輸出MxN。正是這種設定,導致Conv layers中的conv層不改變輸入和輸出矩陣大小。如圖3:

 

      類似的是,Conv layers中的pooling層kernel_size=2,stride=2。這樣每個經過pooling層的MxN矩陣,都會變為(M/2)*(N/2)大小。綜上所述,在整個Conv layers中,conv和relu層不改變輸入輸出大小,只有pooling層使輸出長寬都變為輸入的1/2。

     那麼,一個MxN大小的矩陣經過Conv layers固定變為(M/16)x(N/16)!這樣Conv layers生成的featuure map中都可以和原圖對應起來。

2.對於多通道影象+多卷積核做卷積

如圖5,輸入影象layer m-1有4個通道,同時有2個卷積核w1和w2。對於卷積核w1,先在輸入影象4個通道分別作卷積,再將4個通道結果加起來得到w1的卷積輸出;卷積核w2類似。所以對於某個卷積層,無論輸入影象有多少個通道,輸出影象通道數總是等於卷積核數量!

對多通道影象做1x1卷積,其實就是將輸入影象於每個通道乘以卷積係數後加在一起,即相當於把原影象中本來各個獨立的通道“聯通”在了一起。

caffe畫圖工具:http://ethereon.github.io/netscope/#/editor