Ultralytics YOLO26 على NVIDIA Jetson باستخدام DeepStream SDK و TensorRT#
Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀
يقدم هذا الدليل الشامل شرحاً مفصلاً لنشر نماذج Ultralytics YOLO26 على أجهزة NVIDIA Jetson باستخدام DeepStream SDK و TensorRT. نستخدم هنا TensorRT لتعظيم أداء الاستدلال على منصة Jetson.
يستعرض هذا الدليل إعداد DeepStream لنموذج YOLO26، ومعايرة INT8، وإعداد التدفقات المتعددة، ونتائج المقارنة المعيارية.

تم اختبار هذا الدليل مع مجموعة تطوير 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؟#
حزمة أدوات DeepStream SDK من NVIDIA هي مجموعة أدوات تحليل تدفق متكاملة تعتمد على GStreamer لمعالجة المستشعرات المتعددة المستندة إلى الذكاء الاصطناعي، وفهم الفيديو والصوت والصور. وهي مثالية لمطوري رؤية الذكاء الاصطناعي، والشركاء البرمجيين، والشركات الناشئة، ومصنعي المعدات الأصلية الذين يبنون تطبيقات وخدمات تحليل الفيديو الذكي (IVA). يمكنك الآن إنشاء خطوط أنابيب معالجة التدفقات التي تدمج الشبكات العصبية ومهام المعالجة المعقدة الأخرى مثل التتبع، وترميز/فك ترميز الفيديو، وعرض الفيديو. تتيح خطوط الأنابيب هذه إجراء تحليلات في الوقت الفعلي على بيانات الفيديو والصور والمستشعرات. يمنحك دعم DeepStream متعدد المنصات طريقتنا الأسرع والأسهل لتطوير تطبيقات وخدمات رؤية الذكاء الاصطناعي محلياً، وعلى الحافة، وفي السحابة.
المتطلبات الأساسية#
قبل البدء في اتباع هذا الدليل:
- تفضل بزيارة وثائقنا، دليل البدء السريع: NVIDIA Jetson مع Ultralytics YOLO26 لإعداد جهاز NVIDIA Jetson الخاص بك باستخدام Ultralytics YOLO26
- قم بتثبيت DeepStream SDK وفقاً لإصدار JetPack
- بالنسبة لـ JetPack 4.6.4، قم بتثبيت DeepStream 6.0.1
- بالنسبة لـ JetPack 5.1.3، قم بتثبيت DeepStream 6.3
- بالنسبة لـ JetPack 6.1، قم بتثبيت DeepStream 7.1
- بالنسبة لـ JetPack 7.1، قم بتثبيت DeepStream 9.0
في هذا الدليل، استخدمنا طريقة حزمة Debian لتثبيت DeepStream SDK على جهاز Jetson. يمكنك أيضاً زيارة DeepStream SDK على Jetson (مؤرشف) للوصول إلى الإصدارات القديمة من DeepStream.
تهيئة DeepStream لـ YOLO26#
نستخدم هنا مستودع 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_yolo26.pyمن الدليلDeepStream-Yolo/utilsإلى المجلدultralyticscp ~/DeepStream-Yolo/utils/export_yolo26.py ~/ultralytics cd ultralytics -
قم بتنزيل نموذج اكتشاف Ultralytics YOLO26 (.pt) الذي تختاره من مشروع YOLO26. نستخدم هنا yolo26s.pt.
wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
يمكنك أيضاً استخدام نموذج YOLO26 مدرب خصيصاً.
-
تحويل النموذج إلى ONNX
python3 export_yolo26.py -w yolo26s.pt
بالنسبة لـ DeepStream 5.1، قم بإزالة الوسيط --dynamic واستخدم opset 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لاستخدام حجم دفعة (batch-size) ديناميكي (DeepStream >= 6.1)
--dynamicلاستخدام حجم دفعة ثابت (مثال لحجم دفعة = 4)
--batch 4-
انسخ ملف نموذج
.onnxالمُنشأ وملفlabels.txtإلى المجلدDeepStream-Yolocp yolo26s.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_yolo26.txtوفقاً لنموذجك (لـ YOLO26s مع 80 فئة)[property] ... onnx-file=yolo26s.onnx ... num-detected-classes=80 ... parse-bbox-func-name=NvDsInferParseYolo ...
يقوم YOLO26 بتغيير حجم المدخلات مع حشوة مركزية ويعمل بدون NMS. للحصول على أفضل دقة، أضف ما يلي إلى قسم [property] من config_infer_primary_yolo26.txt:
[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...-
قم بتعديل ملف
deepstream_app_config... [primary-gie] ... config-file=config_infer_primary_yolo26.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_yolo26.txt
معايرة INT8#
إذا كنت ترغب في استخدام دقة INT8 للاستنتاج، فأنت بحاجة إلى اتباع الخطوات أدناه:
حالياً، لا يعمل INT8 مع TensorRT 10.x. تم اختبار هذا القسم من الدليل مع TensorRT 8.x ومن المتوقع أن يعمل.
-
قم بتعيين متغير البيئة
OPENCVexport 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_yolo26.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 ...
تشغيل استنتاج INT8#
قم بتشغيل نفس الأمر لبناء محرك INT8 وبدء الاستنتاج:
deepstream-app -c deepstream_app_config.txtإعداد البث المتعدد#
Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀
لإعداد تدفقات متعددة تحت تطبيق DeepStream واحد، قم بالدفع بالتغييرات التالية على ملف deepstream_app_config.txt:
-
قم بتغيير الصفوف والأعمدة لبناء عرض شبكي وفقاً لعدد التدفقات التي تريد الحصول عليها. على سبيل المثال، لـ 4 تدفقات، يمكننا إضافة صفين وعمودين.
[tiled-display] rows=2 columns=2 -
أضف مجموعة
[sourceN]منفصلة لكل تدفق، ولكل منهاuriوnum-sources=1الخاص بها.[source0] enable=1 type=3 uri=file:///path/to/video1.mp4 num-sources=1 [source1] enable=1 type=3 uri=file:///path/to/video2.mp4 num-sources=1 [source2] enable=1 type=3 uri=file:///path/to/video3.mp4 num-sources=1 [source3] enable=1 type=3 uri=file:///path/to/video4.mp4 num-sources=1
تشغيل استنتاج البث المتعدد#
قم بتشغيل نفس الأمر لتشغيل كافة التدفقات في شاشة العرض المبلطة:
deepstream-app -c deepstream_app_config.txt
نتائج القياس المرجعي#
تلخص المقارنات المعيارية التالية كيفية أداء نماذج YOLO11 في مستويات دقة TensorRT المختلفة مع حجم إدخال 640x640 على NVIDIA Jetson Orin NX 16GB. يستخدم YOLO26 نفس سير عمل التصدير والاستدلال لـ DeepStream الموضح أعلاه.
مخطط المقارنة#

جدول مقارنة مفصل#
| التنسيق | الحالة | وقت الاستدلال (ms/im) |
|---|---|---|
| TensorRT (FP32) | ✅ | 8.64 |
| TensorRT (FP16) | ✅ | 5.27 |
| TensorRT (INT8) | ✅ | 4.54 |
شكر وتقدير#
تم إنشاء هذا الدليل في البداية بواسطة أصدقائنا في Seeed Studio، Lakshantha و Elaine.
الأسئلة الشائعة#
لإعداد Ultralytics YOLO26 على جهاز NVIDIA Jetson، تحتاج أولاً إلى تثبيت DeepStream SDK المتوافق مع إصدار JetPack الخاص بك. اتبع الدليل خطوة بخطوة في دليل البدء السريع لتكوين NVIDIA Jetson لنشر YOLO26.
يؤدي استخدام TensorRT مع YOLO26 إلى تحسين النموذج للاستدلال، مما يقلل بشكل كبير من زمن الاستجابة ويحسن الإنتاجية على أجهزة NVIDIA Jetson. يوفر TensorRT استدلال تعلم عميق عالي الأداء ومنخفض زمن الاستجابة من خلال دمج الطبقات، ومعايرة الدقة، والضبط التلقائي للنواة. يؤدي هذا إلى تنفيذ أسرع وأكثر كفاءة، وهو مفيد بشكل خاص للتطبيقات في الوقت الفعلي مثل تحليلات الفيديو والآلات المستقلة.
نعم، الدليل الخاص بنشر Ultralytics YOLO26 مع DeepStream SDK و TensorRT متوافق عبر تشكيلة NVIDIA Jetson بأكملها. يتضمن ذلك أجهزة مثل Jetson Orin NX 16GB مع JetPack 5.1.3 و Jetson Nano 4GB مع JetPack 4.6.4. ارجع إلى قسم تكوين DeepStream لـ YOLO26 للتعرف على الخطوات التفصيلية.
لتكوين نموذج YOLO26 إلى تنسيق ONNX للنشر باستخدام DeepStream، استخدم البرنامج النصي
utils/export_yolo26.pyمن مستودع DeepStream-Yolo.إليك مثال على الأمر:
python3 utils/export_yolo26.py -w yolo26s.pt --opset 12 --simplifyلمزيد من التفاصيل حول تحويل النموذج، راجع قسم تصدير النموذج.
لتشغيل استدلال INT8، قم بمعايرة النموذج على مجموعة صور تمثيلية وقم بتبديل تكوين DeepStream إلى وضع INT8. قم بتنزيل صور COCO val2017، وقم بتحديد حوالي 1000 صورة معايرة، وقم بتعيين متغيرات البيئة
INT8_CALIB_IMG_PATHوINT8_CALIB_BATCH_SIZE، ثم قم بتحديثconfig_infer_primary_yolo26.txtباستخدامmodel-engine-file=model_b1_gpu0_int8.engineوint8-calib-file=calib.tableوnetwork-mode=1. راجع قسم معايرة INT8 للحصول على الخطوات الكاملة. يتطلب INT8 حالياً TensorRT 8.x.معالجة التدفقات المتعددة في تطبيق DeepStream واحد، قم بتعديل ملف
deepstream_app_config.txtلإضافة شبكة عرض متباينة وسرد كل مصدر URI. قم بتعيينrowsوcolumnsتحت[tiled-display]لبناء الشبكة، وأضف مجموعة[sourceN]منفصلة لكل تدفق معuriوnum-sources=1الخاصة بها، وقم بتعديل الشبكة لتلائم عدد التدفقات. راجع قسم إعداد التدفقات المتعددة للحصول على مثال كامل.يختلف أداء نماذج YOLO11 على NVIDIA Jetson Orin NX 16GB بناءً على مستويات دقة TensorRT. على سبيل المثال، تحقق نماذج YOLO11s ما يلي:
- دقة FP32: 14.53 مللي ثانية/صورة، 68.8 إطار في الثانية
- دقة FP16: 7.91 مللي ثانية/صورة، 126 إطار في الثانية
- دقة INT8: 6.05 مللي ثانية/صورة، 165 إطار في الثانية
تؤكد هذه المقارنات المعيارية على كفاءة وقدرة استخدام نماذج YOLO11 المُحسَّنة بواسطة TensorRT على عتاد NVIDIA Jetson. لمزيد من التفاصيل، راجع قسم نتائج المقارنة المعيارية.