انتقل إلى المحتوى

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

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

ديب ستريم على نفيديا جيتسون

ملاحظه

لقد تم اختبار هذا الدليل مع كل من 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 بما في ذلك الأحدث والأقدم.

ما هو إنفيديا ديب ستريم؟

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

المتطلبات المسبقه

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

بقشيش

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

تكوين DeepStream ل YOLOv8

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

  1. تثبيت التبعيات

    pip install cmake
    pip install onnxsim
    
  2. استنساخ المستودع التالي

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. قم بتنزيل Ultralytics YOLOv8 نموذج الكشف (.pt) من اختيارك من إصداراتYOLOv8 . نستخدم هنا yolov8s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
    

    ملاحظه

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

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

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

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

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

    --opset 12
    

    لتغيير حجم الاستدلال (افتراضي: 640)

    -s SIZE
    --size SIZE
    -s HEIGHT WIDTH
    --size HEIGHT WIDTH
    

    مثال ل 1280:

    -s 1280
    or
    -s 1280 1280
    

    لتبسيط ONNX نموذج (ديب ستريم > = 6.0)

    --simplify
    

    لاستخدام حجم الدفعة الديناميكي (DeepStream > = 6.1)

    --dynamic
    

    لاستخدام حجم الدفعة الثابت (مثال لحجم الدفعة = 4)

    --batch 4
    
  5. قم بتعيين إصدار CUDA وفقا لإصدار JetPack المثبت

    لجت باك 4.6.4:

    export CUDA_VER=10.2
    

    لجت باك 5.1.3:

    export CUDA_VER=11.4
    
  6. تجميع المكتبة

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. قم بتحرير config_infer_primary_yoloV8.txt وفقا للطراز الخاص بك (ل YOLOv8s مع 80 فصلا)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. قم بتحرير deepstream_app_config ملف

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

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

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

deepstream-app -c deepstream_app_config.txt

ملاحظه

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

YOLOv8 مع ديبستريم

بقشيش

إذا كنت ترغب في تحويل النموذج إلى دقة FP16 ، فما عليك سوى تعيين model-engine-file=model_b1_gpu0_fp16.engine و network-mode=2 داخل config_infer_primary_yoloV8.txt

معايرة INT8

إذا كنت تريد استخدام دقة INT8 للاستدلال ، فأنت بحاجة إلى اتباع الخطوات أدناه

  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 من جميع تيارات 4

    [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
إعداد البث المتعدد

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

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

اسم الموديل دقة وقت الاستدلال (م/م) إطارا في الثانية
YOLOv8s FP32 15.63 64
FP16 7.94 126
INT8 5.53 181

الاعترافات

تم إنشاء هذا الدليل في البداية من قبل أصدقائنا في Seeed Studio و Lakshantha و Elaine.



تم الإنشاء 2024-07-01، تم التحديث 2024-07-01
المؤلفون: لاكشانثاد (1)

التعليقات