นี่คือกล่องเครื่องมือ Python ที่ใช้การฝึกอบรมและการทดสอบวิธีการที่อธิบายไว้ในเอกสารของเรา:
การดึงภาพซีเอ็นเอ็นอย่างละเอียดโดยไม่มีคำอธิบายประกอบของมนุษย์
Radenović F. , Tolias G. , Chum O. , Tpami 2018 [arxiv]
การดึงภาพ CNN เรียนรู้จาก Bow: การปรับจูนที่ไม่ได้รับการดูแลด้วยตัวอย่างที่ยาก
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 เรียกใช้คำสั่งต่อไปนี้ หลังจากแต่ละยุคแล้วเครือข่ายที่ปรับจูนจะได้รับการทดสอบในเกณฑ์มาตรฐาน Oxford และ Paris ที่มาเยือน:
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 Images เพื่อใช้รูปภาพที่มีใบหน้าเบลอตามที่เจ้าของชุดข้อมูลต้นฉบับแนะนำ โปรดจำไว้ว่า "การทดลองแสดงให้เห็นว่าเราสามารถใช้เวอร์ชันที่เบลอหน้าสำหรับการเปรียบเทียบการเปรียบเทียบภาพที่มีการสูญเสียความแม่นยำเล็กน้อย"
เพื่อประเมินเครือข่ายที่ผ่านการฝึกอบรมของคุณโดยใช้สเกลเดี่ยวและไม่มีการทำฟอกสีฟัน:
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 ถูกเลือกเพื่อให้การฝึกอบรมสามารถทำได้ใน GPU เดียวที่มีหน่วยความจำ 16 GB มีการจัดเตรียมเครือข่ายที่ผ่านการฝึกอบรมด้วยเลเยอร์ฉายภาพทั้งที่ได้รับการฝึกฝนทั้งใน retrieval-SfM-120k (rSfM120k) และชุดข้อมูลรถไฟ google-landmarks-2018 (gl18) สำหรับสถาปัตยกรรมนี้ไม่จำเป็นต้องคำนวณการฟอกสีขาวเป็นขั้นตอนหลังการประมวลผล (โดยทั่วไปแล้วการเพิ่มประสิทธิภาพนั้นไม่สำคัญ) แม้ว่าจะสามารถทำได้เช่นกัน ตัวอย่างเช่นการประเมินผลหลายระดับของ RESNET101 ด้วยอัญมณีที่มีเลเยอร์การฉายภาพที่ได้รับการฝึกฝนบนชุดข้อมูล 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 Images เพื่อใช้รูปภาพที่มีใบหน้าเบลอตามที่เจ้าของชุดข้อมูลต้นฉบับแนะนำ โปรดจำไว้ว่า "การทดลองแสดงให้เห็นว่าเราสามารถใช้เวอร์ชันที่เบลอหน้าสำหรับการเปรียบเทียบการเปรียบเทียบภาพที่มีการสูญเสียความแม่นยำเล็กน้อย"
@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