This repository contains the python
code for evaluating feature
descriptors on the HPatches
dataset. For more information on the
methods and the evaluation protocols please check [1].
To install the required packages on Ubuntu, run the following commands:
pip install -r utils/requirements.txt --user
sudo apt-get install libopencv-dev python-opencv
For other Linux
distributions or macOS
please see the
guide.
The rest of this document assumes you have already downloaded the HPatches dataset. For information on how to get it, please check the guide.
An example of how to load a sequence and visualise the patches can be
found in the hpatches_vis.py
file included in the repository:
python hpatches_vis.py
We provide code for evaluating descriptors in the three different tasks described on [1]. Details about the task definition files, can be found here.
Note that that task definition files are saved in
../tasks/ and are shared between the python
and
matlab
implementations of the HPatches
benchmark.
The script expects two required arguments which are the root folder of
the saved .csv
files (--descr-dir
), and the task to perform
[verification, matching, retrieval]
, for example:
python hpatches_eval.py --descr-name=sift --task=verification --delimiter=";"
gets the verification
results for the sift
descriptor.
You can perform several tasks at once by repeating the --task
argument:
python hpatch_eval.py --descr-dir=descrs/sift/ --task=verification --task=matching --delimiter=";"
There are also several optional arguments (e.g. delimiter for the
.csv
files, split to perform the evaluation). For a full list and
a more detailed explanation, run the following:
python hpatch_eval.py --h
Results are cached in the results
folder, for each task and for each
descriptor. If you want to re-compute the results for your descriptor,
simply manually delete the respective files in the results
sub-folder.
We provide several pre-computed splits to
encourage reproducibility. Current available splits are
[a (ECCV)
,b
,c
,illum
,view
,full
]. More
information can be found here.
python hpatch_eval.py --descr-dir=descrs/sift/ --task=matching --delimiter=";"
python hpatch_eval.py --descr-dir=descrs/misigma/ --task=retrieval --split=b
python hpatch_eval.py --descr-dir=descrs/deepdesc/ --task=verification --task=matching --task=retrieval
To evaluate your descriptor, assuming that the root folder containing
the .csv
files for your descriptor is
descrs/DESC/
simply input to the --descr
argument your path:
python hpatch_eval.py --descr-dir=descrs/DESC/ --task=retrieval
An example script that shows how to read and print the evaluation
results from already cached result files can be found in hpatch_results.py
.
Required parameters are --descr
descriptor name (e.g. sift
),
--results-dir
results root folder (e.g. results/
), --task
task
name (e.g. {verification,matching,retrieval}). For example:
python hpatch_results.py --descr=sift --results-dir=results/ --task=verification
Note that as the previous scripts, it can accept multiple descriptors and multiple tasks e.g.
python hpatch_results.py --results-dir=results/ --descr=sift --descr=deepdesc --task=verification --task=retrieval
[1] HPatches: A benchmark and evaluation of handcrafted and learned local descriptors, Vassileios Balntas*, Karel Lenc*, Andrea Vedaldi and Krystian Mikolajczyk, CVPR 2017. *Authors contributed equally.