Ultralytics YOLOv8 على NVIDIA Jetson باستخدام DeepStream SDK و TensorRT
يقدم هذا الدليل الشامل شرحًا تفصيليًا لنشر Ultralytics YOLOv8 على أجهزة NVIDIA Jetson باستخدام DeepStream SDK و TensorRT. نستخدم هنا TensorRT لزيادة أداء الاستدلال على منصة Jetson.
ملاحظه
لقد تم اختبار هذا الدليل مع كل من Seeed Studio reComputer J4012 الذي يعتمد على NVIDIA Jetson Orin NX 16GB الذي يعمل بإصدار JetPack JP5.1.3 وSeeed Studio reComputer J1020 v2 الذي يعتمد على NVIDIA Jetson Nano 4GB الذي يعمل بإصدار JetPack JP4.6.4. من المتوقع أن يعمل عبر جميع تشكيلة أجهزة NVIDIA Jetson بما في ذلك الأحدث والأقدم.
ما هو إنفيديا ديب ستريم؟
إن مجموعة أدوات DeepStream SDK من NVIDIA عبارة عن مجموعة أدوات كاملة لتحليلات البث تعتمد على GStreamer لمعالجة متعددة المستشعرات قائمة على الذكاء الاصطناعي والفيديو والصوت وفهم الصور. إنها مثالية لمطوري الذكاء الاصطناعي للرؤية وشركاء البرامج والشركات الناشئة ومصنعي المعدات الأصلية الذين يقومون ببناء تطبيقات وخدمات تحليلات الفيديو الذكية (IVA). يمكنك الآن إنشاء خطوط أنابيب لمعالجة البث تتضمن شبكات عصبية ومهام معالجة معقدة أخرى مثل التتبع وتشفير/فك تشفير الفيديو وعرض الفيديو. تمكّن خطوط الأنابيب هذه من إجراء تحليلات في الوقت الفعلي على بيانات الفيديو والصور وبيانات المستشعرات. يمنحك دعم DeepStream متعدد المنصات طريقة أسرع وأسهل لتطوير تطبيقات وخدمات الذكاء الاصطناعي للرؤية في مكان العمل وعلى الحافة وفي السحابة.
المتطلبات المسبقه
قبل البدء في اتباع هذا الدليل:
- قم بزيارة وثائقنا، دليل البدء السريع: NVIDIA Jetson مع Ultralytics YOLOv8 لإعداد جهاز NVIDIA Jetson الخاص بك مع Ultralytics YOLOv8
-
قم بتثبيت DeepStream SDK وفقًا لإصدار JetPack
- بالنسبة ل JetPack 4.6.4، قم بتثبيت DeepStream 6.0.1
- بالنسبة إلى JetPack 5.1.3، قم بتثبيت DeepStream 6.3
بقشيش
استخدمنا في هذا الدليل طريقة حزمة دبيان لتثبيت DeepStream SDK على جهاز Jetson. يمكنك أيضًا زيارة DeepStream SDK على Jetson (مؤرشف) للوصول إلى الإصدارات القديمة من DeepStream.
تكوين DeepStream ل YOLOv8
نحن هنا نستخدم مستودع Marcoslucianops/DeepStream-Yolo GitHub الذي يتضمن دعم NVIDIA DeepStream SDK لنماذج YOLO . نحن نقدر جهود marcoslucianops على مساهماته!
-
تثبيت التبعيات
-
استنساخ المستودع التالي
-
قم بتنزيل Ultralytics YOLOv8 نموذج الكشف (.pt) من اختيارك من إصداراتYOLOv8 . نستخدم هنا yolov8s.pt.
ملاحظه
يمكنك أيضًا استخدام نموذج YOLOv8 مدرب مخصص.
-
تحويل النموذج إلى ONNX
مرر الوسيطات أدناه إلى الأمر أعلاه
بالنسبة إلى DeepStream 6.0.1 ، استخدم opset 12 أو أقل. المرجع الافتراضي هو 16.
لتغيير حجم الاستدلال (افتراضي: 640)
مثال ل 1280:
لتبسيط ONNX نموذج (ديب ستريم > = 6.0)
لاستخدام حجم الدفعة الديناميكي (DeepStream > = 6.1)
لاستخدام حجم الدفعة الثابت (مثال لحجم الدفعة = 4)
-
قم بتعيين إصدار CUDA وفقا لإصدار JetPack المثبت
لجت باك 4.6.4:
لجت باك 5.1.3:
-
تجميع المكتبة
-
قم بتحرير
config_infer_primary_yoloV8.txt
وفقا للطراز الخاص بك (ل YOLOv8s مع 80 فصلا) -
قم بتحرير
deepstream_app_config
ملف -
يمكنك أيضا تغيير مصدر الفيديو في
deepstream_app_config
ملف. هنا يتم تحميل ملف فيديو افتراضي
تشغيل الاستدلال
ملاحظه
سوف يستغرق الأمر وقتا طويلا لإنشاء ملف TensorRT ملف المحرك قبل بدء الاستدلال. لذا يرجى التحلي بالصبر.
بقشيش
إذا كنت ترغب في تحويل النموذج إلى دقة FP16 ، فما عليك سوى تعيين model-engine-file=model_b1_gpu0_fp16.engine
و network-mode=2
داخل config_infer_primary_yoloV8.txt
معايرة INT8
إذا كنت تريد استخدام دقة INT8 للاستدلال ، فأنت بحاجة إلى اتباع الخطوات أدناه
-
جبر
OPENCV
متغير البيئة -
تجميع المكتبة
-
بالنسبة لمجموعة بيانات COCO، قم بتنزيل فال2017واستخرج، وانتقل إلى
DeepStream-Yolo
مجلد -
إنشاء دليل جديد لصور المعايرة
-
قم بتشغيل ما يلي لتحديد 1000 صورة عشوائية من مجموعة بيانات COCO لتشغيل المعايرة
ملاحظه
توصي NVIDIA بما لا يقل عن 500 صورة للحصول على دقة جيدة. في هذا المثال، تم اختيار 1000 صورة للحصول على دقة أفضل (المزيد من الصور = دقة أكبر). يمكنك ضبطه من الرأس -1000. على سبيل المثال، لـ 2000 صورة، الرأس -2000. قد تستغرق هذه العملية وقتًا طويلاً.
-
إنشاء
calibration.txt
ملف مع جميع الصور المحددة -
تعيين متغيرات البيئة
ملاحظه
ستؤدي قيم INT8_CALIB_BATCH_SIZE الأعلى إلى مزيد من الدقة وسرعة معايرة أسرع. اضبطه وفقا لذاكرة GPU الخاصة بك.
-
قم بتحديث
config_infer_primary_yoloV8.txt
ملفمن
ل
تشغيل الاستدلال
إعداد متعدد الدفق
لإعداد تدفقات متعددة ضمن تطبيق تدفق عميق واحد، يمكنك إجراء التغييرات التالية على deepstream_app_config.txt
ملف
-
قم بتغيير الصفوف والأعمدة لإنشاء عرض شبكي وفقا لعدد التدفقات التي تريدها. على سبيل المثال ، بالنسبة إلى 4 تدفقات ، يمكننا إضافة صفين وعمودين.
-
جبر
num-sources=4
وأضفuri
من جميع تيارات 4
تشغيل الاستدلال
النتائج المعيارية
يلخص الجدول التالي كيفية YOLOv8s نماذج أداء في مختلف TensorRT مستويات الدقة مع حجم إدخال 640 × 640 على NVIDIA Jetson Orin NX 16GB.
اسم الموديل | دقة | وقت الاستدلال (م/م) | إطارا في الثانية |
---|---|---|---|
YOLOv8s | FP32 | 15.63 | 64 |
FP16 | 7.94 | 126 | |
INT8 | 5.53 | 181 |
الاعترافات
تم إنشاء هذا الدليل في البداية من قبل أصدقائنا في Seeed Studio و Lakshantha و Elaine.