On Tue, 10 Sep 2013 09:43:24 +0200 Andreas Mueller <amueller@ais.uni-bonn.de> wrote:
Hi Jerome. Have you benched against vl_feat. They have pretty optimized C code, and I think it would be very interesting to see if you are faster. Their code is also BSD, btw.
Hello Andreas, Thanks for the link. This is the first time I use matlab ... so the comparison is likely to be unfair: I = imread(fullfile(vl_root,'data','roofs1.jpg')) ; t=cputime;[f,d] = vl_sift(single(rgb2gray(I))) ;e=cputime-t e=0.9600 under python: In [1]: import scipy.misc,sift In [2]: img = scipy.misc.imread("roofs1.jpg") In [3]: sift_gpu = sift.SiftPlan(template=img,devicetype="GPU") In [4]: %timeit kp = sift_gpu.keypoints(img) 10 loops, best of 3: 87 ms per loop In [5]: sift_cpu = sift.SiftPlan(template=img,devicetype="CPU") #selects Intel driver In [6]: %timeit kp = sift_cpu.keypoints(img) 1 loops, best of 3: 216 ms per loop In [7]: sift_cpu_amd = sift.SiftPlan(template=img,device=(1,0)) #selects AMD driver, computer specific In [8]: %timeit kp = sift_cpu_amd.keypoints(img) 1 loops, best of 3: 225 ms per loop The computer is a dual Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz (fast) but with a moderate graphics card Quadro 2000 On my GeForce Titan (GK110) I got: 10 loops, best of 3: 38.7 ms per loop A rough and unfair comparison would say our code is 25x faster; but the test has been made on a rather small image (640x478) which does not allow the GPU to express it's speed. On the other hand if the could would have run on my computer it would be worse (my CPU is only 2.2GHz). You says vl_feet is optimized, it looks slower than the one from IPOL wrapped under python https://github.com/kif/imageAlignment In [9]: import feature In [10]: %timeit feature.sift_keypoints(img.max(axis=-1)) 1 loops, best of 3: 687 ms per loop Comments are welcome. Cheers, -- Jerome Kieffer <google@terre-adelie.org>