卷积的计算 卷积运算符号


ApacheCN 优质AI博文推荐项目正式启动


优质AI博文推荐
每日从从所有投稿博文中精选两篇,在ApacheCN全公众平台推送 。
投稿须知
接受个人学习博文,论文解读,打比赛心得等AI相关文章投稿 。
投稿时请新建Issues,按以下格式进行填写:
博文地址:是否为个人原创:
投稿推荐语:
原作者信息(选填):作者昵称,原始发布平台,联系方式
投稿地址:
https://github.com/apachecn/awesome-AI-blog-post
本期给大家带来由 SsoZh 小哥哥带来的《卷积的计算》
https://www.cnblogs.com/SsoZhNO-1/p/11201989.html
什么是卷积?
TensorFlow中的卷积可以算在高级图像处理部分 。主要目的是对信号进行变换处理,得到特征 。卷积也可以叫滤波(filter),在整个特征处理中,位置如下图 。

卷积的计算 卷积运算符号

文章插图

图1特征处理
卷积的作用就是求特征,具体应用例如传统的双边滤波进行磨皮到深度学习进行人脸识别等都是的 。这里我们讲一下具体卷积的计算方法 。
卷积的计算 卷积运算符号

文章插图

图2 卷积的作用图
卷积的计算 卷积运算符号

文章插图

图3 手工卷积核的效果图(锐化)
注:传统关于图像处理,是为了通过某个点周围的环境对这个点的影响而获得的特征(也就是卷积核),因而出现了锐化(减少环境的影响)和模糊(增加周围的影响) 。
而在深度学习中,关于卷积核也是采用数学公式求得周围环境对某个点的影响,进而求特征,识别人脸等 。因此,卷积核相关的一个名词叫视野域(field-of-view)即考虑多少周围的环境,如何参照周围的环境,进而从这方面考虑可以得出Atrous卷积 。因为一个图片某个点周围的环境是不确定的,那么周围环境的对这个点的共享程度是多少,我们无法确定,因而一般一视同仁,即很常见,卷积核是一个对称矩阵,这个时候卷积就蜕化成了互相关 cross-correlation 。(现在大部分的深度学习教程中都把卷积定义为图像矩阵和卷积核的按位点乘 。实际上,这种操作亦应该是互相关,而卷积需要把卷积核顺时针旋转180度然后再做点乘 。)
卷积的计算方法:
1.TensorFlow中的Toeplitz matrix做卷积就是矩阵相乘,也就是GeMM 。
2.利用傅里叶变换
第一种方法(即把卷积转化为矩阵乘法,GeMM):
我们这里以一张图片为例,假设输入一张图片(单通道)他的矩阵shape(4,4,1);卷积核设kernel=(3,3),步长为1.padding方式为VALID 。(这样特征图大小保持不变)
TensorFlow卷积是
1、把(4,4,1 )reshape为(9,4)的矩阵 。(效果如下图)
2、卷积核filter reshape为(1,9)
3、采取矩阵相乘的方法:(1,9)*(9,4)=(1,4)得到卷积后的特征图像,然后reshape为(2,2)即可 。
卷积的计算 卷积运算符号

文章插图

图4 图片reshape
因为计算机一次性读取相近的内存是最快的,尤其是当需要把数据送到GPU去计算的时候,这样可以节省访存的时间,以达到加速的目的 。不同框架的访存机制不一样,所以会有行列相反这样的区别 。我们可以从tf.nn.con2d的data_format=NHWC,可以侧面猜测TensorFlow底层采用的是im2col的方法优化卷积运算(同caffe),因为NHWC的方式进行矩阵相乘访存命中率高于NCWH的方式,这样可以提高卷积的计算速度 。参考PPT最后几页 。
另外,根据这个方法,DCGAN把上面的矩阵乘法转置,则可以得到转置卷积,也叫反卷积 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。