Ultralytics YOLO27:

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 DeepStream SDK on Jetson platform
ملاحظة

اختُبر هذا الدليل باستخدام 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 المتعدد المنصات طريقة أسرع وأسهل لتطوير تطبيقات وخدمات الذكاء الاصطناعي للرؤية في بيئات العمل المحلية، وعلى الحافة، وفي السحابة.

المتطلبات الأساسية#

قبل البدء باتباع هذا الدليل:

نصيحة

استخدمنا في هذا الدليل طريقة حزمة Debian لتثبيت DeepStream SDK على جهاز Jetson. يمكنك أيضًا زيارة DeepStream SDK على Jetson (Archived) للوصول إلى الإصدارات القديمة من DeepStream.

إعداد DeepStream لـ YOLO26#

نستخدم هنا مستودع GitHub ‏marcoslucianops/DeepStream-Yolo، الذي يتضمن دعم NVIDIA DeepStream SDK لنماذج YOLO. نُقدّر جهود marcoslucianops وإسهاماته!

  1. تثبيت Ultralytics مع التبعيات اللازمة

    pip install ultralytics onnx onnxslim
  2. استنساخ مستودع DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. نزّل نموذج كشف Ultralytics YOLO26 ‏(.pt) الذي تختاره من مشروع YOLO26. نستخدم هنا yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
ملاحظة
  1. قم بتحويل النموذج إلى 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 والأقدم). اطلع على وسائط التصدير للحصول على القائمة الكاملة.

  1. انسخ ملف النموذج المُنشأ .onnx والملف labels.txt إلى المجلد DeepStream-Yolo

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. اضبط إصدار 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
  3. ترجمة المكتبة

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. حرّر الملف config_infer_primary_yolo26.txt وفقًا لنموذجك (بالنسبة إلى YOLO26s مع 80 فئة)

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
إعدادات دقة YOLO26

يغيّر YOLO26 حجم الإدخال باستخدام حشو مركزي ويعمل من دون NMS. للحصول على أفضل دقة، أضف ما يلي إلى قسم [property] في config_infer_primary_yolo26.txt:

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. حرّر الملف deepstream_app_config

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. يمكنك أيضًا تغيير مصدر الفيديو في الملف deepstream_app_config. يُحمّل هنا ملف فيديو افتراضي

    ...
    [source0]
    ...
    uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

تشغيل الاستدلال#

deepstream-app -c deepstream_app_config.txt
ملاحظة

سيستغرق إنشاء ملف محرك TensorRT وقتًا طويلًا قبل بدء الاستدلال. لذا يُرجى التحلّي بالصبر.

YOLO26 with deepstream
نصيحة

إذا أردت تحويل النموذج إلى دقة 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، ومن المتوقع أن يعمل.

  1. اضبط متغير البيئة OPENCV

    export OPENCV=1
  2. ترجمة المكتبة

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. بالنسبة إلى مجموعة بيانات COCO، نزّل val2017، وفك الضغط، وانقل الملفات إلى المجلد DeepStream-Yolo

  4. أنشئ دليلًا جديدًا لصور المعايرة

    mkdir calibration
  5. نفّذ ما يلي لتحديد 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. قد تستغرق هذه العملية وقتًا طويلًا.

  1. أنشئ الملف calibration.txt مع جميع الصور المحددة

    realpath calibration/*jpg > calibration.txt
  2. اضبط متغيرات البيئة

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
ملاحظة

تؤدي القيم الأعلى لـ INT8_CALIB_BATCH_SIZE إلى دقة أكبر وسرعة معايرة أعلى. اضبطها وفقًا لذاكرة GPU لديك.

  1. حدّث الملف 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:

  1. غيّر الصفوف والأعمدة لإنشاء عرض شبكي وفقًا لعدد التدفقات التي تريدها. فمثلًا، بالنسبة إلى 4 تدفقات، يمكننا إضافة صفين وعمودين.

    [tiled-display]
    rows=2
    columns=2
  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
DeepStream multi-camera streaming configuration

نتائج القياس#

تلخّص اختبارات الأداء التالية أداء نماذج YOLO11 عند مستويات دقة TensorRT المختلفة، بحجم إدخال 640x640 على NVIDIA Jetson Orin NX بسعة 16GB. يستخدم YOLO26 سير العمل نفسه لتصدير النموذج والاستدلال الموضح أعلاه.

مخطط المقارنة#

NVIDIA Jetson DeepStream performance benchmarks

جدول المقارنة التفصيلي#

الأداء
التنسيقالحالةزمن الاستدلال (مللي ثانية/صورة)
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. لمزيد من التفاصيل، راجع قسم نتائج القياس.

التعليقات