Meeting time: Wednesdays 16:15 Location: G102A
The following lines will read the descriptors and the image names in MATLAB:
fid = fopen('imagedesc.dat', 'r');
X = fread(fid, [128,inf], 'single⇒single');
Names = textread('imagenames.txt', '%s');
SIFT dataset: 2M SIFT descriptors are available here. The descriptors are 128D unsigned byte precision, the following Matlab lines will read the descriptors:
fid = fopen('SIFT.dat', 'r');
X = fread(fid, [128,inf], 'uint8⇒uint8');
Use the SIFT dataset for the approximate k-means. Use 32k cluster centers. Compare three different assignments to the nearest cluster (kd-forest, k-means tree, exact assignmet). For all three cases, start from identical inicialization. Compare the final results (up to say 30 iterations) in terms of sum of squared distances, that is Σ (X - f(X))^2, where f(X) is the assigned cluster center.
Looking forward to results on your own data too.
(Do not get confused by the text on the page. The mex version is in the package.)
Oxford 105k dataset: image thumbnails, descriptors (128 D vectors, single precision, stored one by one), and corresponing image names (one name per line, i-th name corresponds to i-th descriptors, Oxford 5k image names are given without a directory, remaining filenames contain a directory corresponding to the distributed directory structure).
Additional descriptors for Oxford105k are available here. These descriptors are based on deep convolutional neural networks and should in general give better visual similarity for nearest neighbours than the previous ones, please compare.
Wei Dong, Moses Charikar, Kai Li : “Efficient K-Nearest Neighbor Graph Construction for Generic Similarity Measures.” In Proceedings of the 20th international conference on World Wide Web (WWW). New York, NY. 2011. PDF software page
Use the new KGraph implementation.
Create a k-NN graph on the Oxford 105k dataset (CNN descriptors) and compare the precision and the run-time with the previous methods (make sure that you compute NN to all 105k vectors). Perform also a visual inspection of the results (are the nearest images similar?).
Jeff Johnson, Matthijs Douze, Hervé Jégou: “Billion-scale similarity search with GPUs” 2017 arXive
Install the code form the githup repository. Compare the implemented methods (using GPU) with the methods evaluated until now.
Specifically: use exhaustive GPU implementation in the k-means task and compare timings. Use both, exact and approximate NN for k-NN graph construction. Compare timings and precision. Further, implement an algorithm finding a path from image A to image B in the k-NN graph, so that the longest edge in the path is as short as possible, as in Section 6.6 of the paper, equation (12). Further, among all the paths with the same cost (12), select the shortest one (the smallest sum of edge weights). Have a code to compute the path and display the images along the path ready (I will provide some image pairs A and B).
Apply memory vectors on Oxford 105k dataset. Report precision and time efficiency, compare with previous approaches.