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؟#
إن NVIDIA's DeepStream SDK عبارة عن مجموعة أدوات متكاملة لتحليلات التدفق، مبنية على 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 (Archived) للوصول إلى الإصدارات القديمة من DeepStream.
إعداد DeepStream لـ YOLO26#
نستخدم هنا مستودع GitHub marcoslucianops/DeepStream-Yolo، الذي يتضمن دعم NVIDIA DeepStream SDK لنماذج YOLO. نُقدّر جهود marcoslucianops وإسهاماته!
-
تثبيت Ultralytics مع التبعيات اللازمة
pip install ultralytics onnx onnxslim -
استنساخ مستودع DeepStream-Yolo
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo -
نزّل نموذج كشف Ultralytics YOLO26 (.pt) الذي تختاره من مشروع YOLO26. نستخدم هنا yolo26s.pt.
wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
يمكنك أيضًا استخدام نموذج YOLO26 مُدرّبًا تدريبًا مخصصًا.
-
قم بتحويل النموذج إلى ONNX واكتب ملف
labels.txtالذي تقرأ منه DeepStream أسماء الفئاتfrom ultralytics import YOLO model = YOLO("yolo26s.pt") model.export(format="onnx", nms=False, agnostic_nms=True) # creates 'yolo26s.onnx' with open("labels.txt", "w") as f: f.write("\n".join(model.names.values()))
يقوم nms=False بتصدير رأس خالي من خوارزمية كابتة التداخل غير المحددة، ويحافظ agnostic_nms=True على فئة واحدة لكل اكتشاف حتى لا يقوم cluster-mode=4 (بدون تجمع) في تكوين DeepStream برسم صندوق مرتين. أضف imgsz=1280 لتغيير حجم الاستدلال (الافتراضي: 640)، وbatch=4 لحجم دفعة قدره 4 (الدفعة المُصدّرة ثابتة، لذا يجب أن تتطابق مع batch-size في تكوين DeepStream)، وopset=12 لـ TensorRT 8.2 أو الأقدم (DeepStream 6.0.1 والأقدم). اطلع على وسائط التصدير للحصول على القائمة الكاملة.
-
انسخ ملف النموذج المُنشأ
.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لإصدار JetPack 7.1:
export CUDA_VER=13.0 -
ترجمة المكتبة
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 سير العمل نفسه لتصدير النموذج والاستدلال الموضح أعلاه.
مخطط المقارنة#

جدول المقارنة التفصيلي#
| التنسيق | الحالة | زمن الاستدلال (مللي ثانية/صورة) |
|---|---|---|
| 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 للاطلاع على الخطوات التفصيلية.
قم بتصدير النموذج الذي يحتوي على الرأس الخالي من خوارزمية كابتة التداخل غير المحددة باستخدام أداة التصدير الخاصة بـ Ultralytics، واكتب ملف
labels.txtالذي تقرأ منه DeepStream أسماء الفئات:from ultralytics import YOLO model = YOLO("yolo26s.pt") model.export(format="onnx", nms=False, agnostic_nms=True) # creates 'yolo26s.onnx' with open("labels.txt", "w") as f: f.write("\n".join(model.names.values()))أضف
opset=12لـ TensorRT 8.2 أو الأقدم (DeepStream 6.0.1 والأقدم). لمزيد من التفاصيل حول تحويل النموذج، راجع قسم تصدير النماذج الخاص بنا.لتشغيل استدلال 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. لمزيد من التفاصيل، راجع قسم نتائج القياس.