โครงการนี้โฮสต์รหัสสำหรับการใช้อัลกอริทึม FCOS สำหรับการตรวจจับวัตถุตามที่นำเสนอในบทความของเรา:
FCOS: Fully Convolutional One-Stage Object Detection;
Zhi Tian, Chunhua Shen, Hao Chen, and Tong He;
In: Proc. Int. Conf. Computer Vision (ICCV), 2019.
arXiv preprint arXiv:1904.01355
กระดาษเต็มมีอยู่ที่: https://arxiv.org/abs/1904.01355
การดำเนินการตาม Detectron2 นั้นรวมอยู่ใน Adelaidet
รุ่นเรียลไทม์ที่มี 46FPS และ 40.3 ใน AP บน Coco Minival ยังมีอยู่ที่นี่
เราใช้ 8 Nvidia V100 GPU
แต่ 4 1080Ti GPUs ยังสามารถฝึก FCO ที่ใช้ ResNet-50-FPN ได้อย่างสมบูรณ์เนื่องจาก FCOs มีประสิทธิภาพในการหน่วยความจำ
สำหรับผู้ใช้ที่ต้องการใช้ FCOs เป็นเครื่องตรวจจับวัตถุในโครงการของพวกเขาเท่านั้นพวกเขาสามารถติดตั้งโดย PIP ในการทำเช่นนั้นวิ่ง:
pip install torch # install pytorch if you do not have it
pip install git+https://github.com/tianzhi0549/FCOS.git
# run this command line for a demo
fcos https://github.com/tianzhi0549/FCOS/raw/master/demo/images/COCO_val2014_000000000885.jpg
โปรดตรวจสอบที่นี่สำหรับการใช้งานอินเทอร์เฟซ
การใช้งาน FCOS นี้ขึ้นอยู่กับเบนช์มาร์ก MaskRcnn ดังนั้นการติดตั้งจึงเหมือนกับมาตรฐาน maskrcnn ดั้งเดิม
โปรดตรวจสอบการติดตั้ง MD สำหรับคำแนะนำในการติดตั้ง คุณอาจต้องการดู readme.md ดั้งเดิมของ maskrcnn-benchmark
เมื่อการติดตั้งเสร็จสิ้นคุณสามารถทำตามขั้นตอนด้านล่างเพื่อเรียกใช้การสาธิตอย่างรวดเร็ว
# assume that you are under the root directory of this project,
# and you have activated your virtual environment if needed.
wget https://huggingface.co/tianzhi/FCOS/resolve/main/FCOS_imprv_R_50_FPN_1x.pth?download=true -O FCOS_imprv_R_50_FPN_1x.pth
python demo/fcos_demo.py
บรรทัดคำสั่งการอนุมานบน Coco Minival Split:
python tools/test_net.py
--config-file configs/fcos/fcos_imprv_R_50_FPN_1x.yaml
MODEL.WEIGHT FCOS_imprv_R_50_FPN_1x.pth
TEST.IMS_PER_BATCH 4
โปรดทราบว่า:
FCOS_imprv_R_50_FPN_1x.pth ด้วยของคุณเองTEST.IMS_PER_BATCH เป็น 1--config-file เป็นไฟล์ config (ใน configs/fcos) และ MODEL.WEIGHT ไปยังไฟล์น้ำหนักเพื่อความสะดวกของคุณเรามีรุ่นที่ผ่านการฝึกอบรมดังต่อไปนี้ (รุ่นอื่น ๆ กำลังจะมาเร็ว ๆ นี้)
resne (x) ts:
โมเดลที่ใช้ Resne (X) T ทั้งหมดได้รับการฝึกฝนด้วยภาพ 16 ภาพในการทำให้เป็นมาตรฐานชุดมินิแบทช์และแช่แข็ง (เช่นสอดคล้องกับโมเดลใน maskrcnn_benchmark)
| แบบอย่าง | การฝึกอบรมหลายระดับ | เวลาทดสอบ / IM | AP (minival) | การเชื่อมโยง |
|---|---|---|---|---|
| FCOS_IMPRV_R_50_FPN_1X | เลขที่ | 44ms | 38.7 | การดาวน์โหลด |
| fcos_imprv_dcnv2_r_50_fpn_1x | เลขที่ | 54ms | 42.3 | การดาวน์โหลด |
| FCOS_IMPRV_R_101_FPN_2X | ใช่ | 57ms | 43.0 | การดาวน์โหลด |
| FCOS_IMPRV_DCNV2_R_101_FPN_2X | ใช่ | 73ms | 45.6 | การดาวน์โหลด |
| fcos_imprv_x_101_32x8d_fpn_2x | ใช่ | 110ms | 44.0 | การดาวน์โหลด |
| fcos_imprv_dcnv2_x_101_32x8d_fpn_2x | ใช่ | 143ms | 46.4 | การดาวน์โหลด |
| fcos_imprv_x_101_64x4d_fpn_2x | ใช่ | 112ms | 44.7 | การดาวน์โหลด |
| fcos_imprv_dcnv2_x_101_64x4d_fpn_2x | ใช่ | 144ms | 46.6 | การดาวน์โหลด |
โปรดทราบว่า imprv หมายถึง improvements ในตารางกระดาษของเรา 3 การเปลี่ยนแปลงเกือบเสียค่าใช้จ่ายเหล่านี้ช่วยปรับปรุงประสิทธิภาพโดยรวม ~ 1.5% ดังนั้นเราขอแนะนำให้ใช้พวกเขา ต่อไปนี้เป็นรุ่นต้นฉบับที่นำเสนอในกระดาษเริ่มต้นของเรา
| แบบอย่าง | การฝึกอบรมหลายระดับ | เวลาทดสอบ / IM | AP (minival) | AP (test-dev) | การเชื่อมโยง |
|---|---|---|---|---|---|
| FCOS_R_50_FPN_1X | เลขที่ | 45ms | 37.1 | 37.4 | การดาวน์โหลด |
| FCOS_R_101_FPN_2X | ใช่ | 59ms | 41.4 | 41.5 | การดาวน์โหลด |
| FCOS_X_101_32X8D_FPN_2X | ใช่ | 110ms | 42.5 | 42.7 | การดาวน์โหลด |
| FCOS_X_101_64X4D_FPN_2X | ใช่ | 113ms | 43.0 | 43.2 | การดาวน์โหลด |
Mobilenets:
เราอัปเดตการทำให้เป็นมาตรฐานแบทช์สำหรับโมเดลที่ใช้ Mobilenet หากคุณต้องการใช้ SYNCBN โปรดติดตั้ง Pytorch 1.1 หรือใหม่กว่า
| แบบอย่าง | ขนาดชุดการฝึกอบรม | การฝึกอบรมหลายระดับ | เวลาทดสอบ / IM | AP (minival) | การเชื่อมโยง |
|---|---|---|---|---|---|
| FCOS_SYNCBN_BS32_C128_MNV2_FPN_1X | 32 | เลขที่ | 26ms | 30.9 | การดาวน์โหลด |
| fcos_syncbn_bs32_mnv2_fpn_1x | 32 | เลขที่ | 33ms | 33.1 | การดาวน์โหลด |
| FCOS_BN_BS16_MNV2_FPN_1X | 16 | เลขที่ | 44ms | 31.0 | การดาวน์โหลด |
[1] 1x และ 2x หมายถึงโมเดลได้รับการฝึกฝนสำหรับการทำซ้ำ 90k และ 180k ตามลำดับ
[2] ผลลัพธ์ทั้งหมดได้มาพร้อมกับรุ่นเดียวและไม่มีการเพิ่มข้อมูลเวลาทดสอบใด ๆ เช่นหลายระดับการพลิกและ ฯลฯ
[3] c128 หมายถึงโมเดลมีช่อง 128 (แทน 256) ช่องในหอคอย (เช่น, MODEL.RESNETS.BACKBONE_OUT_CHANNELS ในการกำหนดค่า)
[4] dcnv2 หมายถึงเครือข่าย convolutional ที่ผิดรูปได้ V2 โปรดทราบว่าสำหรับโมเดลที่ใช้ ResNet เราใช้ convolutions ที่สามารถเปลี่ยนแปลงได้จาก Stage C3 ถึง C5 ใน Backbones สำหรับโมเดลที่ใช้ Resnext มีเพียง Stage C4 และ C5 เท่านั้นที่ใช้ convolutions ที่เปลี่ยนรูปได้ ทุกรุ่นใช้ convolutions ที่เปลี่ยนรูปได้ในชั้นสุดท้ายของหอตรวจจับ
[5] รุ่น FCOS_imprv_dcnv2_X_101_64x4d_FPN_2x ด้วยการทดสอบหลายระดับได้รับ 49.0% ใน AP บน Coco Test-Dev โปรดใช้ TEST.BBOX_AUG.ENABLED True เพื่อเปิดใช้งานการทดสอบหลายระดับ
บรรทัดคำสั่งต่อไปนี้จะฝึกอบรม FCOS_IMPRV_R_50_FPN_1X บน 8 GPUs ด้วยการสืบเชื้อสายการไล่ระดับสีแบบสุ่มแบบซิงโครนัส (SGD):
python -m torch.distributed.launch
--nproc_per_node=8
--master_port=$((RANDOM + 10000))
tools/train_net.py
--config-file configs/fcos/fcos_imprv_R_50_FPN_1x.yaml
DATALOADER.NUM_WORKERS 2
OUTPUT_DIR training_dir/fcos_imprv_R_50_FPN_1x
โปรดทราบว่า:
--nproc_per_node เป็นจำนวน GPU ไม่จำเป็นต้องเปลี่ยนการตั้งค่าอื่น ๆ ขนาดแบทช์ทั้งหมดไม่ได้ขึ้นอยู่กับ nproc_per_node หากคุณต้องการเปลี่ยนขนาดแบทช์ทั้งหมดโปรดเปลี่ยน SOLVER.IMS_PER_BATCH ใน configs/FCOS/FCOS_R_50_FPN_1X.YAMLOUTPUT_DIR--config-filenum_pos ระหว่าง GPU เมื่อคำนวณการสูญเสีย โปรดดูไดเรกทอรี ONNX สำหรับตัวอย่างของการส่งออกโมเดลไปยัง ONNX สามารถดาวน์โหลดโมเดลที่แปลงได้ที่นี่ เราขอแนะนำให้คุณใช้ pytorch> = 1.4.0 (หรือทุกคืน) และ Torchvision> = 0.5.0 (หรือทุกคืน) สำหรับรุ่น ONNX
ยินดีต้อนรับคำขอหรือปัญหาใด ๆ
โปรดพิจารณาอ้างถึงบทความของเราในสิ่งพิมพ์ของคุณหากโครงการช่วยวิจัยของคุณ การอ้างอิง Bibtex มีดังนี้
@inproceedings{tian2019fcos,
title = {{FCOS}: Fully Convolutional One-Stage Object Detection},
author = {Tian, Zhi and Shen, Chunhua and Chen, Hao and He, Tong},
booktitle = {Proc. Int. Conf. Computer Vision (ICCV)},
year = {2019}
}
@article{tian2021fcos,
title = {{FCOS}: A Simple and Strong Anchor-free Object Detector},
author = {Tian, Zhi and Shen, Chunhua and Chen, Hao and He, Tong},
booktitle = {IEEE T. Pattern Analysis and Machine Intelligence (TPAMI)},
year = {2021}
}
เราขอขอบคุณ @yqyao สำหรับเทคนิคการสุ่มตัวอย่างกลางและ giou นอกจากนี้เรายังขอขอบคุณ @BearCatt สำหรับข้อเสนอแนะของเขาในการวางตำแหน่งสาขากลางด้วยการถดถอยกล่อง (ดู #89)
สำหรับการใช้งานทางวิชาการโครงการนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต BSD 2 ข้อ - ดูไฟล์ใบอนุญาตสำหรับรายละเอียด สำหรับการใช้งานเชิงพาณิชย์กรุณาติดต่อผู้เขียน