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