caffe中的卷积实现 -凯发k8官方网
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/
总结
以上是凯发k8官方网为你收集整理的caffe中的卷积实现的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: