Sparse Representation Classification速度记录

来源:互联网 发布:校园网络借贷主题班会 编辑:程序博客网 时间:2024/05/20 09:22

lambda对速度的影响

SRC找稀疏系数x是按照最小化||A*x-y||^2 + lambda*sum|x_i|来找的,

维度数f=100,样本数为100

测试维度数f=100,样本数为100,lambda取值为x时一次SRC过程的速度

图1. 维度数f=100,样本数为100,lambda取值为x时一次SRC过程的速度

维度数f=500,样本数为1000

测试维度数f=500,样本数为1000,lambda取值为x时一次SRC过程的速度



图2. 维度数f=500,样本数为1000,lambda取值为x时一次SRC过程的速度

数据都是随机生成的,所以可能会有一些影响,不过影响不大啦,根据总体走向趋势,可以发现lambda=0.1的时候非常慢,之后随着lambda变大,速度会变快一些,然后又会有一个很慢的峰值点,之后又会速度又会变快,lambda=0.7~0.9的时候速度都很不错的哦!




之后固定lambda=0.6,测试下数据维度多少的影响

特征维度数对速度的影响

样本数为500.


图3. lambda=0.6,样本数为500,维度数f取值为x时一次SRC过程的速度


样本数为1000.


图4. lambda=0.6,样本数为1000,维度数f取值为x时一次SRC过程的速度

从图3和图4我们可以看出,图4基本上就是图3*2的情况,也就是说,样本数对速度的影响应该是线性的。

而特征维度数的走向也基本是随特征维度线性往上增长的,比较奇怪的是特征维度为100的时候速度反而不是最快的,我做了好几次试验,大部分情况下,f=100的时候速度都比f=200的要慢挺多的,很奇怪啊,难道特征维度数太小了反而使得寻找x的过程变得复杂了么尴尬


c++的运行情况

在c++里边,我使用HoG特征,将图片正规化到32*32大小,hog的滑动窗口也设置为32*32,所以最终生成维度数为324,样本数为1274,

实际上找x过程花费时间是0.002s,但是调用matlab的函数实际花费为matlab SRC costs 6660ms也即6s。这个真心好不实用呀再见



4个局部字典加上全局字典的一次运行情况:

Elapsed time显示的是这个找x过程花费的时间,而最下面的8472则显示整个过程花费的ms数。


暂时的总结

src的过程还是挺快的,不过在其它方面的时间好像花了好多啊尴尬,要好好修改代码看看时间都花到哪里去了。
特征维度的话还是可以用PCA来降维试一试的,之后会继续把PCA的处理加进来,系统本身的代码也要好好修改一下。
整个初始化过程(导入matlab的dll)花费时间很大,如下图有14s惊恐


绘制matlab代码如下:

%x为横坐标的取值,为一个行向量我这里的取值为平均误差与结构误差之间的平衡系数lambda,0.1~0.9%minimize ||A*x-y||^2 + lambda*sum|x_i|,x=0.1:0.1:0.9;%y是一个列向量y=[0.079840;0.080272; 0.072421;0.072848;0.078982;0.084040;0.073987;0.068211;0.068825];%b指blue蓝色,v指用小三角形表示点plot(x,y,'b-v');%设定x与y坐标的取值范围axis ([0.1 0.9 0.06 0.09]);%设定x坐标轴的显示set (gca,'xtick',[0.1:0.1:0.9]);%设定x,y坐标轴的标示ylabel('花费时间(s)','fontname','标楷体','fontweight','bold','fontsize',12)xlabel('lambda','fontname','标楷体','fontweight','bold','fontsize',12)%显示每个点的y值数据,num2str将y转化为string输出,'0.3f'表示保留小数点后三位text(x-0.01,y+0.002,num2str(y, '%0.3f'));






0 0
原创粉丝点击