|
|
|
|
移动端

2.4.5 卷积的计算

《深度学习与计算机视觉:算法原理、框架应用与代码实现》第2章 深度学习和计算机视觉中的基础数学知识,本章会尽量从定性的角度讲解一些与深度学习、计算视觉紧密联系的基础数学概念,不一定会很严谨细致,但力求简单、形象。本节为大家介绍卷积的计算。

作者:叶韵来源:机械工业出版社|2017-11-16 18:18

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

2.4.5  卷积的计算

首先进行一个约定,接下来的内容里如果提到卷积,一般都是指二维卷积。卷积的计算分为两大类,一类是将卷积操作转换为矩阵乘法,还有一类是利用卷积在频域的特性将卷积转换为频域的乘法。我们不打算探讨太多细节,大概了解一下这两类办法。

1.用矩阵乘法计算卷积

把卷积转换为矩阵乘法的思路非常直接,既然卷积在给定位置上的计算本质上是个点积,那么就可以把卷积的全过程转化成不同位置的点积计算。下面以图2-45中所示一个最简单的例子来讲一下。

如图2-45所示,当核在左上角位置时,不直接考虑是卷积核与左上角的子矩阵做点积,而是换个思路,通过零填充把卷积核扩成一个和待卷积信号一样大的矩阵,这样核与待卷积信号的长度一样,也可以按照对应位置做点积,并且方便的是,用这个办法可以把卷积核在每个不同位置的情况都转化成一个和待卷积信号大小一样的矩阵,然后按照对应位置做点积。沿着这个思路,把每一个卷积核所在的位置都用零填充扩展,并且再多做一步,就是按照一行一行的顺序展开成一个一维向量,就组成了图2-45中最中央的那个4行9列的矩阵。所以很自然的,把待卷积信号也展开成一个一维向量,这样就构成了矩阵乘法中乘号右边的那一项。得到的结果是个四维的向量,这个结果“折叠”回去就得到了最终的结果。于是二维卷积就这样被转换成了矩阵乘法。

如果读者注意就会发现中间的矩阵中,卷积核展开之后,每次位置移动就相当于所有元素向右移动了一个位置。因为第二次已经移动到了矩阵的右边缘,所以下一个位置核换行了,因此可看到中间矩阵的第三行和第二行相比向右移动了两个位置。不过大体而言能看出每一行的元素向右移动位置的趋势。这种矩阵的原型是一种叫做托普利兹(Toeplitz)矩阵,也就是矩阵对角线,以及对角线平行的元素都相等的矩阵(二维卷积更正式的名字叫块循环矩阵,doubly block circulant matrix)。总而言之,就是把卷积核移动位置通过矩阵每一行元素位置的移动来实现。

在Caffe中,默认的卷积实现就是基于矩阵乘法的办法。

2.在频域计算卷积

空域的卷积在频域就对应着乘法,这是在信号领域常用的一个结论:

这里就不过多介绍细节了,大体来说就是通过FFT转换到频域做乘法,然后再变换回来就得到卷积后的结果。基于这种方法的卷积实现,在优化后的性能可以在GPU上达到很好的效率,是主流的快速计算卷积的算法,在大部分框架下都有对应实现,比如Torch、Theano和cudnn。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

超级网管员——网络服务

本书全面介绍了Windows Server 2003 R2中最常用的各种服务,包括域名服务、动态IP地址服务、Windows名称服务、活动目录服务、Web服务、FTP...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊