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

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

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

DeepStream على NVIDIA جيتسون

ملاحظه

تم اختبار هذا الدليل مع كل من 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إن مجموعة أدوات DeepStream SDK الخاصة ب DeepStream عبارة عن مجموعة أدوات كاملة لتحليلات البث تعتمد على 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.

الأسئلة المتداولة

كيف أقوم بإعداد Ultralytics YOLOv8 على جهاز NVIDIA جيتسون؟

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

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

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

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

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

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

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

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

python3 utils/export_yoloV8.py -w yolov8s.pt --opset 12 --simplify

لمزيد من التفاصيل حول تحويل النماذج، راجع قسم تصدير النماذج لدينا.

ما هي معايير الأداء YOLOv8 على NVIDIA Jetson Orin NX؟

يختلف أداء الطرازات YOLOv8 على NVIDIA Jetson Orin NX 16GB بناءً على مستويات الدقة TensorRT . على سبيل المثال، تحقق موديلات YOLOv8s

  • دقة FP32: 15.63 مترًا في الثانية، 64 إطارًا في الثانية
  • دقة FP16: 7.94 متر/متر، 126 إطارًا في الثانية
  • الدقة INT8: 5.53 متر/متر، 181 إطارًا في الثانية

تؤكد هذه المعايير على كفاءة وقدرة استخدام نماذج YOLOv8 المحسّنة TensorRT على أجهزة NVIDIA Jetson . لمزيد من التفاصيل، راجع قسم النتائج المعيارية.



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

التعليقات