هذا هو صندوق أدوات 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
يمكن تقييم الشبكات مع التبييض المستفاد بعد كل فترة (يتم تقدير التبييض في نهاية الحقبة). لتحقيق هذا تشغيل الأمر التالي. لاحظ أن هذا سيؤدي إلى إبطاء إجراء التدريب بأكمله بشكل كبير ، ويمكنك تقييم الشبكات مع التبييض المستفاد لاحقًا على استخدام برنامج Test Test.
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 للتدريب.
يتم توفير شبكات PretRained التي تم تدريبها باستخدام نفس المعلمات كما هو الحال في ورقة 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:
| نموذج | أكسفورد | باريس | روكف (م) | RPAR (M) | روكف (ح) | 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 ، على التوالي.
تفاصيل التنفيذ:
--neg-num و --image-size بحيث يمكن تنفيذ التدريب على وحدة معالجة رسمية واحدة بذاكرة 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)]'
ويرد الأداء متعدد النطاق لجميع الشبكات المتاحة مسبقًا في الجدول التالي:
| نموذج | روكف (م) | RPAR (M) | روكف (ح) | 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