Это набор инструментов Python, который реализует обучение и тестирование подхода, описанного в наших документах:
Поиск изображения с тонкой настройкой CNN без человеческой аннотации ,
Radenović F., Tolias G., Chum O., Tpami 2018 [arxiv]
CNN изображение поиск учится от лука: неконтролируемая тонкая настройка с жесткими примерами ,
Radenović F., Tolias G., Chum O., ECCV 2016 [arxiv]
Этот код реализует:
Чтобы запустить этот набор инструментов, вам понадобится:
Перейдите ( cd ) к корню инструментарии [YOUR_CIRTORCH_ROOT] . Вы можете установить пакет с pip3 install . Если вам нужно. Обязательно установили желаемые пакеты Pytorch и Torchvision.
Пример обучающего скрипта расположен в 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
Для получения подробного объяснения запуска опций:
python3 -m cirtorch.examples.train -h
Примечание . Данные и сети, используемые для обучения и тестирования, автоматически загружаются при использовании примера сценария.
Пример скрипта тестирования расположен в 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]
Для получения подробного объяснения запуска опций:
python3 -m cirtorch.examples.test -h
Примечание . Данные, используемые для тестирования, автоматически загружаются при использовании примера сценария.
Например, для обучения нашей лучшей сети, описанной в бумаге TPAMI 2018, запустите следующую команду. После каждой эпохи точная сеть будет протестирована на проверенных тестах Оксфорда и Парижа:
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
Сети могут быть оценены с помощью обученного отбеливания после каждой эпохи (отбеливание оценивается в конце эпохи). Чтобы достичь этого, запустите следующую команду. Обратите внимание, что это значительно замедлит всю процедуру обучения, и вы можете оценить сети с помощью обученного отбеливания в дальнейшем с использованием примера тестового скрипта.
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
ПРИМЕЧАНИЕ . Скорректированная (более низкая) скорость обучения установлена для достижения аналогичной производительности, что и при реализации обучения Matconvnet и Pytorch-0.3.0.
Предварительные сети, обученные с использованием тех же параметров, что и в нашей статье TPAMI 2018, с предварительно вычисленным шагом отбеливания после обработки. Чтобы оценить их запустить:
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]'
или
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]'
В таблице ниже показано сравнение производительности сетей, обученных этой структурой, и сетей, используемых в статье, которые были обучены нашим поискам изображения CNN в MatConvnet:
| Модель | Оксфорд | Париж | 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 |
Примечание (июнь 2022 г.): мы обновили файлы загрузки для изображений Oxford 5K и Paris 6K, чтобы использовать изображения с размытыми лицами, как предложено оригинальными владельцами наборов данных. Имейте в виду: «Эксперименты показали, что можно использовать разлученную лицевую версию для получения анализа изображения с незначительной потерей точности».
Чтобы оценить обученную сеть с использованием одного масштаба и без отбеливания обучения:
python3 -m cirtorch.examples.test --gpu-id '0' --network-path YOUR_NETWORK_PATH
--datasets 'oxford5k,paris6k,roxford5k,rparis6k'
Для оценки обученной сети с использованием многомасштабной оценки и с учетом отбеливания в качестве постобработки:
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]'
Например, готовые сети также могут быть оценены, например:
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]'
Альтернативная архитектура включает в себя обучаемый слой FC (проекция) после глобального объединения. Важно инициализировать параметры этого слоя с результатом изученного отбеливания. Чтобы обучить такую настройку, вы должны выполнить следующие команды (производительность будет оцениваться каждые 5 эпох на roxford5k и rparis6k ):
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
или
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
или
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
для ResNet50 , ResNet101 или ResNet152 соответственно.
Детали реализации:
--image-size --neg-num так что обучение может быть выполнено на одном графическом процессоре с 16 GB памяти. Предоставлены сети с проекционным слоем, обученные как retrieval-SfM-120k (rSfM120k) , так и наборе данных google-landmarks-2018 (gl18) . Для этой архитектуры нет необходимости вычислить отбеливание как шаг после обработки (обычно повышение производительности незначительно), хотя можно это сделать. Например, многомасштабная оценка RESNET101 с GEM с проекционным уровнем, обученным набору данных google-landmarks-2018 (gl18) с использованием изображений с высоким разрешением и потери триплета, выполняется со следующим сценарием:
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)]'
Многомасштабная производительность всех доступных предварительно обученных сетей приведена в следующей таблице:
| Модель | 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 |
Примечание (июнь 2022 г.): мы обновили файлы загрузки для изображений Oxford 5K и Paris 6K, чтобы использовать изображения с размытыми лицами, как предложено оригинальными владельцами наборов данных. Имейте в виду: «Эксперименты показали, что можно использовать разлученную лицевую версию для получения анализа изображения с незначительной потерей точности».
@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 и rparis6k для новых предварительно обученных сетей с проекцией, обученными наборами данных как на retrieval-SfM-120 так и google-landmarks-2018