การตรวจจับวัตถุขั้นตอนเดียว ที่รวดเร็ว และ แม่นยำ ด้วยการเพิ่มประสิทธิภาพ GPU แบบครบวงจร
ODTK เป็นเครื่องตรวจจับวัตถุนัดเดียวที่มีกระดูกสันหลังและหัวตรวจจับต่างๆ สิ่งนี้ช่วยให้การแลกเปลี่ยนประสิทธิภาพ/ความแม่นยำ
มันได้รับการปรับให้เหมาะสมสำหรับการประมวลผล GPU แบบ end-to-end โดยใช้:
ตอนนี้ repo นี้รองรับการตรวจจับกล่องที่หมุนรอบ ดูการฝึกอบรมการตรวจจับแบบหมุนและเอกสารการตรวจจับการหมุนแบบหมุนสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้คำสั่ง --rotated-bbox
คำอธิบายประกอบกล่องขอบเขตอธิบายโดย [x, y, w, h, theta]
ไปป์ไลน์การตรวจจับช่วยให้ผู้ใช้สามารถเลือกกระดูกสันหลังที่เฉพาะเจาะจงขึ้นอยู่กับที่ต้องการการแลกเปลี่ยนความแม่นยำและความแม่นยำที่ต้องการ
ODTK RETINANET แบบจำลองความแม่นยำและความล่าช้าในการอนุมาน & FPS (เฟรมต่อวินาที) สำหรับ COCO 2017 (รถไฟ/VAL) หลังจากกำหนดการฝึกอบรมเต็มรูปแบบ ผลการอนุมานรวมถึงกล่องขอบเขตหลังการประมวลผลสำหรับขนาดแบทช์ 1 การอนุมานที่วัดได้ที่ --resize 800 โดยใช้ --with-dali บนเครื่องยนต์ FP16 tensorrt
| กระดูกสันหลัง | แผนที่ @[iou = 0.50: 0.95] | เวลาฝึกอบรมเกี่ยวกับ DGX1V | การอนุมานเวลาแฝง FP16 บน v100 | การอนุมานเวลาแฝง int8 บน T4 | การอนุมานเวลาแฝง FP16 บน A100 | การอนุมานเวลาแฝง int8 บน A100 |
|---|---|---|---|---|---|---|
| resnet18fpn | 0.318 | 5 ชั่วโมง | 14 ms; 71 fps | 18 ms; 56 fps | 9 ms; 110 fps | 7 ms; 141 fps |
| mobilenetv2fpn | 0.333 | 14 ms; 74 fps | 18 ms; 56 fps | 9 ms; 114 fps | 7 ms; 138 fps | |
| resnet34fpn | 0.343 | 6 ชั่วโมง | 16 ms; 64 fps | 20 มิลลิวินาที; 50 fps | 10 ms; 103 fps | 7 ms; 142 fps |
| resnet50fpn | 0.358 | 7 ชั่วโมง | 18 ms; 56 fps | 22 มิลลิวินาที; 45 fps | 11 ms; 93 fps | 8 ms; 129 fps |
| resnet101fpn | 0.376 | 10 ชั่วโมง | 22 มิลลิวินาที; 46 fps | 27 มิลลิวินาที; 37 fps | 13 ms; 78 fps | 9 ms; 117 fps |
| resnet152fpn | 0.393 | 12 ชั่วโมง | 26 ms; 38 fps | 33 ms; 31 fps | 15 มิลลิวินาที; 66 fps | 10 ms; 103 fps |
เพื่อประสิทธิภาพที่ดีที่สุดให้ใช้คอนเทนเนอร์ Pytorch NGC Docker ล่าสุด โคลนที่เก็บนี้สร้างและเรียกใช้ภาพของคุณเอง:
git clone https://github.com/nvidia/retinanet-examples
docker build -t odtk:latest retinanet-examples/
docker run --gpus all --rm --ipc=host -it odtk:latest การฝึกอบรมการอนุมานการประเมินผลและการส่งออกแบบจำลองสามารถทำได้ผ่านยูทิลิตี้ odtk สำหรับรายละเอียดเพิ่มเติมรวมถึงรายการพารามิเตอร์โปรดดูเอกสารการฝึกอบรมและการอนุมาน
ฝึกอบรมรูปแบบการตรวจจับใน COCO 2017 จาก Backbone ที่ผ่านการฝึกอบรมมาก่อน:
odtk train retinanet_rn50fpn.pth --backbone ResNet50FPN
--images /coco/images/train2017/ --annotations /coco/annotations/instances_train2017.json
--val-images /coco/images/val2017/ --val-annotations /coco/annotations/instances_val2017.jsonปรับแต่งโมเดลที่ผ่านการฝึกอบรมมาก่อนในชุดข้อมูลของคุณ ในตัวอย่างด้านล่างเราใช้ Pascal VOC กับ Annotations JSON:
odtk train model_mydataset.pth --backbone ResNet50FPN
--fine-tune retinanet_rn50fpn.pth
--classes 20 --iters 10000 --val-iters 1000 --lr 0.0005
--resize 512 --jitter 480 640 --images /voc/JPEGImages/
--annotations /voc/pascal_train2012.json --val-annotations /voc/pascal_val2012.json หมายเหตุ: ด้านที่สั้นกว่าของภาพอินพุตจะถูกปรับขนาดเพื่อ resize ตราบใดที่ด้านที่ยาวกว่าไม่ใหญ่กว่า max-size ในระหว่างการฝึกอบรมภาพจะถูกปรับขนาดแบบสุ่มเป็นขนาดใหม่ภายในช่วง jitter
ประเมินรูปแบบการตรวจจับของคุณใน COCO 2017:
odtk infer retinanet_rn50fpn.pth --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonเรียกใช้การอนุมานในชุดข้อมูลของคุณ:
odtk infer retinanet_rn50fpn.pth --images /dataset/val --output detections.jsonสำหรับการอนุมานที่เร็วขึ้นให้ส่งออกโมเดลการตรวจจับไปยังเครื่องยนต์ FP16 Tensorrt ที่ดีที่สุด:
odtk export model.pth engine.planประเมินแบบจำลองด้วยแบ็กเอนด์ Tensorrt บน Coco 2017:
odtk infer engine.plan --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonสำหรับการอนุมานที่เร็วยิ่งขึ้นให้ทำการสอบเทียบ INT8 เพื่อสร้างเครื่องยนต์ int8 tensorrt ที่ดีที่สุด:
odtk export model.pth engine.plan --int8 --calibration-images /coco/images/val2017/สิ่งนี้จะสร้างไฟล์ Int8CalibrationTable ที่สามารถใช้ในการสร้างเครื่องยนต์ Int8 Tensorrt สำหรับรุ่นเดียวกันในภายหลังโดยไม่จำเป็นต้องทำการสอบเทียบ
หรือสร้างเครื่องยนต์ Int8 Tensorrt ที่ได้รับการปรับปรุงโดยใช้ตารางการสอบเทียบแคช:
odtk export model.pth engine.plan --int8 --calibration-table /path/to/INT8CalibrationTableRetinanet รองรับคำอธิบายประกอบในรูปแบบ Coco JSON เมื่อแปลงคำอธิบายประกอบจากชุดข้อมูลของคุณเองเป็น JSON จำเป็นต้องมีรายการต่อไปนี้:
{
"images": [{
"id" : int,
"file_name" : str
}],
"annotations": [{
"id" : int,
"image_id" : int,
"category_id" : int,
"bbox" : [x, y, w, h] # all floats
"area": float # w * h. Required for validation scores
"iscrowd": 0 # Required for validation scores
}],
"categories": [{
"id" : int
]}
}
หากใช้ธง --rotated-bbox สำหรับการตรวจจับแบบหมุนให้เพิ่ม theta ลอยเพิ่มเติมลงในคำอธิบายประกอบ ในการรับคะแนนการตรวจสอบความถูกต้องคุณต้องเติมส่วน segmentation
"bbox" : [x, y, w, h, theta] # all floats, where theta is measured in radians anti-clockwise from the x-axis.
"segmentation" : [[x1, y1, x2, y2, x3, y3, x4, y4]]
# Required for validation scores.
นี่คือโครงการวิจัยไม่ใช่ผลิตภัณฑ์ Nvidia อย่างเป็นทางการ
สาขานี้ใช้ tensorrt 7 ถ้าคุณกำลังฝึกอบรมและอนุมานโมเดลโดยใช้ pytorch หรือกำลังสร้างเครื่องยนต์ tensorrt บน Tesla GPU (เช่น V100, T4) คุณควรใช้สาขานี้
หากคุณต้องการปรับใช้โมเดลของคุณไปยังอุปกรณ์ Jetson (เช่น - Jetson Agx Xavier) ที่ใช้งาน Jetpack เวอร์ชัน 4.3 คุณควรใช้สาขา 19.10 ของ repo นี้