caffe中卷积计算方法

来源:互联网 发布:软件著作权申报 编辑:程序博客网 时间:2024/05/16 06:54

http://zhangliliang.com/2015/02/11/about-caffe-code-convolutional-layer/    http://www.zhihu.com/question/28385679  参考地址

一, 

先把贾扬清卷积的几张幻灯片贴上来,希望能有点用:

最后一页没画,但是基本上就是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的方法将卷积转为矩阵相乘,图如下:


想象一副图像尺寸为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)。俩矩阵按列做点积即得结果。

待卷积图像经过IMG2COL后,就可以直接与网络权重矩阵相乘了(不需要卷积核在图像上滑动了)。这时利用普通的矩阵乘法就是卷积操作。

//修正,条目1中 I.H x I.W是输入的feature map的尺寸,原图笔误,谢谢 @晚晴也是晴 指正


所以  如果能够理解全连接层的实现,那么距离理解卷积层也就一步之遥了,差的是要理解里面的im2col和col2im的作用,经过这两个操作后,卷积层的操作跟全连接层的操作基本是一致的。

0 0
原创粉丝点击