Caffe中的卷积实现
https://www.zhihu.com/question/28385679
https://github.com/Yangqing/caffe/wiki/Convolution-in-Caffe:-a-memo
作者賈揚清親自解釋了這個問題。Caffe框架是他在研究生畢業畢業前兩個月的時間寫的,自然有一些缺點(占用內存方面)。其實卷積是很難優化的,因為我們一般是在單通道的圖像和單個濾波器之間進行卷積,但是深度學習中是多核多通道卷積。
對通道為C,高和寬分別為H、W的圖像,在每一個位置上,劃分一個KxK大小的patch,算上通道數,那就是CxKxK大小的patch,一共有HxW個patch:
這樣就完成了由圖像到矩陣的轉化,這種操作在matlab中叫做im2col。需要注意的是,因為每一個像素點都對應一個patch,可以看成patch區域在圖像上滑動,滑動的過程是有重疊的,轉化所得的矩陣大小大于原圖像。
與此同時,我們也要將濾波器轉化成矩陣形式。
這樣,卷積就可以轉化為矩陣乘法(Gemm in BLAS)問題,調用GEMM(GEneralized Matrix Multiplication)對兩矩陣內積。BLAS有許多性能優良的庫,而且由分銷商Intel和Nvidia針對所有平臺進行優化。
以上,就是作者上學期間采用的一種討巧的方法,將問題轉換成更加簡單的,已經可以解決的問題。在當時取得了很好的效果,直到Alex Krizhevsky基于對GPU的深刻理解,在cuda-convert中又取得了巨幅的提升,這種方法被碾壓,這就是另外一個故事了。https://code.google.com/p/cuda-convnet2/
總結
以上是生活随笔為你收集整理的Caffe中的卷积实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV中的傅里叶的门道
- 下一篇: 安卓向服务器发送List数据