اكتشاف كائن مرحلة واحد سريع ودقيق مع تحسين GPU من طرف إلى طرف.
ODTK هو كاشف كائن واحد لقطة مع مختلف العمود الفقري ورؤوس الكشف. هذا يسمح بمقايضات الأداء/الدقة.
تم تحسينه لمعالجة GPU من طرف إلى طرف باستخدام:
يدعم هذا الريبو الآن اكتشاف مربع التدوير. راجع تدريب عمليات اكتشاف الدوران والاكتشاف المستندات المستندات لمزيد من المعلومات حول كيفية استخدام الأمر --rotated-bbox .
يوصف التعليقات التوضيحية المربعة من قبل [x, y, w, h, theta] .
يسمح خط أنابيب الكشف للمستخدم بتحديد العمود الفقري المحدد اعتمادًا على مفاضلة الكمون والكتابة المفضلة.
دقة طراز ODTK Retinanet واستدلال زمن و fps (إطارات في الثواني) لـ Coco 2017 (Train/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 مللي ثانية. 71 إطارًا في الثانية | 18 مللي ثانية. 56 إطارًا في الثانية | 9 مللي ثانية. 110 إطارًا في الثانية | 7 مللي ثانية. 141 إطارًا في الثانية |
| mobilenetv2fpn | 0.333 | 14 مللي ثانية. 74 إطارًا في الثانية | 18 مللي ثانية. 56 إطارًا في الثانية | 9 مللي ثانية. 114 إطارًا في الثانية | 7 مللي ثانية. 138 إطارًا في الثانية | |
| resnet34fpn | 0.343 | 6 ساعات | 16 مللي ثانية. 64 إطارًا في الثانية | 20 مللي ثانية. 50 إطارًا في الثانية | 10 مللي ثانية. 103 إطارًا في الثانية | 7 مللي ثانية. 142 إطارًا في الثانية |
| resnet50fpn | 0.358 | 7 ساعات | 18 مللي ثانية. 56 إطارًا في الثانية | 22 مللي ثانية. 45 إطارًا في الثانية | 11 مللي ثانية. 93 إطارًا في الثانية | 8 مللي ثانية. 129 إطارًا في الثانية |
| resnet101fpn | 0.376 | 10 ساعات | 22 مللي ثانية. 46 إطارًا في الثانية | 27 مللي ثانية. 37 إطارًا في الثانية | 13 مللي ثانية. 78 إطارًا في الثانية | 9 مللي ثانية. 117 إطارًا في الثانية |
| resnet152fpn | 0.393 | 12 ساعة | 26 مللي ثانية. 38 إطارًا في الثانية | 33 MS ؛ 31 إطارًا في الثانية | 15 مللي ثانية. 66 إطارًا في الثانية | 10 مللي ثانية. 103 إطارًا في الثانية |
للحصول على أفضل أداء ، استخدم أحدث حاوية 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 من العمود الفقري الذي تم تدريبه مسبقًا:
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 مع تعليقات 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لاستنتاج أسرع ، قم بتصدير نموذج الكشف إلى محرك Tensorrt محسّن FP16:
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 int8 محسّن:
odtk export model.pth engine.plan --int8 --calibration-images /coco/images/val2017/سيؤدي ذلك إلى إنشاء ملف int8calibrationTable يمكن استخدامه لإنشاء محركات int8 tensorrt لنفس النموذج لاحقًا دون الحاجة إلى إجراء المعايرة.
أو قم بإنشاء محرك int8 int8 محسّن باستخدام جدول معايرة مخزنة مؤقتًا:
odtk export model.pth engine.plan --int8 --calibration-table /path/to/INT8CalibrationTableيدعم Retinanet التعليقات التوضيحية في شكل 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 على GPUs Tesla (على سبيل المثال V100 ، T4) ، فيجب عليك استخدام هذا الفرع.
إذا كنت ترغب في نشر النموذج الخاص بك على جهاز Jetson (على سبيل المثال - Jetson Agx Xavier) تشغيل Jetpack الإصدار 4.3 ، فيجب عليك استخدام فرع 19.10 من هذا الريبو.