تخطي إلى المحتوى

Ultralytics YOLO11 على NVIDIA جيتسون باستخدام مجموعة أدوات تطوير البرمجيات DeepStream SDK و TensorRT



شاهد: كيفية تشغيل تدفقات متعددة باستخدام DeepStream SDK على Jetson Nano باستخدام Ultralytics YOLO11

يقدم هذا الدليل الشامل شرحًا تفصيليًا لنشر Ultralytics YOLO11 على أجهزة NVIDIA Jetson باستخدام DeepStream SDK و TensorRT. نستخدم هنا TensorRT لزيادة أداء الاستدلال على منصة Jetson.

DeepStream على NVIDIA جيتسون

ملاحظة

تم اختبار هذا الدليل باستخدام NVIDIA Jetson Orin Nano Super Developer Kit الذي يعمل بأحدث إصدار مستقر من JetPack JP6.1, Seeed Studio reComputer J4012 الذي يستند إلى NVIDIA Jetson Orin NX 16GB الذي يعمل بإصدار JetPack JP5.1.3 وSeed Studio reComputer J1020 v2 الذي يستند إلى NVIDIA Jetson Nano 4GB الذي يعمل بإصدار JetPack JP4.6.4. من المتوقع أن يعمل عبر جميع مجموعة أجهزة NVIDIA Jetson بما في ذلك الأحدث والقديم.

ما هو NVIDIA DeepStream؟

NVIDIAإن مجموعة أدوات DeepStream SDK الخاصة ب DeepStream عبارة عن مجموعة أدوات كاملة لتحليلات البث تعتمد على GStreamer لمعالجة متعددة أجهزة الاستشعار القائمة على الذكاء الاصطناعي والفيديو والصوت وفهم الصور. إنها مثالية لمطوري الذكاء الاصطناعي للرؤية وشركاء البرامج والشركات الناشئة ومصنعي المعدات الأصلية الذين يقومون ببناء تطبيقات وخدمات تحليلات الفيديو الذكية (IVA). يمكنك الآن إنشاء خطوط أنابيب لمعالجة البث تتضمن شبكات عصبية ومهام معالجة معقدة أخرى مثل التتبع وتشفير/فك تشفير الفيديو وعرض الفيديو. تمكّن خطوط الأنابيب هذه من إجراء تحليلات في الوقت الفعلي على بيانات الفيديو والصور وبيانات المستشعرات. يمنحك دعم DeepStream متعدد المنصات طريقة أسرع وأسهل لتطوير تطبيقات وخدمات الذكاء الاصطناعي للرؤية في مكان العمل وعلى الحافة وفي السحابة.

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

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

نصيحة

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

تهيئة DeepStream لـ YOLO11

نحن هنا نستخدم مستودع Marcoslucianops/DeepStream-Yolo GitHub الذي يتضمن دعم NVIDIA DeepStream SDK لنماذج YOLO . نحن نقدر جهود marcoslucianops على مساهماته!

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

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
    
  2. استنساخ مستودع DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. انسخ export_yoloV8.py ملف من DeepStream-Yolo/utils الدليل إلى ultralytics المجلد

    cp ~/DeepStream-Yolo/utils/export_yoloV8.py ~/ultralytics
    cd ultralytics
    

    ملاحظة

    export_yoloV8.py يعمل لكل من الطرازين YOLOv8 و YOLO11 .

  4. قم بتنزيل Ultralytics YOLO11 نموذج الكشف (.pt) من اختيارك من إصداراتYOLO11 . نستخدم هنا yolo11s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
    

    ملاحظة

    يمكنك أيضًا استخدام نموذج YOLO11 مدرب مخصص.

  5. تحويل النموذج إلى ONNX

    python3 export_yoloV8.py -w yolo11s.pt
    

    مرر الوسيطات التالية إلى الأمر أعلاه

    بالنسبة إلى DeepStream 6.0.1، استخدم مجموعة العمليات 12 أو أقل. مجموعة العمليات الافتراضية هي 16.

    --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
    
  6. انسخ النسخة التي تم إنشاؤها .onnx ملف النموذج و labels.txt إلى ملف DeepStream-Yolo المجلد

    cp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. قم بتعيين الإصدار 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
    
  8. تجميع المكتبة

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. تحرير config_infer_primary_yoloV8.txt ملف وفقًا للنموذج الخاص بك (لـ YOLO11s مع 80 فئة)

    [property]
    ...
    onnx-file=yolo11s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. تحرير deepstream_app_config الملف

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

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

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

deepstream-app -c deepstream_app_config.txt

ملاحظة

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

YOLO11 مع ديبستريم

نصيحة

إذا كنت ترغب بتحويل النموذج إلى دقة FP16، ما عليك سوى تعيين model-engine-file=model_b1_gpu0_fp16.engine و network-mode=2 في الداخل config_infer_primary_yoloV8.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، قم بتنزيل فال2017واستخرج، وانتقل إلى 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 صورة للحصول على دقة أفضل (المزيد من الصور = دقة أكبر). يمكنك ضبطه من الرأس -1000. على سبيل المثال، لـ 2000 صورة، الرأس -2000. قد تستغرق هذه العملية وقتًا طويلاً.

  6. إنشاء calibration.txt ملف يحتوي على جميع الصور المحددة

    realpath calibration/*jpg > calibration.txt
    
  7. تعيين متغيرات البيئة

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    ملاحظة

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

  8. تحديث config_infer_primary_yoloV8.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_app_config.txt الملف

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

    [tiled-display]
    rows=2
    columns=2
    
  2. مجموعة num-sources=4 وإضافة uri من جميع التدفقات الأربعة

    [source0]
    enable=1
    type=3
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    num-sources=4
    

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

deepstream-app -c deepstream_app_config.txt
إعداد البث المتعدد

النتائج المعيارية

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

رسم بياني للمقارنة

رسم بياني لمعايير Jetson DeepStream

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

الأداء

التنسيق الحالة زمن الاستدلال (م/م)
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 جيتسون؟

لإعداد Ultralytics YOLO11 على جهاز NVIDIA Jetson، تحتاج أولاً إلى تثبيت DeepStream SDK المتوافق مع إصدار JetPack الخاص بك. اتبع الدليل التفصيلي خطوة بخطوة في دليل البدء السريع لتهيئة جهازك NVIDIA Jetson للنشر YOLO11 .

ما هي الفائدة من استخدام TensorRT مع YOLO11 على NVIDIA جيتسون ؟

يؤدي استخدام TensorRT مع YOLO11 إلى تحسين نموذج الاستدلال، مما يقلل بشكل كبير من زمن الاستجابة ويحسن الإنتاجية على أجهزة NVIDIA Jetson. TensorRT يوفر استنتاج التعلم العميق عالي الأداء ومنخفض زمن الاستجابة من خلال دمج الطبقات والمعايرة الدقيقة والضبط التلقائي للنواة. ويؤدي ذلك إلى تنفيذ أسرع وأكثر كفاءة، وهو أمر مفيد بشكل خاص لتطبيقات الوقت الحقيقي مثل تحليلات الفيديو والآلات المستقلة.

هل يمكنني تشغيل Ultralytics YOLO11 باستخدام DeepStream SDK عبر أجهزة NVIDIA Jetson مختلفة؟

نعم، يتوافق دليل النشر Ultralytics YOLO11 مع DeepStream SDK و TensorRT عبر مجموعة NVIDIA Jetson بأكملها Jetson. وهذا يشمل أجهزة مثل Jetson Orin Orin NX 16GB مع JetPack 5.1.3 و Jetson Nano 4GB مع JetPack 4.6.4. ارجع إلى قسم تهيئة DeepStream لـ YOLO11 للاطلاع على الخطوات التفصيلية.

كيف يمكنني تحويل نموذج YOLO11 إلى ONNX لـ DeepStream؟

لتحويل نموذج YOLO11 إلى تنسيق ONNX للنشر باستخدام DeepStream، استخدم utils/export_yoloV8.py نص من ديب ستريم-Yolo المستودع.

إليك مثال على ذلك الأمر

python3 utils/export_yoloV8.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 . لمزيد من التفاصيل، راجع قسم النتائج المعيارية.

📅 تم إنشاؤها قبل 7 أشهر ✏️ تم التحديث منذ 1 شهر

التعليقات