Home

Awesome

File-Based-ITQ

###File Based ITQ example for LSHBOX - An Open Source C++ Toolbox of Locality-Sensitive Hashing for Large Scale Image Retrieval.

Usage

The build floder is compiled under Win64. And here is an example which describes the steps about how to use the code.

For C++

A. Run test/mat2binary.m to transform the original database from MATLAB's .mat to raw binary files. The code had limited the size of each binary file by BATCH_SIZE = 1000000;. (Just to illustrate the binary data format, MATLAB is not essential!)

B. After step A, test/dataset folder will be generated, and it contians some raw binary files, such as data_0.bin, data_1.bin,...

C. Create data.meta in test/dataset folder manually, and write the following configuration informations, which is used to interpret the raw data.

DIMENSIONS = 32

TOTAL_SIZE = 2047379

BATCH_SIZE = 1000000

D. Now, The test/dataset folder is the raw data. All the other original database show organized by the same way.

E. Copy create_benchmark_filedb.exe, dbitq_save.exe, and dbitq_loads.exe from build/bin/x64/Release folder to test folder.

F. Run the following command line to create benchmark file data.ben-200-50.

create_benchmark_filedb . data.ben-200-50 200 50

G. Run the following command line to save the hash tables.

dbitq_save . 2 5 . 20

H. Run the following command line to load the hash tables and query.

dbitq_loads . ./ITQ_L-2_N-5_S-50000_I-100 data.ben-200-50 4096 0

For Python

After step A, you can also run the python code in build/py_module/x64/Release/test_pyitq.py or in sources/python/win/x64/test_pyitq.py.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# test_pyitq.py
from scipy.io import loadmat
import pyitq
queryset = loadmat('queryset.mat')['queryset']
itq = pyitq.itq_f()
itq.save_hash(
    'E:/GitHub/File-Based-ITQ/test',
    'E:/GitHub/File-Based-ITQ/test',
    20,
    3,
    6,
    5000,
    200
)
itq.load_hash(
    'E:/GitHub/File-Based-ITQ/test',
    'E:/GitHub/File-Based-ITQ/test/ITQ_L-3_N-6_S-5000_I-200',
    2,
    30,
    4096
)
for each in queryset:
    print '----------------------------------------------'
    res = itq.query(each.tolist(), 5, 0)
    print res[0]
    print res[1]
    res = itq.query(each.tolist(), 5, 1)
    print res[0]
    print res[1]

#####In order to understand this steps, you should go to read the source code in sources folder.