Home‎ > ‎

GPU-ASIFT

Introduction

Our GPU-ASIFT implementation follows [2]. It aims to keep traffic between CPU and GPU to a minimum. Hence, our GPU-ASIFT directly inputs images to the GPU which computes SIFT key-points and descriptors without returning to the CPU. The algorithm has two main components.

(1) Affine simulation
We perform affine simulations with three separate CUDA kernels: Rotation, 1D Gaussian convolution, and directional sub-sampling. Results are stored in GPU memory and passed directly to Changchang Wu's SiftGPU without any GPU to CPU transfer overhead.

(2) Sift detection
Instead of David Lowe's sift implementation, we pass our simulation results to the CUDA version of Changchang Wu's SiftGPU which outputs the keypoints and descriptors.

GPU-ASIFT's performance depends on the GPU used. Generally, better graphics cards have faster computation and more sift features. The current program is tuned for Nvidia cards with compute capability of 2.1 and 5.2. The program runs smoothly on other cards but may not exploit their full power. We do not support cards with compute capability lower than 1.3. Note that for large image sets, it helps if image size does not vary too much. If they do, it is better to re-start GPU-ASIFT for each image pair.

The outputs of our GPU-ASIFT are binary files called .sift and .aux. The .sift files are fully compatible with VisualSFM and can be loaded directly. The .aux files store auxiliary information useful for our own matcher. On start, the program will query your graphics devices and chooses the best one to perform computations on. Currently, only Nvidia cards are supported.

Results


  Average Feature #
 (GPU-ASIFT)
 Average Feature # (ASIFT) Total Time
(GPU-ASIFT)
 Total Time
(ASIFT)
 Mean Time
(GPU-ASIFT)
 Mean Time
 (ASIFT)
 
3072 x 2048


627513.18 

 169099

216.03 s 

 7282.27 s
 
19.64 s
 
662.025 s
 
1920 x 1280

 
877134.18
 
81369.64
 
68.446 s

163.896 s 
 
6.222 s

14.90 s 
 
1536 x 1024


590805.45
 
 
54861.36

 44.415 s
 
103.194 s
 
4.038 s

 9.381 s

1280 x 853 

 
414425.45

38586 

32.333 s 

 70.62 s

 2.939 s

 6.42 s

1024 x 683 

 
261366
 
24755.36
 
24.07 s
 
46.283 s
 
2.188 s

 4.208 s

 640 x 427

 
91659.45
 
9257.091

14.93 s
 
 
19.796 s

 1.357 s
 
1.799 s
                           Table 1: GPU-ASIFT running on GTX 980 with default settings, ASIFT running on Intel Core i7-4790 and 8.0 GB RAM

  Average Feature #
 (GPU-ASIFT)
 Average Feature # (ASIFT) Total Time 
(GPU-ASIFT)
 Total Time 
(ASIFT)
 Mean Time 
(GPU-ASIFT)
 Mean Time
 (ASIFT)
 
3072 x 2048


95604.64 

 169099

92.526 s 

 798.885 s
 
8.411 s
 
72.626 s
 
1920 x 1280

 
106049.73
 
81369.64
 
67.118 s

312.106 s 
 
6.102 s

28.373 s 
 
1536 x 1024


103206.82
 
 
54861.36

 67.055 s
 
199.067 s
 
6.096 s

18.097 s

1280 x 853 

 
96190.64

38586 

58.139 s 

 137.308 s

 5.285 s

 12.48 s

1024 x 683 

 
101657.73
 
24755.36
 
57.347 s
 
88.916 s
 
5.213 s

 8.083 s

 640 x 427

 
91658.27
 
9257.091

48.44 s
 
 
34.712 s

 4.404 s
 
3.156 s
                          Table 2: GPU-ASIFT running on Quadro 600 with default settings, ASIFT running on Intel Xeon W3530 and 16.0 GB RAM

References
[1]   J. Morel and G. Yu, “Asift: A new framework for fully affine invariant image comparison,” SIAM Journal on Imaging Sciences, vol. 2, no. 2, pp. 438–469, 2009.
[2]   V. Codreanu, F. Dong, B. Liu, J. Roerdink, D. Williams, P. Yang, and B. Yasar, “Gpu-asift: A fast fully affine-invariant feature extraction algorithm,” International
       Conference on High Performance Computing and Simulation (HPCS), 2013.