Ultralytics YOLO11 على NVIDIA Jetson باستخدام DeepStream SDK و TensorRT
شاهد: كيفية استخدام نماذج Ultralytics YOLO11 مع NVIDIA Deepstream على Jetson Orin NX 🚀
يوفر هذا الدليل الشامل شرحًا تفصيليًا لنشر Ultralytics YOLO11 على أجهزة NVIDIA Jetson باستخدام DeepStream SDK و TensorRT. نستخدم هنا TensorRT لزيادة أداء الاستدلال إلى أقصى حد على منصة Jetson.
ملاحظة
تم اختبار هذا الدليل باستخدام NVIDIA Jetson Orin Nano Super Developer Kit الذي يعمل بأحدث إصدار مستقر من JetPack وهو JP6.1، و 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 بما في ذلك الأحدث والأقدم.
ما هو NVIDIA DeepStream؟
NVIDIA's DeepStream SDK عبارة عن مجموعة أدوات تحليل تدفق كاملة تعتمد على GStreamer لمعالجة متعددة المستشعرات قائمة على الذكاء الاصطناعي وفهم الفيديو والصوت والصورة. إنه مثالي لمطوري الذكاء الاصطناعي البصري وشركاء البرامج والشركات الناشئة ومصنعي المعدات الأصلية الذين يقومون ببناء تطبيقات وخدمات IVA (تحليل الفيديو الذكي). يمكنك الآن إنشاء خطوط أنابيب لمعالجة التدفق تتضمن شبكات عصبية ومهام معالجة معقدة أخرى مثل التتبع وتشفير/فك تشفير الفيديو وعرض الفيديو. تتيح خطوط الأنابيب هذه تحليلات في الوقت الفعلي على بيانات الفيديو والصورة والمستشعر. يمنحك دعم DeepStream متعدد الأنظمة الأساسية طريقة أسرع وأسهل لتطوير تطبيقات وخدمات الذكاء الاصطناعي البصري في أماكن العمل وعلى الحافة وفي السحابة.
المتطلبات الأساسية
قبل البدء في اتباع هذا الدليل:
- تفضل بزيارة وثائقنا، دليل البدء السريع: NVIDIA Jetson مع Ultralytics YOLO11 لإعداد جهاز NVIDIA Jetson الخاص بك باستخدام Ultralytics YOLO11
- تثبيت DeepStream SDK وفقًا لإصدار JetPack
- بالنسبة إلى JetPack 4.6.4، قم بتثبيت DeepStream 6.0.1
- بالنسبة إلى JetPack 5.1.3، قم بتثبيت DeepStream 6.3
- بالنسبة إلى JetPack 6.1، قم بتثبيت DeepStream 7.1
نصيحة
في هذا الدليل، استخدمنا طريقة حزمة Debian لتثبيت DeepStream SDK على جهاز Jetson. يمكنك أيضًا زيارة DeepStream SDK على Jetson (أرشيف) للوصول إلى الإصدارات القديمة من DeepStream.
تكوين DeepStream لـ YOLO11
هنا نستخدم مستودع GitHub marcoslucianops/DeepStream-Yolo الذي يتضمن دعم NVIDIA DeepStream SDK لنماذج YOLO. نحن نقدر جهود marcoslucianops لمساهماته!
-
تثبيت Ultralytics مع التبعيات الضرورية
cd ~ pip install -U pip git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e ".[export]" onnxslim
-
استنساخ مستودع DeepStream-Yolo
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo
-
انسخ
export_yolo11.py
منDeepStream-Yolo/utils
دليل إلىultralytics
مجلدcp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics cd ultralytics
-
قم بتنزيل نموذج الكشف Ultralytics YOLO11 (.pt) الذي تختاره من إصدارات YOLO11. هنا نستخدم yolo11s.pt.
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
ملاحظة
يمكنك أيضًا استخدام نموذج YOLO11 مدرب مخصصًا.
-
تحويل النموذج إلى ONNX
python3 export_yolo11.py -w yolo11s.pt
مرر الوسائط أدناه إلى الأمر أعلاه
بالنسبة إلى DeepStream 5.1، قم بإزالة
--dynamic
الوسيطة واستخدامها argopset
12 أو أقل. الإعداد الافتراضيopset
هو 17.--opset 12
لتغيير حجم الاستدلال (الافتراضي: 640)
-s SIZE --size SIZE -s HEIGHT WIDTH --size HEIGHT WIDTH
مثال لـ 1280:
-s 1280 or -s 1280 1280
لتبسيط نموذج ONNX (DeepStream >= 6.0)
--simplify
لاستخدام حجم الدُفعة الديناميكي (DeepStream >= 6.1)
--dynamic
لاستخدام حجم الدفعة الثابت (مثال لحجم الدفعة = 4)
--batch 4
-
انسخ
.onnx
ملف النموذج وlabels.txt
الملف إلىDeepStream-Yolo
مجلدcp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo
-
قم بتعيين إصدار CUDA وفقًا لإصدار JetPack المثبت
بالنسبة إلى JetPack 4.6.4:
export CUDA_VER=10.2
بالنسبة إلى JetPack 5.1.3:
export CUDA_VER=11.4
بالنسبة إلى Jetpack 6.1:
export CUDA_VER=12.6
-
تجميع المكتبة
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
تعديل
config_infer_primary_yolo11.txt
وفقًا لنموذجك (بالنسبة إلى YOLO11s مع 80 فئة)[property] ... onnx-file=yolo11s.pt.onnx ... num-detected-classes=80 ...
-
تعديل
deepstream_app_config
ملف... [primary-gie] ... config-file=config_infer_primary_yolo11.txt
-
يمكنك أيضًا تغيير مصدر الفيديو في
deepstream_app_config
ملف. هنا يتم تحميل ملف فيديو افتراضي... [source0] ... uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
تشغيل الاستدلال
deepstream-app -c deepstream_app_config.txt
ملاحظة
سيستغرق الأمر وقتًا طويلاً لإنشاء ملف محرك TensorRT قبل بدء الاستدلال. لذا يرجى التحلي بالصبر.

نصيحة
إذا كنت ترغب في تحويل النموذج إلى دقة FP16، فما عليك سوى تعيين model-engine-file=model_b1_gpu0_fp16.engine
و network-mode=2
في الداخل config_infer_primary_yolo11.txt
معايرة INT8
إذا كنت ترغب في استخدام دقة INT8 للاستدلال، يجب عليك اتباع الخطوات التالية
ملاحظة
حاليًا، لا يعمل INT8 مع TensorRT 10.x. تم اختبار هذا الجزء من الدليل باستخدام TensorRT 8.x الذي من المتوقع أن يعمل.
-
تعيين
OPENCV
متغير البيئةexport OPENCV=1
-
تجميع المكتبة
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
بالنسبة لمجموعة بيانات COCO، قم بتنزيل val2017، استخرج وانتقل إلى.
DeepStream-Yolo
مجلد -
أنشئ دليلًا جديدًا لصور المعايرة
mkdir calibration
-
شغّل الأمر التالي لاختيار 1000 صورة عشوائية من مجموعة بيانات COCO لتشغيل المعايرة.
for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do cp ${jpg} calibration/ done
ملاحظة
توصي NVIDIA بما لا يقل عن 500 صورة للحصول على دقة جيدة. في هذا المثال، يتم اختيار 1000 صورة للحصول على دقة أفضل (المزيد من الصور = دقة أكبر). يمكنك تعيينه من head -1000. على سبيل المثال، بالنسبة لـ 2000 صورة، head -2000. قد تستغرق هذه العملية وقتًا طويلاً.
-
إنشاء
calibration.txt
ملف يحتوي على جميع الصور المحددةrealpath calibration/*jpg > calibration.txt
-
تعيين متغيرات البيئة
export INT8_CALIB_IMG_PATH=calibration.txt export INT8_CALIB_BATCH_SIZE=1
ملاحظة
ستؤدي قيم INT8_CALIB_BATCH_SIZE الأعلى إلى مزيد من الدقة وسرعة معايرة أسرع. اضبطه وفقًا لذاكرة GPU الخاصة بك.
-
تحديث
config_infer_primary_yolo11.txt
ملفمن
... model-engine-file=model_b1_gpu0_fp32.engine #int8-calib-file=calib.table ... network-mode=0 ...
إلى
... model-engine-file=model_b1_gpu0_int8.engine int8-calib-file=calib.table ... network-mode=1 ...
تشغيل الاستدلال
deepstream-app -c deepstream_app_config.txt
إعداد متعدد التدفقات
شاهد: كيفية تشغيل تدفقات متعددة باستخدام DeepStream SDK على Jetson Nano باستخدام Ultralytics YOLO11 🎉
لإعداد تدفقات متعددة ضمن تطبيق deepstream واحد، يمكنك إجراء التغييرات التالية على deepstream_app_config.txt
ملف
-
غيّر الصفوف والأعمدة لإنشاء عرض شبكي وفقًا لعدد التدفقات التي تريد عرضها. على سبيل المثال، بالنسبة إلى 4 تدفقات، يمكننا إضافة صفين وعمودين.
[tiled-display] rows=2 columns=2
-
تعيين
num-sources=4
وإضافةuri
لجميع التدفقات الأربعة[source0] enable=1 type=3 uri=path/to/video1.jpg uri=path/to/video2.jpg uri=path/to/video3.jpg uri=path/to/video4.jpg num-sources=4
تشغيل الاستدلال
deepstream-app -c deepstream_app_config.txt

نتائج المقارنة المعيارية
تلخص المعايير القياسية التالية أداء نماذج YOLO11 بمستويات دقة TensorRT مختلفة مع حجم إدخال 640 × 640 على NVIDIA Jetson Orin NX 16GB.
مخطط المقارنة

جدول مقارنة تفصيلي
الأداء
التنسيق | الحالة | وقت الاستدلال (مللي ثانية / صورة) |
---|---|---|
TensorRT (FP32) | ✅ | 8.64 |
TensorRT (FP16) | ✅ | 5.27 |
TensorRT (INT8) | ✅ | 4.54 |
التنسيق | الحالة | وقت الاستدلال (مللي ثانية / صورة) |
---|---|---|
TensorRT (FP32) | ✅ | 14.53 |
TensorRT (FP16) | ✅ | 7.91 |
TensorRT (INT8) | ✅ | 6.05 |
التنسيق | الحالة | وقت الاستدلال (مللي ثانية / صورة) |
---|---|---|
TensorRT (FP32) | ✅ | 32.05 |
TensorRT (FP16) | ✅ | 15.55 |
TensorRT (INT8) | ✅ | 10.43 |
التنسيق | الحالة | وقت الاستدلال (مللي ثانية / صورة) |
---|---|---|
TensorRT (FP32) | ✅ | 39.68 |
TensorRT (FP16) | ✅ | 19.88 |
TensorRT (INT8) | ✅ | 13.64 |
التنسيق | الحالة | وقت الاستدلال (مللي ثانية / صورة) |
---|---|---|
TensorRT (FP32) | ✅ | 80.65 |
TensorRT (FP16) | ✅ | 39.06 |
TensorRT (INT8) | ✅ | 22.83 |
شكر وتقدير
تم إنشاء هذا الدليل في الأصل بواسطة أصدقائنا في Seeed Studio، لاكشانثا وإيلين.
الأسئلة الشائعة
كيف يمكنني إعداد Ultralytics YOLO11 على جهاز NVIDIA Jetson؟
لإعداد Ultralytics YOLO11 على جهاز NVIDIA Jetson، تحتاج أولاً إلى تثبيت DeepStream SDK المتوافق مع إصدار JetPack الخاص بك. اتبع الدليل المفصل خطوة بخطوة في دليل البدء السريع الخاص بنا لتكوين NVIDIA Jetson الخاص بك لنشر YOLO11.
ما هي فائدة استخدام TensorRT مع YOLO11 على NVIDIA Jetson؟
يعمل استخدام TensorRT مع YOLO11 على تحسين النموذج للاستدلال، مما يقلل بشكل كبير من زمن الوصول ويحسن الإنتاجية على أجهزة NVIDIA Jetson. يوفر TensorRT استدلالًا عالي الأداء ومنخفض زمن الوصول للتعلم العميق من خلال دمج الطبقات ومعايرة الدقة والضبط التلقائي للنواة. يؤدي هذا إلى تنفيذ أسرع وأكثر كفاءة، وهو مفيد بشكل خاص للتطبيقات في الوقت الفعلي مثل تحليلات الفيديو والآلات المستقلة.
هل يمكنني تشغيل Ultralytics YOLO11 مع DeepStream SDK عبر أجهزة NVIDIA Jetson المختلفة؟
نعم، إن دليل نشر Ultralytics YOLO11 باستخدام DeepStream SDK و TensorRT متوافق مع كامل مجموعة NVIDIA Jetson. ويشمل ذلك أجهزة مثل Jetson Orin NX 16GB مع JetPack 5.1.3 و Jetson Nano 4GB مع JetPack 4.6.4. راجع قسم تكوين DeepStream لـ YOLO11 للحصول على خطوات مفصلة.
كيف يمكنني تحويل نموذج YOLO11 إلى ONNX لـ DeepStream؟
لتحويل نموذج YOLO11 إلى تنسيق ONNX للنشر باستخدام DeepStream، استخدم utils/export_yolo11.py
البرنامج النصي من DeepStream-Yolo المستودع.
إليك مثال على أمر:
python3 utils/export_yolo11.py -w yolo11s.pt --opset 12 --simplify
لمزيد من التفاصيل حول تحويل النموذج، تحقق من قسم تصدير النموذج الخاص بنا.
ما هي معايير الأداء لـ YOLO على NVIDIA Jetson Orin NX؟
يختلف أداء نماذج YOLO11 على NVIDIA Jetson Orin NX 16GB بناءً على مستويات دقة TensorRT. على سبيل المثال، تحقق نماذج YOLO11s ما يلي:
- دقة FP32: 14.6 مللي ثانية/صورة، 68.5 إطار في الثانية
- دقة FP16: 7.94 مللي ثانية / صورة، 126 إطارًا في الثانية
- دقة INT8: 5.95 مللي ثانية/صورة، 168 إطارًا في الثانية
تؤكد هذه المعايير على كفاءة وقدرة استخدام نماذج YOLO11 المحسّنة بواسطة TensorRT على أجهزة NVIDIA Jetson. لمزيد من التفاصيل، راجع قسم نتائج المقارنة المعيارية الخاص بنا.