图像卷积的fft实现验证(python)
来源:互联网 发布:java timestamp 比较 编辑:程序博客网 时间:2024/06/06 02:17
1、Caffe的卷积操作时间主要在矩阵乘法,假设一个m*n卷积核,且输入通道数为1,输出特征图大小为h*w,则乘法个数m*n*h*w,这里的优化仅限于对矩阵的乘法优化,因此,只要选择适合的矩阵计算库就可以了。
2、若使用FFT来计算图像卷积。其主要步骤如下。
假设输入图像的大小为len=h*w,卷积核大小k_len=m*n;通常len>>k_len;
对输入图像A做FFT,其算法的时间复杂度为o(lenlglen);
对卷积核B做FFT,但是由于卷积核与输入图像尺寸不一样,需要将卷积核扩展,即将卷积核倒置后,补len-k_len个0。
将A、B傅里叶变换的结果相乘,即对应位相乘获得结果C。乘法个数为len,时间复杂度为o(len)
对C做IFFT,得到结果D,在D中每隔k_len的值实部取出来,就是图像卷积的结果。因为图像卷积其实就是对应位相乘,所以需要每隔k_len取值,时间复杂度为o(len)
假设卷积核个数>1,需要对卷积核重新扩展后重复2)3)4)步骤,并与上一个卷积核图像卷积的值对应位相加就能获得。
验证正确性:
输入图像的卷积顺序-1,1,3,8 2,43,1,3 1,3,1,3 54,-2,-3,-1
卷积核1,2,-1,3
图像卷积结果:22,96,15,50.
此处注意,计算结果是用卷积核与输入图像进行乘法累加。
使用FFT结果:22,96,15,50。
此处注意,将卷积核逆置。
结果正确
暂时未能看出此方法的优越性,从空间上看,需要对卷积核进行扩展,其空间大小与输入图像的尺寸大小一样。时间上分析,仅二者FFT对应相乘的时间的乘法个数就和矩阵乘法个数的数量级是一样的了(当len>>k_len时)。适用于卷积核尺寸较大的情景。
图2出处:https://core.ac.uk/download/pdf/24989291.pdf
虽然没理解为什么性能提升这么多,但是该论文所做的实验证明了FFT性能很好,虽然复杂度推导跟我推导的差不多~此论文用了cuFFT库
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
至于多通道,多卷积核的,经python验证,卷积结果正确,其大概步骤如下:
水平有限,出错之处,希望得到各位的指正。
- 图像卷积的fft实现验证(python)
- 图像卷积,图像FFT卷积的一些应用(去光照影响,图像放大,添加签名)
- 图像情感分析(3):基于卷积神经网络的图像情感分析模型Python实现
- Python图像处理库PIL中快速傅里叶变换FFT的实现(一)
- Python图像处理库PIL中快速傅里叶变换FFT的实现(一)
- 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义。
- 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义。 .
- 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义。
- 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义
- SSE图像算法优化系列十一:使用FFT变换实现图像卷积。
- 离散FFT和图像二维FFT变换的java实现
- Matlab中使用FFT验证卷积定理
- python scipy卷积 图像卷积
- 图像反卷积Deconvolution的实现
- 图像处理中卷积的实现
- 图像卷积实现
- Python实现快速傅里叶变换(FFT)
- 卷积神经网络(三):卷积神经网络CNN的简单实现(部分Python源码)
- 最新版spark-2.2.0安装教程
- 【effective C++】不要在构造函数或析构函数内调用虚函数
- springmvc+jsonp解决跨域问题
- 修改Apache 局域网内 访问自己的本地网站
- 微信小程序的网络设置,及网络请求:wx.request(OBJECT)
- 图像卷积的fft实现验证(python)
- C#回顾学习笔记十八:面向对象是什么
- Android hdpi ldpi mdpi xhdpi xxhdpi屏幕适配详解
- ORA-04098: trigger 'SYS.GGS_DDL_TRIGGER_BEFORE' is invalid and failed re-validation
- 百度地图 省市区县 信息展示
- win10下多图详解Android Studio集成第三方模拟器 -- Genymotion
- 面向对象第二个特征----继承III(子父类中的构造函数)
- DLL获取当前文件目录和DLL调试方法
- accept 文件描述符用尽处理