您的位置:首页 > Web前端

图像卷积及Caffe中的卷积实现

2016-02-03 20:07 405 查看

图像卷积及Caffe中的卷积实现

  原创内容,转载请注明出处。

  本文简单介绍了图像卷积相关的知识以及Caffe中的卷积实现方法,写作过程中参考了很多很赞的资料,有兴趣的读者可以从【参考资料】查看。

  博文中的错误和不足之处还望各位读者指正。

什么是卷积?

  专业不是信工方面,也没学过信号与系统这门课。所以我也就不给出很专业的卷积定义和公式表达,引用一个例子给以直观的解释。

这就是说,某一时刻的输出是之前很多次输入乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积

引自一个血腥的卷积解释

  对此,我的理解是,卷积就是一个信号作用在另一个信号的响应过程。卷积怎么计算,就是加权叠加

图像卷积

  上面我们引用一个例子简单介绍了卷积,那对于一副图像,我们怎么计算它的卷积呢?对于一副图像,卷积有什么意义呢?

  

  我们首先回答第二个问题,和刚才那个例子类似,图像卷积即是一个卷积核(图1)作用在图像上得到的响应。显然,卷积核不同,得到的响应自然不同,故我们可以更换不同的卷积核实现对于图像不同的操作



图1,一个卷积核,核说白了就是一个固定大小的数值数组。该数组带有一个 锚点 ,一般位于数组中央。图片来自OpenCV.

  接着,我们回答第一个问题。这里我引用OpenCV教程上的表达,并根据图2的动画效果加深理解。

计算图像的某个特定位置的卷积值:

1. 将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;

2. 将核内各值与相应像素值相乘,并将乘积相加;

3. 将所得结果放到与锚点对应的像素上;

4. 对图像所有像素重复上述过程



图2,卷积的计算过程,以图中3*3的卷积核为例,经卷积操作后锚点的像素值变作卷积核(加权系数)乘以对应位置像素值的叠加。图片来自http://williamson-labs.com/convolution-2d.htm .

Caffe中的卷积

  Caffe是一个流行的深度学习框架。而我们用Caffe进行图像分类分类等众多操作时,是怎么计算卷积的呢?

  各位可以参看Caffe的作者贾扬清在知乎上的回答,我这里贴出贾扬清的这张图(图3)。



图3,Caffe中卷积的计算过程,其中C是通道数,Cout是输出的特征映射个数也就是卷积核(过滤器)个数

  

  这里以32*32的RGB图像为例,6个5*5的卷积核为例,先将这副32*32(最外层做zero padding)的RGB图像在每个通道上按照5*5的大小转化为行向量(1行25列),最后成为(32*32)行(3*25)列的矩阵。同时,将6个卷积核按通道转化成6行(3*25)列的矩阵,再将两个矩阵点乘即卷积核矩阵点乘图像矩阵的转置,得到6(32*32)的矩阵,即6个特征映射,每个映射为(32*32),如果不做zero padding则是6*(28*28)

对于图像卷积及Caffe中的卷积操作就简单介绍到这里。

参考资料

Caffe中怎么计算卷积

实现自己的线性滤波器

Understanding Convolution in Deep Learning
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: