在 Caffe 中如何計算卷積?

最好能圖文並茂哈


【多圖】

前面幾樓都很詳細了,正好今天在Berkeley給了關於CNN優化的talk,順便把卷積的幾張幻燈片貼上來,希望能有點用:

最後一頁沒畫,但是基本上就是Filter Matrix乘以Feature Matrix的轉置,得到輸出矩陣Cout x (H x W),就可以解釋為輸出的三維Blob(Cout x H x W)。

Caffe里用的是CHW的順序,有些library也會用HWC的順序(比如說CuDNN是兩個都支持的),這個在數學上其實差別不是很大,還是一樣的意思。

順便廣告一下我吐槽Caffe裡面卷積演算法的鏈接:Convolution in Caffe: a memo · Yangqing/caffe Wiki · GitHub


前面幾位也提到了,使用im2col的方法將卷積轉為矩陣相乘,圖如下:

參見論文:
High Performance Convolutional Neural Networks for Document Processing
https://hal.archives-ouvertes.fr/file/index/docid/112631/filename/p1038112283956.pdf


圖文並茂還是需要花點時間的。用文字簡單描述一下,然後題主還是看代碼來理解吧。
想像一副圖像尺寸為MxM,卷積核mxm。在計算時,卷積核與圖像中每個mxm大小的圖像塊做element-wise相乘,相當於把該mxm圖像塊提取出來,表示成一個長度為m^2的列,共有多少個這種圖像塊?在不考慮pad和stride的情況下,一共有(M-m+1)^2個,把這麼些個圖像塊均表示為m^2的列,然後組合為一個大矩陣(m^2 x (M-m+1)^2)。這裡的操作就是img2col中做的事,matlab中就有這種函數。然後把卷積核也表示為m^2向量,並按列複製為同尺寸矩陣(m^2 x (M-m+1)^2)。倆矩陣按列做點積即得結果。
粗略介紹,細節不包完全正確。


之前寫過一篇個人對Caffe實現卷積的理解的博文,鏈接見這裡,Caffe源碼閱讀(2) 卷積層。如果能夠理解全連接層的實現,那麼距離理解卷積層也就一步之遙了,差的是要理解裡面的im2col和col2im的作用,經過這兩個操作後,卷積層的操作跟全連接層的操作基本是一致的。


Caffe的卷積原理 可以參考一下


前幾樓說的挺清楚了,我補充一個官方鏈接 Convolution in Caffe: a memo · Yangqing/caffe Wiki · GitHub


我想問一下,caffe里,做卷積過程,有說必須輸入的圖片尺寸是正好卷積核可以正好卷積過來的這一說法嗎,假如一行卷積下來,最後剩兩個格不夠卷積核卷積的,那就要報錯還是怎樣


搭車問個問題,在tensorflow中如何計算卷積


請問caffe中,卷積核是如何初始化的呢?


推薦閱讀:

卷積神經網路工作原理直觀的解釋?
在與 AlphaGo(包括 Master) 的對局中是否出現了一些人類歷史上從未想到過的著法、技巧?
如何理解感知機學習演算法的對偶形式?
計算機圖形學與機器學習(深度學習)怎麼結合起來?
SVM和logistic回歸分別在什麼情況下使用?

TAG:機器學習 | 計算機視覺 | 機器視覺 | 神經網路 | 深度學習(Deep Learning) |