Spaces:
Sleeping
Sleeping
| # Deep Local and Global Image Features | |
| [](https://github.com/tensorflow/tensorflow/releases/tag/v2.1.0) | |
| [](https://www.python.org/downloads/release/python-360/) | |
| This project presents code for deep local and global image feature methods, | |
| which are particularly useful for the computer vision tasks of instance-level | |
| recognition and retrieval. These were introduced in the | |
| [DELF](https://arxiv.org/abs/1612.06321), | |
| [Detect-to-Retrieve](https://arxiv.org/abs/1812.01584), | |
| [DELG](https://arxiv.org/abs/2001.05027) and | |
| [Google Landmarks Dataset v2](https://arxiv.org/abs/2004.01804) papers. | |
| We provide Tensorflow code for building and training models, and python code for | |
| image retrieval and local feature matching. Pre-trained models for the landmark | |
| recognition domain are also provided. | |
| If you make use of this codebase, please consider citing the following papers: | |
| DELF: | |
| [](https://arxiv.org/abs/1612.06321) | |
| ``` | |
| "Large-Scale Image Retrieval with Attentive Deep Local Features", | |
| H. Noh, A. Araujo, J. Sim, T. Weyand and B. Han, | |
| Proc. ICCV'17 | |
| ``` | |
| Detect-to-Retrieve: | |
| [](https://arxiv.org/abs/1812.01584) | |
| ``` | |
| "Detect-to-Retrieve: Efficient Regional Aggregation for Image Search", | |
| M. Teichmann*, A. Araujo*, M. Zhu and J. Sim, | |
| Proc. CVPR'19 | |
| ``` | |
| DELG: | |
| [](https://arxiv.org/abs/2001.05027) | |
| ``` | |
| "Unifying Deep Local and Global Features for Image Search", | |
| B. Cao*, A. Araujo* and J. Sim, | |
| arxiv:2001.05027 | |
| ``` | |
| GLDv2: | |
| [](https://arxiv.org/abs/2004.01804) | |
| ``` | |
| "Google Landmarks Dataset v2 - A Large-Scale Benchmark for Instance-Level Recognition and Retrieval", | |
| T. Weyand*, A. Araujo*, B. Cao and J. Sim, | |
| Proc. CVPR'20 | |
| ``` | |
| ## News | |
| - [Apr'20] Check out our CVPR'20 paper: ["Google Landmarks Dataset v2 - A | |
| Large-Scale Benchmark for Instance-Level Recognition and | |
| Retrieval"](https://arxiv.org/abs/2004.01804) | |
| - [Jan'20] Check out our new paper: | |
| ["Unifying Deep Local and Global Features for Image Search"](https://arxiv.org/abs/2001.05027) | |
| - [Jun'19] DELF achieved 2nd place in | |
| [CVPR Visual Localization challenge (Local Features track)](https://sites.google.com/corp/view/ltvl2019). | |
| See our slides | |
| [here](https://docs.google.com/presentation/d/e/2PACX-1vTswzoXelqFqI_pCEIVl2uazeyGr7aKNklWHQCX-CbQ7MB17gaycqIaDTguuUCRm6_lXHwCdrkP7n1x/pub?start=false&loop=false&delayms=3000). | |
| - [Apr'19] Check out our CVPR'19 paper: | |
| ["Detect-to-Retrieve: Efficient Regional Aggregation for Image Search"](https://arxiv.org/abs/1812.01584) | |
| - [Jun'18] DELF achieved state-of-the-art results in a CVPR'18 image retrieval | |
| paper: [Radenovic et al., "Revisiting Oxford and Paris: Large-Scale Image | |
| Retrieval Benchmarking"](https://arxiv.org/abs/1803.11285). | |
| - [Apr'18] DELF was featured in | |
| [ModelDepot](https://modeldepot.io/mikeshi/delf/overview) | |
| - [Mar'18] DELF is now available in | |
| [TF-Hub](https://www.tensorflow.org/hub/modules/google/delf/1) | |
| ## Datasets | |
| We have two Google-Landmarks dataset versions: | |
| - Initial version (v1) can be found | |
| [here](https://www.kaggle.com/google/google-landmarks-dataset). In includes | |
| the Google Landmark Boxes which were described in the Detect-to-Retrieve | |
| paper. | |
| - Second version (v2) has been released as part of two Kaggle challenges: | |
| [Landmark Recognition](https://www.kaggle.com/c/landmark-recognition-2019) | |
| and [Landmark Retrieval](https://www.kaggle.com/c/landmark-retrieval-2019). | |
| It can be downloaded from CVDF | |
| [here](https://github.com/cvdfoundation/google-landmark). See also | |
| [the CVPR'20 paper](https://arxiv.org/abs/2004.01804) on this new dataset | |
| version. | |
| If you make use of these datasets in your research, please consider citing the | |
| papers mentioned above. | |
| ## Installation | |
| To be able to use this code, please follow | |
| [these instructions](INSTALL_INSTRUCTIONS.md) to properly install the DELF | |
| library. | |
| ## Quick start | |
| ### Pre-trained models | |
| We release several pre-trained models. See instructions in the following | |
| sections for examples on how to use the models. | |
| **DELF pre-trained on the Google-Landmarks dataset v1** | |
| ([link](http://storage.googleapis.com/delf/delf_gld_20190411.tar.gz)). Presented | |
| in the [Detect-to-Retrieve paper](https://arxiv.org/abs/1812.01584). Boosts | |
| performance by ~4% mAP compared to ICCV'17 DELF model. | |
| **DELG pre-trained on the Google-Landmarks dataset v1** | |
| ([link](http://storage.googleapis.com/delf/delg_gld_20200520.tar.gz)). Presented | |
| in the [DELG paper](https://arxiv.org/abs/2001.05027). | |
| **RN101-ArcFace pre-trained on the Google-Landmarks dataset v2 (train-clean)** | |
| ([link](https://storage.googleapis.com/delf/rn101_af_gldv2clean_20200521.tar.gz)). | |
| Presented in the [GLDv2 paper](https://arxiv.org/abs/2004.01804). | |
| **DELF pre-trained on Landmarks-Clean/Landmarks-Full dataset** | |
| ([link](http://storage.googleapis.com/delf/delf_v1_20171026.tar.gz)). Presented | |
| in the [DELF paper](https://arxiv.org/abs/1612.06321), model was trained on the | |
| dataset released by the [DIR paper](https://arxiv.org/abs/1604.01325). | |
| **Faster-RCNN detector pre-trained on Google Landmark Boxes** | |
| ([link](http://storage.googleapis.com/delf/d2r_frcnn_20190411.tar.gz)). | |
| Presented in the [Detect-to-Retrieve paper](https://arxiv.org/abs/1812.01584). | |
| **MobileNet-SSD detector pre-trained on Google Landmark Boxes** | |
| ([link](http://storage.googleapis.com/delf/d2r_mnetssd_20190411.tar.gz)). | |
| Presented in the [Detect-to-Retrieve paper](https://arxiv.org/abs/1812.01584). | |
| Besides these, we also release pre-trained codebooks for local feature | |
| aggregation. See the | |
| [Detect-to-Retrieve instructions](delf/python/detect_to_retrieve/DETECT_TO_RETRIEVE_INSTRUCTIONS.md) | |
| for details. | |
| ### DELF extraction and matching | |
| Please follow [these instructions](EXTRACTION_MATCHING.md). At the end, you | |
| should obtain a nice figure showing local feature matches, as: | |
|  | |
| ### DELF training | |
| Please follow [these instructions](delf/python/training/README.md). | |
| ### DELG | |
| Please follow [these instructions](delf/python/delg/DELG_INSTRUCTIONS.md). At | |
| the end, you should obtain image retrieval results on the Revisited Oxford/Paris | |
| datasets. | |
| ### GLDv2 baseline | |
| Please follow | |
| [these instructions](delf/python/google_landmarks_dataset/README.md). At the | |
| end, you should obtain image retrieval results on the Revisited Oxford/Paris | |
| datasets. | |
| ### Landmark detection | |
| Please follow [these instructions](DETECTION.md). At the end, you should obtain | |
| a nice figure showing a detection, as: | |
|  | |
| ### Detect-to-Retrieve | |
| Please follow | |
| [these instructions](delf/python/detect_to_retrieve/DETECT_TO_RETRIEVE_INSTRUCTIONS.md). | |
| At the end, you should obtain image retrieval results on the Revisited | |
| Oxford/Paris datasets. | |
| ## Code overview | |
| DELF/D2R/DELG/GLD code is located under the `delf` directory. There are two | |
| directories therein, `protos` and `python`. | |
| ### `delf/protos` | |
| This directory contains protobufs: | |
| - `aggregation_config.proto`: protobuf for configuring local feature | |
| aggregation. | |
| - `box.proto`: protobuf for serializing detected boxes. | |
| - `datum.proto`: general-purpose protobuf for serializing float tensors. | |
| - `delf_config.proto`: protobuf for configuring DELF/DELG extraction. | |
| - `feature.proto`: protobuf for serializing DELF features. | |
| ### `delf/python` | |
| This directory contains files for several different purposes: | |
| - `box_io.py`, `datum_io.py`, `feature_io.py` are helper files for reading and | |
| writing tensors and features. | |
| - `delf_v1.py` contains code to create DELF models. | |
| - `feature_aggregation_extractor.py` contains a module to perform local | |
| feature aggregation. | |
| - `feature_aggregation_similarity.py` contains a module to perform similarity | |
| computation for aggregated local features. | |
| - `feature_extractor.py` contains the code to extract features using DELF. | |
| This is particularly useful for extracting features over multiple scales, | |
| with keypoint selection based on attention scores, and PCA/whitening | |
| post-processing. | |
| The subdirectory `delf/python/examples` contains sample scripts to run DELF | |
| feature extraction/matching, and object detection: | |
| - `delf_config_example.pbtxt` shows an example instantiation of the DelfConfig | |
| proto, used for DELF feature extraction. | |
| - `detector.py` is a module to construct an object detector function. | |
| - `extract_boxes.py` enables object detection from a list of images. | |
| - `extract_features.py` enables DELF extraction from a list of images. | |
| - `extractor.py` is a module to construct a DELF/DELG local feature extraction | |
| function. | |
| - `match_images.py` supports image matching using DELF features extracted | |
| using `extract_features.py`. | |
| The subdirectory `delf/python/delg` contains sample scripts/configs related to | |
| the DELG paper: | |
| - `delg_gld_config.pbtxt` gives the DelfConfig used in DELG paper. | |
| - `extract_features.py` for local+global feature extraction on Revisited | |
| datasets. | |
| - `perform_retrieval.py` for performing retrieval/evaluating methods on | |
| Revisited datasets. | |
| The subdirectory `delf/python/detect_to_retrieve` contains sample | |
| scripts/configs related to the Detect-to-Retrieve paper: | |
| - `aggregation_extraction.py` is a library to extract/save feature | |
| aggregation. | |
| - `boxes_and_features_extraction.py` is a library to extract/save boxes and | |
| DELF features. | |
| - `cluster_delf_features.py` for local feature clustering. | |
| - `dataset.py` for parsing/evaluating results on Revisited Oxford/Paris | |
| datasets. | |
| - `delf_gld_config.pbtxt` gives the DelfConfig used in Detect-to-Retrieve | |
| paper. | |
| - `extract_aggregation.py` for aggregated local feature extraction. | |
| - `extract_index_boxes_and_features.py` for index image local feature | |
| extraction / bounding box detection on Revisited datasets. | |
| - `extract_query_features.py` for query image local feature extraction on | |
| Revisited datasets. | |
| - `image_reranking.py` is a module to re-rank images with geometric | |
| verification. | |
| - `perform_retrieval.py` for performing retrieval/evaluating methods using | |
| aggregated local features on Revisited datasets. | |
| - `index_aggregation_config.pbtxt`, `query_aggregation_config.pbtxt` give | |
| AggregationConfig's for Detect-to-Retrieve experiments. | |
| The subdirectory `delf/python/google_landmarks_dataset` contains sample | |
| scripts/modules for computing GLD metrics / reproducing results from the GLDv2 | |
| paper: | |
| - `compute_recognition_metrics.py` performs recognition metric computation | |
| given input predictions and solution files. | |
| - `compute_retrieval_metrics.py` performs retrieval metric computation given | |
| input predictions and solution files. | |
| - `dataset_file_io.py` is a module for dataset-related file IO. | |
| - `metrics.py` is a module for GLD metric computation. | |
| - `rn101_af_gldv2clean_config.pbtxt` gives the DelfConfig used in the | |
| ResNet101-ArcFace (trained on GLDv2-train-clean) baseline used in the GLDv2 | |
| paper. | |
| The subdirectory `delf/python/training` contains sample scripts/modules for | |
| performing DELF training: | |
| - `datasets/googlelandmarks.py` is the dataset module used for training. | |
| - `model/delf_model.py` is the model module used for training. | |
| - `model/export_model.py` is a script for exporting trained models in the | |
| format used by the inference code. | |
| - `model/export_model_utils.py` is a module with utilities for model | |
| exporting. | |
| - `model/resnet50.py` is a module with a backbone RN50 implementation. | |
| - `build_image_dataset.py` converts downloaded dataset into TFRecords format | |
| for training. | |
| - `train.py` is the main training script. | |
| Besides these, other files in the different subdirectories contain tests for the | |
| various modules. | |
| ## Maintainers | |
| André Araujo (@andrefaraujo) | |
| ## Release history | |
| ### May, 2020 | |
| - Codebase is now Python3-first | |
| - DELG model/code released | |
| - GLDv2 baseline model released | |
| **Thanks to contributors**: Barbara Fusinska and André Araujo. | |
| ### April, 2020 (version 2.0) | |
| - Initial DELF training code released. | |
| - Codebase is now fully compatible with TF 2.1. | |
| **Thanks to contributors**: Arun Mukundan, Yuewei Na and André Araujo. | |
| ### April, 2019 | |
| Detect-to-Retrieve code released. | |
| Includes pre-trained models to detect landmark boxes, and DELF model pre-trained | |
| on Google Landmarks v1 dataset. | |
| **Thanks to contributors**: André Araujo, Marvin Teichmann, Menglong Zhu, | |
| Jack Sim. | |
| ### October, 2017 | |
| Initial release containing DELF-v1 code, including feature extraction and | |
| matching examples. Pre-trained DELF model from ICCV'17 paper is released. | |
| **Thanks to contributors**: André Araujo, Hyeonwoo Noh, Youlong Cheng, | |
| Jack Sim. | |