图解CNN中卷积为何

春节放假期间和小伙伴一起翻译安全+AI相关的书籍,发现其CNN中卷积这块讲的不是很好,遂有了想自己写一篇浅显易懂且直白的文章。

1 卷积概念

卷积相信大家并不陌生,如图卷积的公式

上面可能很抽象,我们通过下图可以更加直观的看出上述公式的意义,即求相交的面积。

那么对于一张图像,是怎么做卷积的呢?如果读者接触过数字图像处理、计算机视觉相关方面的知识,肯定对lena女神的图像不陌生,是的来自于《花花公子》的图片,关于这张图的故事,大家可以自行搜索。抛开其他因素,就图像本身,其平整的区块、渐变的光影、颜色的深浅、清晰细致的纹路等特别适合用于图像处理的测试,所以文章中我们都采用这张图来做图示。

如果你阅读过解释CNN相关的资料,下图并不陌生,原始图像通过卷积核最终得到新像素的值,以下两张图也很好的解释了这个过程,但是经过该步骤图像又如何变化?

2 何为卷积

如果读者对tensorflow比较熟悉,肯定知道tensorflow通过如下形式做卷积。

W= tf.Variable(tf.truncated_normal([5, 5, 3, 32], stddev=0.1)

第一行构造卷积核,第二行图像做卷积,其中构造卷积核变量参数[5,5,3,32]中,5x5为卷积核大小,3为三通道即RGB通道,而32为何?

32可以理解为32个滤波器,通过不同的滤波器,图像可以提取到不同的特征,类似于机器学习中的特征,每个特征可能所占权重不同,最终所有特征的权重相加构成一个分类器。如下图比较清晰的阐述了这个过程,不同的滤波器提取到特斯拉跑车的不同特征,通过激活函数、池化层,最后全连接层得到一个类别的概率,概率最高的即为判定类别。

以下我们通过举例比较直观的解释卷积对图像提取特征的过程,代码比较简单,改写自matlab的代码,利用opencv做卷积,读者感兴趣的话可以自己用Python实现一个卷积算法,不过需要注意的是卷积计算得到的值空间只能是0~255之间,因为图像像素取值在这个空间,所以要注意对得到的值再进行处理。

2.1 恒等滤波器

2.2 浮雕(Embossing Filter)

2.3 图像锐化滤波器(Sharpness Filter)

2.4 边缘检测滤波器(Edge Detection)

2.5 均值模糊(Box Filter-Averaging)

2.6 高斯模糊(Gaussian Blur)

2.7 运动模糊(Motion Blur)

3 tensorboard图解

4 总结

通过python和tensorboard两种方式,我们观察了CNN中卷积具体的操作流程,更加深刻的认知卷积的来龙去脉。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180226G1E1DF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券