README.md 11.4 KB
Newer Older
André Araujo's avatar
André Araujo committed
1
# Deep Local and Global Image Features
Andre Araujo's avatar
Andre Araujo committed
2

3
[![TensorFlow 2.1](https://img.shields.io/badge/tensorflow-2.1-brightgreen)](https://github.com/tensorflow/tensorflow/releases/tag/v2.1.0)
4
[![Python 3.6](https://img.shields.io/badge/python-3.6-blue.svg)](https://www.python.org/downloads/release/python-360/)
5

André Araujo's avatar
André Araujo committed
6
7
8
9
10
This project presents code for extracting local and global image features, which
are particularly useful for large-scale instance-level image recognition. These
were introduced in the [DELF](https://arxiv.org/abs/1612.06321),
[Detect-to-Retrieve](https://arxiv.org/abs/1812.01584) and
[DELG](https://arxiv.org/abs/2001.05027) papers.
11
12
13

We also released pre-trained models based on the
[Google Landmarks dataset](https://www.kaggle.com/google/google-landmarks-dataset).
Andre Araujo's avatar
Andre Araujo committed
14

André Araujo's avatar
André Araujo committed
15
16
17
The pre-trained models released here have been optimized for landmark
recognition, so expect it to work well in this area. We also provide tensorflow
code for building and training models.
Andre Araujo's avatar
Andre Araujo committed
18

19
If you make use of this code, please consider citing the following papers:
Andre Araujo's avatar
Andre Araujo committed
20

André Araujo's avatar
André Araujo committed
21
DELF:
22
23
[![Paper](http://img.shields.io/badge/paper-arXiv.1612.06321-B3181B.svg)](https://arxiv.org/abs/1612.06321)

Andre Araujo's avatar
Andre Araujo committed
24
25
```
"Large-Scale Image Retrieval with Attentive Deep Local Features",
26
H. Noh, A. Araujo, J. Sim, T. Weyand and B. Han,
Andre Araujo's avatar
Andre Araujo committed
27
28
29
Proc. ICCV'17
```

André Araujo's avatar
André Araujo committed
30
Detect-to-Retrieve:
31
32
[![Paper](http://img.shields.io/badge/paper-arXiv.1812.01584-B3181B.svg)](https://arxiv.org/abs/1812.01584)

33
34
35
36
37
38
```
"Detect-to-Retrieve: Efficient Regional Aggregation for Image Search",
M. Teichmann*, A. Araujo*, M. Zhu and J. Sim,
Proc. CVPR'19
```

André Araujo's avatar
André Araujo committed
39
40
41
42
43
44
45
46
47
DELG:
[![Paper](http://img.shields.io/badge/paper-arXiv.2001.05027-B3181B.svg)](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
```

Andre Araujo's avatar
Andre Araujo committed
48
49
## News

André Araujo's avatar
André Araujo committed
50
51
-   [Jan'20] Check out our new paper:
    ["Unifying Deep Local and Global Features for Image Search"](https://arxiv.org/abs/2001.05027)
52
53
54
55
-   [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).
56
57
58
59
60
61
-   [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
Andre Araujo's avatar
Andre Araujo committed
62
    [ModelDepot](https://modeldepot.io/mikeshi/delf/overview)
63
-   [Mar'18] DELF is now available in
Andre Araujo's avatar
Andre Araujo committed
64
65
66
67
    [TF-Hub](https://www.tensorflow.org/hub/modules/google/delf/1)

## Dataset

68
69
70
71
72
73
74
75
76
77
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
78
79
80
    [here](https://github.com/cvdfoundation/google-landmark). See also
    [the CVPR'20 paper](https://arxiv.org/abs/2004.01804) on this new dataset
    version.
81
82
83

If you make use of these datasets in your research, please consider citing the
papers mentioned above.
Andre Araujo's avatar
Andre Araujo committed
84

Andre Araujo's avatar
Andre Araujo committed
85
86
## Installation

87
88
89
90
91
To be able to use this code, please follow
[these instructions](INSTALL_INSTRUCTIONS.md) to properly install the DELF
library.

## Quick start
Andre Araujo's avatar
Andre Araujo committed
92

93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
### 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 [CVPR'19 Detect-to-Retrieve paper](https://arxiv.org/abs/1812.01584).
Boosts performance by ~4% mAP compared to ICCV'17 DELF model.

**DELF pre-trained on Landmarks-Clean/Landmarks-Full dataset**
([link](http://storage.googleapis.com/delf/delf_v1_20171026.tar.gz)). Presented
in the [ICCV'17 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
[CVPR'19 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
[CVPR'19 Detect-to-Retrieve paper](https://arxiv.org/abs/1812.01584).

118
119
120
121
122
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.

123
### DELF extraction and matching
Andre Araujo's avatar
Andre Araujo committed
124
125
126
127

Please follow [these instructions](EXTRACTION_MATCHING.md). At the end, you
should obtain a nice figure showing local feature matches, as:

128
129
![MatchedImagesExample](delf/python/examples/matched_images_example.jpg)

130
131
132
133
### DELF training

Please follow [these instructions](delf/python/training/README.md).

André Araujo's avatar
André Araujo committed
134
135
136
137
138
139
### 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.

140
141
142
143
144
145
### Landmark detection

Please follow [these instructions](DETECTION.md). At the end, you should obtain
a nice figure showing a detection, as:

![DetectionExample1](delf/python/examples/detection_example_1.jpg)
Andre Araujo's avatar
Andre Araujo committed
146

147
148
### Detect-to-Retrieve

149
150
151
152
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.
153

Andre Araujo's avatar
Andre Araujo committed
154
155
## Code overview

156
DELF/D2R code is located under the `delf` directory. There are two directories
Andre Araujo's avatar
Andre Araujo committed
157
158
159
160
therein, `protos` and `python`.

### `delf/protos`

161
This directory contains protobufs:
Andre Araujo's avatar
Andre Araujo committed
162

163
164
-   `aggregation_config.proto`: protobuf for configuring local feature
    aggregation.
165
-   `box.proto`: protobuf for serializing detected boxes.
Andre Araujo's avatar
Andre Araujo committed
166
167
-   `datum.proto`: general-purpose protobuf for serializing float tensors.
-   `delf_config.proto`: protobuf for configuring DELF extraction.
168
-   `feature.proto`: protobuf for serializing DELF features.
Andre Araujo's avatar
Andre Araujo committed
169
170
171
172
173

### `delf/python`

This directory contains files for several different purposes:

174
175
-   `box_io.py`, `datum_io.py`, `feature_io.py` are helper files for reading and
    writing tensors and features.
176
-   `delf_v1.py` contains code to create DELF models.
177
178
179
180
-   `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.
Andre Araujo's avatar
Andre Araujo committed
181
182
183
184
185
186
-   `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
187
feature extraction/matching, and object detection:
Andre Araujo's avatar
Andre Araujo committed
188

189
190
-   `delf_config_example.pbtxt` shows an example instantiation of the DelfConfig
    proto, used for DELF feature extraction.
191
-   `detector.py` is a module to construct an object detector function.
192
-   `extract_boxes.py` enables object detection from a list of images.
Andre Araujo's avatar
Andre Araujo committed
193
-   `extract_features.py` enables DELF extraction from a list of images.
194
195
-   `extractor.py` is a module to construct a DELF local feature extraction
    function.
Andre Araujo's avatar
Andre Araujo committed
196
197
-   `match_images.py` supports image matching using DELF features extracted
    using `extract_features.py`.
198

André Araujo's avatar
André Araujo committed
199
200
201
202
203
204
205
206
207
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.

208
209
210
The subdirectory `delf/python/detect_to_retrieve` contains sample
scripts/configs related to the Detect-to-Retrieve paper:

211
212
213
214
-   `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.
215
216
217
-   `cluster_delf_features.py` for local feature clustering.
-   `dataset.py` for parsing/evaluating results on Revisited Oxford/Paris
    datasets.
218
219
-   `delf_gld_config.pbtxt` gives the DelfConfig used in Detect-to-Retrieve
    paper.
220
221
222
223
224
-   `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.
225
226
-   `image_reranking.py` is a module to re-rank images with geometric
    verification.
227
228
229
230
231
-   `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.

232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
The subdirectory `delf/python/google_landmarks_dataset` contains sample
scripts/modules for computing GLD metrics:

-   `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.

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.

256
257
Besides these, other files in the different subdirectories contain tests for the
various modules.
Andre Araujo's avatar
Andre Araujo committed
258
259
260
261
262
263
264

## Maintainers

André Araujo (@andrefaraujo)

## Release history

265
266
267
268
269
270
271
### 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.

272
273
### April, 2019

274
Detect-to-Retrieve code released.
275
276
277
278
279
280
281
282

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
Andre Araujo's avatar
Andre Araujo committed
283
284

Initial release containing DELF-v1 code, including feature extraction and
285
matching examples. Pre-trained DELF model from ICCV'17 paper is released.
Andre Araujo's avatar
Andre Araujo committed
286
287
288

**Thanks to contributors**: André Araujo, Hyeonwoo Noh, Youlong Cheng,
Jack Sim.