Deteksi objek satu tahap tunggal yang cepat dan akurat dengan optimasi GPU ujung ke ujung.
ODTK adalah detektor objek tembakan tunggal dengan berbagai tulang punggung dan kepala deteksi. Ini memungkinkan pertukaran kinerja/akurasi.
Ini dioptimalkan untuk pemrosesan GPU ujung ke ujung menggunakan:
Repo ini sekarang mendukung deteksi kotak pembatas yang diputar. Lihat Pelatihan Deteksi Rotasi dan Deteksi Deteksi Rotasi Dokumen Inferensi untuk informasi lebih lanjut tentang cara menggunakan perintah --rotated-bbox .
Anotasi kotak pembatas dijelaskan oleh [x, y, w, h, theta] .
Pipa deteksi memungkinkan pengguna untuk memilih tulang punggung tertentu tergantung pada trade-off akurasi latensi yang disukai.
Akurasi model retinanet ODTK dan latensi inferensi & FPS (frame per detik) untuk Coco 2017 (Train/Val) setelah jadwal pelatihan penuh. Hasil inferensi termasuk kotak pembatas pasca pemrosesan untuk ukuran batch 1. Inferensi yang diukur pada --resize 800 menggunakan --with-dali pada mesin Tensorrt FP16.
| Tulang punggung | peta @[IOU = 0,50: 0,95] | Waktu pelatihan di DGX1V | Latensi inferensi FP16 di V100 | Inferensi latensi int8 pada t4 | Latensi inferensi FP16 di A100 | Inferensi Latensi Int8 pada A100 |
|---|---|---|---|---|---|---|
| Resnet18fpn | 0.318 | 5 jam | 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 jam | 16 ms; 64 fps | 20 ms; 50 fps | 10 ms; 103 fps | 7 ms; 142 fps |
| Resnet50fpn | 0.358 | 7 jam | 18 ms; 56 fps | 22 ms; 45 fps | 11 ms; 93 fps | 8 ms; 129 fps |
| Resnet101fpn | 0.376 | 10 jam | 22 ms; 46 fps | 27 ms; 37 fps | 13 ms; 78 fps | 9 ms; 117 fps |
| Resnet152fpn | 0.393 | 12 jam | 26 ms; 38 fps | 33 ms; 31 fps | 15 ms; 66 fps | 10 ms; 103 fps |
Untuk kinerja terbaik, gunakan wadah Pytorch NGC Docker terbaru. Kloning repositori ini, bangun dan jalankan gambar Anda sendiri:
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 Pelatihan, inferensi, evaluasi dan ekspor model dapat dilakukan melalui utilitas odtk . Untuk detail lebih lanjut, termasuk daftar parameter, silakan lihat dokumentasi pelatihan dan inferensi.
Latih model deteksi pada Coco 2017 dari tulang punggung pra-terlatih:
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.jsonFine-tune model pra-terlatih pada dataset Anda. Dalam contoh di bawah ini kami menggunakan VOC Pascal dengan anotasi 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 Catatan: Sisi yang lebih pendek dari gambar input akan diubah ukurannya untuk resize selama sisi yang lebih panjang tidak menjadi lebih besar dari max-size . Selama pelatihan, gambar akan secara acak diubah ukuran secara acak ke ukuran baru dalam kisaran jitter .
Evaluasi Model Deteksi Anda di Coco 2017:
odtk infer retinanet_rn50fpn.pth --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonJalankan inferensi pada dataset Anda:
odtk infer retinanet_rn50fpn.pth --images /dataset/val --output detections.jsonUntuk inferensi yang lebih cepat, ekspor model deteksi ke mesin Tensorrt FP16 yang dioptimalkan:
odtk export model.pth engine.planEvaluasi model dengan backend Tensorrt pada Coco 2017:
odtk infer engine.plan --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonUntuk inferensi yang lebih cepat, lakukan kalibrasi int8 untuk membuat mesin Tensorrt Int8 yang dioptimalkan:
odtk export model.pth engine.plan --int8 --calibration-images /coco/images/val2017/Ini akan membuat file Int8CalibrationTable yang dapat digunakan untuk membuat mesin TensorRt Int8 untuk model yang sama di kemudian hari tanpa perlu melakukan kalibrasi.
Atau buat mesin Tensorrt Int8 yang dioptimalkan menggunakan tabel kalibrasi yang di -cache:
odtk export model.pth engine.plan --int8 --calibration-table /path/to/INT8CalibrationTableRetinanet mendukung anotasi dalam format Coco JSON. Saat mengubah anotasi dari dataset Anda sendiri menjadi JSON, entri berikut diperlukan:
{
"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
]}
}
Jika menggunakan flag --rotated-bbox untuk deteksi yang diputar, tambahkan theta float tambahan ke anotasi. Untuk mendapatkan skor validasi, Anda juga perlu mengisi bagian 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.
Ini adalah proyek penelitian, bukan produk NVIDIA resmi.
Cabang ini menggunakan Tensorrt 7. Jika Anda melatih dan menyimpulkan model menggunakan Pytorch, atau membuat mesin Tensorrt di Tesla GPU (misalnya V100, T4), maka Anda harus menggunakan cabang ini.
Jika Anda ingin menggunakan model Anda ke perangkat Jetson (misalnya - Jetson Agx Xavier) menjalankan Jetpack versi 4.3, maka Anda harus menggunakan cabang 19.10 dari repo ini.