高效卷积算法

总结下卷积加速的三种实现方法:

1.卷积等效于使用傅里叶变换将输入与核都转换到复频域,做一个点乘运算,再用逆变换变回到实域,这的确比离散的卷积更快。

2.当卷积核是可以分离的可以拆成一列乘一行的情况,将列与输入进行卷积后再把结果与行进行卷积,这种情况做卷积是最快的但是它只是针对特定的卷积核。这里提供大家一个链接里面专门讲解了和对比了这种方法还是在GPU的情况下点击打开链接,我也用pycuda体验过效果是不错就是不很实用,对卷积核限制太死了。如果对于任意的卷积核使用SVD分解成一列乘一行,保留矩阵的主成分,再用上述方法进行卷积,想法是不错的,但是矩阵过大保留下来的主成分代表不了矩阵的基本特性,我尝试过这个想法也不行。

3.由于矩阵卷积的运算可转换成矩阵乘法进行,具体的原理可以看看这一个帖子点击打开链接,MATLAB的程序点击打开链接,Python的程序点击打开链接,其实这样做只是改变了运算的方式,没有降低运算量。通过这么一转化非常适应使用GPU编程,值得一提的就是直接用离散卷积公式进行GPU加速效果是不大的,我对比过卷积核小的时候还可以,卷积核一大就不行了,不如上述第一种方法好(在CPU下),具体的做法可以看我以前的帖子点击打开链接,我建议想尝试的朋友放弃这种方法。用矩阵相乘的方法去进行GPU加速是肯定可以的,虽然我没有尝试过但是caffe下卷积乘法是这么做的,如果以后有空还是自己会做下。

这个帖子就是总结下前面的学习经验,有看法的朋友欢迎评论。

谢谢!

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fupotui7870/article/details/79946990
个人分类: 总结
上一篇GPU共享内存小结---pycuda
下一篇手把手走进神经网络(一)-- 神经网络的认识
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭