春节放假期间和小伙伴一起翻译安全+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中卷积具体的操作流程,更加深刻的认知卷积的来龙去脉。
领取专属 10元无门槛券
私享最新 技术干货