Caffe中的卷积实现

46 篇文章 2 订阅
18 篇文章 0 订阅

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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值