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

النشر على NVIDIA Jetson باستخدام TensorRT و DeepStream SDK

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

التحقق من الأجهزة

لقد اختبرنا هذا الدليل وتحققنا منه على أجهزة Jetson التالية

قبل البدء

تأكد من تثبيت JetPack SDK بشكل صحيح مع جميع مكونات SDK و DeepStream SDK على جهاز Jetson لأن هذا يتضمن CUDA ، TensorRT و DeepStream SDK اللازمة لهذا الدليل.

يوفر JetPack SDK بيئة تطوير كاملة لتطوير الذكاء الاصطناعي المتطورة المسرع للأجهزة. يتم دعم جميع وحدات Jetson ومجموعات المطورين بواسطة JetPack SDK.

هناك طريقتان رئيسيتان للتثبيت بما في ذلك ،

  1. طريقة صورة بطاقة SD
  2. طريقة إدارة NVIDIA SDK

يمكنك العثور على دليل تثبيت مفصل للغاية من موقع NVIDIA الرسمي. يمكنك أيضا العثور على أدلة تتوافق مع إعادة الكمبيوتر J1010 و reComputer J2021 المذكورة أعلاه.

تثبيت الحزم الضرورية

  • الخطوة 1. الوصول إلى محطة جهاز Jetson ، وتثبيت النقطة وترقيتها
sudo apt update
sudo apt install -y python3-pip
pip3 install --upgrade pip
  • الخطوة 2. استنساخ الريبو التالي
git clone https://github.com/ultralytics/yolov5
  • الخطوه 3. فتح requirements.txt
cd yolov5
vi requirements.txt
  • الخطوة 5. قم بتحرير الأسطر التالية. هنا تحتاج إلى الضغط على i أولا للدخول إلى وضع التحرير. اضغط على ESC ، ثم اكتب : wq للحفظ والإنهاء
# torch>=1.8.0
# torchvision>=0.9.0

ملاحظه: torch ويتم استبعاد Torchvision في الوقت الحالي لأنه سيتم تثبيتها لاحقا.

  • الخطوة 6. تثبيت التبعية أدناه
sudo apt install -y libfreetype6-dev
  • الخطوة 7. تثبيت الحزم اللازمة
pip3 install -r requirements.txt

أقام PyTorch و Torchvision

لا يمكننا التثبيت PyTorch و Torchvision من النقطة لأنها غير متوافقة للتشغيل على منصة Jetson التي تعتمد على بنية ARM aarch64. لذلك ، نحتاج إلى تثبيت يدويا مسبق الصنع PyTorch عجلة نقطة وتجميع / تثبيت Torchvision من المصدر.

قم بزيارة هذه الصفحة للوصول إلى جميع PyTorch وروابط Torchvision.

فيما يلي بعض الإصدارات التي يدعمها JetPack 4.6 والإصدارات الأحدث.

PyTorch الإصدار 1.10.0

بدعم من JetPack 4.4 (L4T R32.4.3) / JetPack 4.4.1 (L4T R32.4.4) / JetPack 4.5 (L4T R32.5.0) / JetPack 4.5.1 (L4T R32.5.1) / JetPack 4.6 (L4T R32.6.1) مع Python 3.6

PyTorch الإصدار 1.12.0

بدعم من JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0) مع Python 3.8

wget <URL> -O <file_name>
pip3 install <file_name>

على سبيل المثال ، نحن هنا نقوم بتشغيل JP4.6.1 ، وبالتالي نختار PyTorch الإصدار 1.10.0

cd ~
sudo apt-get install -y libopenblas-base libopenmpi-dev
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
  • الخطوة 2. تثبيت torchvision اعتمادا على إصدار PyTorch التي قمت بتثبيتها. على سبيل المثال ، اخترنا PyTorch v1.10.0 ، مما يعني أننا بحاجة إلى اختيار Torchvision v0.11.1
sudo apt install -y libjpeg-dev zlib1g-dev
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
sudo python3 setup.py install

فيما يلي قائمة بإصدار torchvision المقابل الذي تحتاج إلى تثبيته وفقا ل PyTorch الإصدار:

  • PyTorch v1.10 - Torchvision v0.11.1
  • PyTorch v1.12 -- Torchvision v0.13.0

تكوين DeepStream ل YOLOv5

  • الخطوة 1. استنساخ الريبو التالي
cd ~
git clone https://github.com/marcoslucianops/DeepStream-Yolo
  • الخطوة 2. نسخ gen_wts_yoloV5.py من ديب ستريم-Yolo/ المرافق في yolov5 دليل
cp DeepStream-Yolo/utils/gen_wts_yoloV5.py yolov5
  • الخطوه 3. داخل yolov5 الريبو ، قم بتنزيل ملف PT من YOLOv5 الإصدارات (مثال ل YOLOv5s 6.1)
cd yolov5
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt
  • الخطوة 4. إنشاء ملفات cfg و wts
python3 gen_wts_yoloV5.py -w yolov5s.pt

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

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

Example for 1280:

-s 1280
or
-s 1280 1280
  • الخطوة 5. انسخ ملفات cfg و wts التي تم إنشاؤها إلى ملف ديب ستريم-Yolo مجلد
cp yolov5s.cfg ~/DeepStream-Yolo
cp yolov5s.wts ~/DeepStream-Yolo
  • الخطوة 6. افتح الزر ديب ستريم-Yolo مجلد وتجميع المكتبة
cd ~/DeepStream-Yolo
CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.1
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.0.1 / 6.0
  • الخطوة 7. قم بتحرير ملف config_infer_primary_yoloV5.txt وفقا للطراز الخاص بك
[property]
...
custom-network-config=yolov5s.cfg
model-file=yolov5s.wts
...
  • الخطوة 8. تحرير ملف deepstream_app_config
...
[primary-gie]
...
config-file=config_infer_primary_yoloV5.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
YOLOv5 مع ديبستريم FP32

النتيجة المذكورة أعلاه تعمل على Jetson Xavier NX مع FP32 و YOLOv5s 640x640. يمكننا أن نرى أن FPS حوالي 30.

معايرة INT8

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

  • الخطوة 1. تثبيت OpenCV
sudo apt-get install libopencv-dev
  • الخطوة 2. تجميع / إعادة ترجمة مكتبة nvdsinfer_custom_impl_Yolo بدعم OpenCV
cd ~/DeepStream-Yolo
CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.1
CUDA_VER=10.2 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.0.1 / 6.0
  • الخطوه 3. بالنسبة لمجموعة بيانات COCO ، قم بتنزيل val2017 واستخراجه والانتقال إليه ديب ستريم-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 صورة للحصول على دقة أفضل (المزيد من الصور = دقة أكبر). ستؤدي قيم INT8_CALIB_BATCH_SIZE الأعلى إلى مزيد من الدقة وسرعة معايرة أسرع. اضبطه وفقا لذاكرة GPU الخاصة بك. يمكنك ضبطه من الرأس -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
  • الخطوة 8. تحديث ملف config_infer_primary_yoloV5.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
...
  • الخطوة 9. تشغيل الاستدلال
deepstream-app -c deepstream_app_config.txt
YOLOv5 مع ديبستريم INT8

النتيجة المذكورة أعلاه تعمل على Jetson Xavier NX مع INT8 و YOLOv5s 640x640. يمكننا أن نرى أن FPS حوالي 60.

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

يلخص الجدول التالي كيفية أداء الطرز المختلفة على Jetson Xavier NX.

اسم الموديل دقة حجم الاستدلال وقت الاستدلال (مللي ثانية) إطارا في الثانية
يولو v5s FP32 320x320 16.66 60
FP32 640x640 33.33 30
INT8 640x640 16.66 60
YOLOv5n FP32 640x640 16.66 60

زائد

هو مكتوب هذا البرنامج التعليمي من قبل أصدقائنا في seeed @lakshanthad وإيلين



تم النشر في 2023-11-12, اخر تحديث 2024-01-07
المؤلفون: جلين جوشر (5)

التعليقات