Dies ist eine Python -Toolbox, die das Training und die Prüfung des in unseren Arbeiten beschriebenen Ansatz implementiert:
Feinabstimmung CNN-Bild-Abruf ohne menschliche Annotation ,
Radenović F., Tolias G., Chum O., TPAMI 2018 [Arxiv]
CNN Image Retrieval lernt aus dem Bogen: unbeaufsichtigte Feinabstimmung mit harten Beispielen ,
Radenović F., Tolias G., Chum O., ECCV 2016 [Arxiv]
Dieser Code implementiert:
Um diese Toolbox auszuführen, benötigen Sie:
Navigieren Sie ( cd ) zum Root der Toolbox [YOUR_CIRTORCH_ROOT] . Sie können ein Paket mit pip3 install . Wenn Sie brauchen. Stellen Sie sicher, dass die Pytorch- und Torchvision -Pakete installiert sind.
Beispieltrainingskript befindet sich in YOUR_CIRTORCH_ROOT/cirtorch/examples/train.py
python3 -m cirtorch.examples.train [-h] [--training-dataset DATASET] [--no-val]
[--test-datasets DATASETS] [--test-whiten DATASET]
[--test-freq N] [--arch ARCH] [--pool POOL]
[--local-whitening] [--regional] [--whitening]
[--not-pretrained] [--loss LOSS] [--loss-margin LM]
[--image-size N] [--neg-num N] [--query-size N]
[--pool-size N] [--gpu-id N] [--workers N] [--epochs N]
[--batch-size N] [--optimizer OPTIMIZER] [--lr LR]
[--momentum M] [--weight-decay W] [--print-freq N]
[--resume FILENAME]
EXPORT_DIR
Eine ausführliche Erläuterung der Optionen ausgeführt:
python3 -m cirtorch.examples.train -h
Hinweis : Daten und Netzwerke, die für das Training und Test verwendet werden, werden bei Verwendung des Beispielskripts automatisch heruntergeladen.
Das Beispiel -Testskript befindet sich in YOUR_CIRTORCH_ROOT/cirtorch/examples/test.py
python3 -m cirtorch.examples.test [-h] (--network-path NETWORK | --network-offtheshelf NETWORK)
[--datasets DATASETS] [--image-size N]
[--multiscale MULTISCALE] [--whitening WHITENING] [--gpu-id N]
Eine ausführliche Erläuterung der Optionen ausgeführt:
python3 -m cirtorch.examples.test -h
HINWEIS : Daten, die zum Testen verwendet werden, werden automatisch heruntergeladen, wenn das Beispielskript verwendet wird.
Um beispielsweise unser bestes Netz, das im TPAMI 2018 -Papier beschrieben wird, fährt das folgende Befehl aus. Nach jeder Epoche wird das fein abgestimmte Netzwerk an den von Oxford und Paris Benchmarks getesteten Benchmarks getestet:
python3 -m cirtorch.examples.train YOUR_EXPORT_DIR --gpu-id '0' --training-dataset 'retrieval-SfM-120k'
--test-datasets 'roxford5k,rparis6k' --arch 'resnet101' --pool 'gem' --loss 'contrastive'
--loss-margin 0.85 --optimizer 'adam' --lr 5e-7 --neg-num 5 --query-size=2000
--pool-size=22000 --batch-size 5 --image-size 362
Netzwerke können nach jeder Epoche mit erlerntem Aufhellung bewertet werden (das Aufhellung wird am Ende der Epoche geschätzt). Um diesen Lauf zu erreichen, den folgenden Befehl. Beachten Sie, dass dies das gesamte Trainingsvorgang erheblich verlangsamt und Sie Netzwerke mit der erlernten Aufhellung später unter Verwendung des Beispiel -Testskripts bewerten können.
python3 -m cirtorch.examples.train YOUR_EXPORT_DIR --gpu-id '0' --training-dataset 'retrieval-SfM-120k'
--test-datasets 'roxford5k,rparis6k' --test-whiten 'retrieval-SfM-30k'
--arch 'resnet101' --pool 'gem' --loss 'contrastive' --loss-margin 0.85
--optimizer 'adam' --lr 5e-7 --neg-num 5 --query-size=2000 --pool-size=22000
--batch-size 5 --image-size 362
Hinweis : Die angepasste (niedrigere) Lernrate wird so eingestellt, dass sie eine ähnliche Leistung erzielt wie bei Matconvnet und Pytorch-0.3.0 Implementierung des Trainings.
Vorbereitete Netzwerke, die mit den gleichen Parametern trainiert sind wie in unserem TPAMI 2018-Artikel, mit vorberechtigtem Nachbearbeitungstufe. Um sie zu bewerten, läuft:
python3 -m cirtorch.examples.test --gpu-id '0' --network-path 'retrievalSfM120k-resnet101-gem'
--datasets 'oxford5k,paris6k,roxford5k,rparis6k'
--whitening 'retrieval-SfM-120k'
--multiscale '[1, 1/2**(1/2), 1/2]'
oder
python3 -m cirtorch.examples.test --gpu-id '0' --network-path 'retrievalSfM120k-vgg16-gem'
--datasets 'oxford5k,paris6k,roxford5k,rparis6k'
--whitening 'retrieval-SfM-120k'
--multiscale '[1, 1/2**(1/2), 1/2]'
Die folgende Tabelle zeigt den Leistungsvergleich von Netzwerken, die mit diesem Framework ausgebildet sind, und der in dem Papier verwendeten Netzwerke, die mit unserem CNN -Bildabruf in Matconvnet trainiert wurden:
| Modell | Oxford | Paris | Roxf (m) | RPAR (m) | Roxf (h) | RPAR (H) |
|---|---|---|---|---|---|---|
| VGG16-GEM (MATCONVNET) | 87,9 | 87.7 | 61.9 | 69.3 | 33.7 | 44.3 |
| VGG16-GEM (Pytorch) | 87,3 | 87,8 | 60.9 | 69.3 | 32.9 | 44,2 |
| Resnet101-GEM (Matconvnet) | 87,8 | 92.7 | 64.7 | 77,2 | 38,5 | 56,3 |
| Resnet101-GEM (Pytorch) | 88.2 | 92.5 | 65.4 | 76,7 | 40.1 | 55.2 |
Hinweis (Juni 2022): Wir haben die Download -Dateien für Oxford 5K- und Paris 6K -Bilder aktualisiert, um Bilder mit verschwommenen Gesichtern zu verwenden, wie von den ursprünglichen Datensatzbesitzern vorgeschlagen. Bedenken Sie: "Experimente haben gezeigt, dass man die Gesichtsversion zum Benchmarking-Bild-Abrufen mit vernachlässigbarem Genauigkeitsverlust verwenden kann."
Bewertung Ihres geschulten Netzwerks mithilfe einer Skala und ohne Lernaufhellung:
python3 -m cirtorch.examples.test --gpu-id '0' --network-path YOUR_NETWORK_PATH
--datasets 'oxford5k,paris6k,roxford5k,rparis6k'
Bewertung des geschulten Netzwerks mithilfe einer Multi-Skala-Bewertung und mit erlernten Aufhellung als Nachbearbeitung:
python3 -m cirtorch.examples.test --gpu-id '0' --network-path YOUR_NETWORK_PATH
--datasets 'oxford5k,paris6k,roxford5k,rparis6k'
--whitening 'retrieval-SfM-120k'
--multiscale '[1, 1/2**(1/2), 1/2]'
Off-the-Shelf-Netzwerke können ebenfalls ausgewertet werden, zum Beispiel:
python3 -m cirtorch.examples.test --gpu-id '0' --network-offtheshelf 'resnet101-gem'
--datasets 'oxford5k,paris6k,roxford5k,rparis6k'
--whitening 'retrieval-SfM-120k'
--multiscale '[1, 1/2**(1/2), 1/2]'
Eine alternative Architektur umfasst nach dem globalen Pooling eine lernbare FC -Schicht (Projektion). Es ist wichtig, die Parameter dieser Schicht mit dem Ergebnis einer erlernten Aufhellung zu initialisieren. Um ein solches Setup zu trainieren, sollten Sie die folgenden Befehle ausführen (die Leistung wird alle 5 Epochen auf roxford5k und rparis6k bewertet):
python3 -m cirtorch.examples.train YOUR_EXPORT_DIR --gpu-id '0' --training-dataset 'retrieval-SfM-120k'
--loss 'triplet' --loss-margin 0.5 --optimizer 'adam' --lr 1e-6
--arch 'resnet50' --pool 'gem' --whitening
--neg-num 5 --query-size=2000 --pool-size=20000
--batch-size 5 --image-size 1024 --epochs 100
--test-datasets 'roxford5k,rparis6k' --test-freq 5
oder
python3 -m cirtorch.examples.train YOUR_EXPORT_DIR --gpu-id '0' --training-dataset 'retrieval-SfM-120k'
--loss 'triplet' --loss-margin 0.5 --optimizer 'adam' --lr 5e-7
--arch 'resnet101' --pool 'gem' --whitening
--neg-num 4 --query-size=2000 --pool-size=20000
--batch-size 5 --image-size 1024 --epochs 100
--test-datasets 'roxford5k,rparis6k' --test-freq 5
oder
python3 -m cirtorch.examples.train YOUR_EXPORT_DIR --gpu-id '0' --training-dataset 'retrieval-SfM-120k'
--loss 'triplet' --loss-margin 0.5 --optimizer 'adam' --lr 5e-7
--arch 'resnet152' --pool 'gem' --whitening
--neg-num 3 --query-size=2000 --pool-size=20000
--batch-size 5 --image-size 900 --epochs 100
--test-datasets 'roxford5k,rparis6k' --test-freq 5
Für ResNet50 , ResNet101 oder ResNet152 .
Implementierungsdetails:
--neg-num und --image-size -Hyperparameter ausgewählt werden, so dass das Training an einer einzelnen GPU mit 16 GB Speicher durchgeführt werden kann. Vorbereitete Netzwerke mit Projektionsschicht werden bereitgestellt, die sowohl auf retrieval-SfM-120k (rSfM120k) als auch auf google-landmarks-2018 (gl18) -Grainaten ausgebildet sind. Für diese Architektur besteht keine Notwendigkeit, das Whitening als Nachbearbeitungsschritt zu berechnen (normalerweise ist der Leistungsschub unbedeutend), obwohl man dies auch kann. Beispielsweise wird eine multitiale Bewertung von ResNet101 mit GEM mit der auf google-landmarks-2018 (gl18) -Datenset ausgebildeten Projektionsschicht unter Verwendung hochauflösender Bilder und einem Triplett-Verlust mit dem folgenden Skript durchgeführt:
python3 -m cirtorch.examples.test_e2e --gpu-id '0' --network 'gl18-tl-resnet101-gem-w'
--datasets 'roxford5k,rparis6k' --multiscale '[1, 2**(1/2), 1/2**(1/2)]'
In der folgenden Tabelle finden Sie die multitiale Leistung aller verfügbaren vorgeschriebenen Netzwerke:
| Modell | Roxf (m) | RPAR (m) | Roxf (h) | RPAR (H) |
|---|---|---|---|---|
| RSFM120K-TL-RESNET50-GEM-W. | 64.7 | 76,3 | 39.0 | 54.9 |
| RSFM120K-TL-RESNET101-GEM-W. | 67,8 | 77,6 | 41.7 | 56,3 |
| RSFM120K-TL-RESNET152-GEM-W. | 68,8 | 78.0 | 41.3 | 57,2 |
| GL18-TL-RESNET50-GEM-W. | 63.6 | 78.0 | 40.9 | 57,5 |
| GL18-TL-RESNET101-GEM-W. | 67,3 | 80.6 | 44.3 | 61,5 |
| GL18-TL-RESNET152-GEM-W. | 68,7 | 79,7 | 44,2 | 60.3 |
Hinweis (Juni 2022): Wir haben die Download -Dateien für Oxford 5K- und Paris 6K -Bilder aktualisiert, um Bilder mit verschwommenen Gesichtern zu verwenden, wie von den ursprünglichen Datensatzbesitzern vorgeschlagen. Bedenken Sie: "Experimente haben gezeigt, dass man die Gesichtsversion zum Benchmarking-Bild-Abrufen mit vernachlässigbarem Genauigkeitsverlust verwenden kann."
@article{RTC18,
title = {Fine-tuning {CNN} Image Retrieval with No Human Annotation},
author = {Radenovi{'c}, F. and Tolias, G. and Chum, O.}
journal = {TPAMI},
year = {2018}
}
@inproceedings{RTC16,
title = {{CNN} Image Retrieval Learns from {BoW}: Unsupervised Fine-Tuning with Hard Examples},
author = {Radenovi{'c}, F. and Tolias, G. and Chum, O.},
booktitle = {ECCV},
year = {2016}
}
@inproceedings{RITAC18,
author = {Radenovi{'c}, F. and Iscen, A. and Tolias, G. and Avrithis, Y. and Chum, O.},
title = {Revisiting Oxford and Paris: Large-Scale Image Retrieval Benchmarking},
booktitle = {CVPR},
year = {2018}
}
roxford5k und rparis6k für neue vorgebildete Netzwerke mit Projektion hinzugefügt, die sowohl auf retrieval-SfM-120 als auch google-landmarks-2018 Zugdatensätze trainiert wurden