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

Ultralytics YOLO11 على NVIDIA Jetson باستخدام DeepStream SDK و TensorRT



شاهد: كيفية استخدام نماذج Ultralytics YOLO11 مع NVIDIA Deepstream على Jetson Orin NX 🚀

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

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

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

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

نصيحة

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

تكوين DeepStream لـ YOLO11

هنا نستخدم مستودع GitHub marcoslucianops/DeepStream-Yolo الذي يتضمن دعم 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_yolo11.py من DeepStream-Yolo/utils دليل إلى ultralytics مجلد

    cp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics
    cd ultralytics
    
  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_yolo11.py -w yolo11s.pt
    

    مرر الوسائط أدناه إلى الأمر أعلاه

    بالنسبة إلى DeepStream 5.1، قم بإزالة --dynamic الوسيطة واستخدامها arg 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
    

    لاستخدام حجم الدُفعة الديناميكي (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_yolo11.txt وفقًا لنموذجك (بالنسبة إلى YOLO11s مع 80 فئة)

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

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo11.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 مع deepstream

نصيحة

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

  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. قد تستغرق هذه العملية وقتًا طويلاً.

  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_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 ملف

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

    [tiled-display]
    rows=2
    columns=2
    
  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.

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

مخطط معايير 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 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. لمزيد من التفاصيل، راجع قسم نتائج المقارنة المعيارية الخاص بنا.



📅 أُنشئ منذ سنة واحدة ✏️ تم التحديث منذ 26 يومًا

تعليقات