概述
在《【算法+图像处理】2D卷积与快速卷积算法C语言实现》一文找来一个快速卷积
//2D快速卷积算法的实现 快速卷积算法需要核2D核h能够拆分成一个行向量和一个列向量的乘积的形式。
//实际实现也就是将2D卷积,拆分成两次1D卷积的形式。设和的大小为n*n,这样可以将算法复杂度从n*n降低为2n。
bool convolve2DFast(float* in, float* out, int dataSizeX, int dataSizeY,
float* kernel, int kernelSizeX, int kernelSizeY)
具体原理去看原文吧,为了应用该函数。需要转化一下
定义一个卷积层
class 卷积层
{
public:
int width; //宽
int height; //高
int depth; //通道 深度
float * data;
//构造函数
卷积层(int iwidth,int iheight);
卷积层(int iwidth,int iheight,int idepth);
卷积层(int iwidth,int iheight,int c,float * data);
~卷积层();
};
卷积层::卷积层(int iwidth,int iheight): width(iwidth),
height(iheight)
{
depth=1;
data=NULL;
}
卷积层::卷积层(int iwidth,int iheight,int idepth): width(iwidth),
height(iheight),depth(idepth)
{
data=NULL;
}
卷积层::卷积层(int iwidth,int iheight,int idepth,float * fdata): width(iwidth),
height(iheight),depth(idepth), data(fdata)
{
}
卷积层::~卷积层()
{
}
内存分配就在外部了。
用下面的快速卷积代替原来的卷积
void 卷积快速(卷积矩阵*filter,卷积矩阵*arr, 卷积矩阵*res)
{
卷积层 in=卷积矩阵2卷积层(arr);
卷积层 out=卷积矩阵2卷积层(res);
卷积层 kernel=卷积矩阵2卷积层(filter);
//convolve2DFast(float* in, float* out, int dataSizeX, int dataSizeY,
// float* kernel, int kernelSizeX, int kernelSizeY);
convolve2DFast(in.data, out.data, in.width, in.height,
kernel.data, kernel.width, kernel.height);
卷积层2卷积矩阵_复制(&out,res);
delete []in.data; in.data=NULL;
delete []out.data; out.data=NULL;
delete []kernel.data; kernel.data=NULL;
}
相互转换:
卷积层 卷积矩阵2卷积层(卷积矩阵 * a)
{
int w=a->width;
int h=a->height;
卷积层 in(w,h,1);
in.data=new float[w * h * sizeof(float)];
float * t=in.data;
for (int i = 0; i < w * h; i++)
*t++=a->data[i];
return in;
}
void 卷积层2卷积矩阵_复制(卷积层 * a,卷积矩阵 *r)
{
int w=a->width;
int h=a->height;
if(w==r->width && h==r->height)
//卷积矩阵 in(w,h);
//float * t=a->data;
{
for (int i = 0; i < w * h; i++)
r->data[i]=a->data[i];//*t++;
}
else
cout<<"不能复制,矩阵大小不等 "<<endl;
}
这样就比原来快一点了
效果图:
原图
2倍图
3倍图
4倍图
程序下载:
https://download.csdn.net/download/juebai123/10528979
3 个不同放大倍率的VDSR 重建程序
和上个SRCNN 程序 。
最后
以上就是野性舞蹈为你收集整理的用“ 快速卷积”来加速‘卷积’的全部内容,希望文章能够帮你解决用“ 快速卷积”来加速‘卷积’所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复