सामग्री पर जाएं

NVIDIA Jetson का उपयोग करके तैनात करें TensorRT और डीपस्ट्रीम एसडीके

📚 यह मार्गदर्शिका बताती है कि एक प्रशिक्षित मॉडल को NVIDIA Jetson प्लेटफ़ॉर्म में कैसे तैनात किया जाए और इसका उपयोग करके अनुमान लगाया जाए TensorRT और डीपस्ट्रीम एसडीके। यहाँ हम उपयोग करते हैं TensorRT जेटसन प्लेटफॉर्म पर अनुमान प्रदर्शन को अधिकतम करने के लिए।

हार्डवेयर सत्यापन

हमने निम्नलिखित जेटसन उपकरणों पर इस गाइड का परीक्षण और सत्यापन किया है

शुरू करने से पहले

सुनिश्चित करें कि आपने Jetson डिवाइस पर सभी SDK घटकों और DeepStream SDK के साथ JetPack SDK को ठीक से स्थापित किया है क्योंकि इसमें CUDA शामिल है,TensorRT और डीपस्ट्रीम एसडीके जो इस गाइड के लिए आवश्यक हैं।

JetPack SDK हार्डवेयर-त्वरित AI-at-the-edge विकास के लिए एक पूर्ण विकास वातावरण प्रदान करता है। सभी जेटसन मॉड्यूल और डेवलपर किट जेटपैक एसडीके द्वारा समर्थित हैं।

दो प्रमुख स्थापना विधियां हैं, जिनमें शामिल हैं,

  1. एसडी कार्ड छवि विधि
  2. NVIDIA SDK प्रबंधक विधि

आप NVIDIA आधिकारिक वेबसाइट से एक बहुत विस्तृत इंस्टॉलेशन गाइड पा सकते हैं। आप उपर्युक्त reComputer J1010 और reComputer J2021 के अनुरूप गाइड भी पा सकते हैं

आवश्यक पैकेज स्थापित करें

  • चरण 1. जेटसन डिवाइस के टर्मिनल तक पहुंचें, पाइप स्थापित करें और इसे अपग्रेड करें
sudo apt update
sudo apt install -y python3-pip
pip3 install --upgrade pip
  • चरण 2. निम्नलिखित रेपो को क्लोन करें
git clone https://github.com/ultralytics/yolov5
  • चरण 3. खुली आवश्यकताएं.txt
cd yolov5
vi requirements.txt
  • चरण 5. निम्न पंक्तियों को संपादित करें। यहां आपको एडिटिंग मोड में प्रवेश करने के लिए पहले i दबाना होगा। ESC दबाएँ, फिर सहेजने और बाहर निकलने के लिए :wq लिखें
# torch>=1.8.0
# torchvision>=0.9.0

नोट: torch और मशाल विजन को अभी के लिए बाहर रखा गया है क्योंकि उन्हें बाद में स्थापित किया जाएगा।

  • चरण 6. नीचे निर्भरता स्थापित करें
sudo apt install -y libfreetype6-dev
  • चरण 7. आवश्यक पैकेज स्थापित करें
pip3 install -r requirements.txt

पदासीन करना PyTorch और मशाल दृष्टि

हम स्थापित नहीं कर सकते PyTorch और पाइप से टॉर्चविजन क्योंकि वे जेटसन प्लेटफॉर्म पर चलने के लिए संगत नहीं हैं जो एआरएम aarch64 आर्किटेक्चर पर आधारित है। इसलिए, हमें पूर्व-निर्मित मैन्युअल रूप से स्थापित करने की आवश्यकता है PyTorch पाइप व्हील और स्रोत से मशाल विजन संकलन/स्थापित करें।

सभी तक पहुंचने के लिए इस पृष्ठ पर जाएं PyTorch और मशाल लिंक

जेटपैक 4.6 और इसके बाद के संस्करण द्वारा समर्थित कुछ संस्करण यहां दिए गए हैं।

PyTorch v1.10.0 के अनुसार

जेटपैक 4.4 (L4T R32.4.3) / जेटपैक 4.4.1 (L4T R32.4.4) / जेटपैक 4.5 (L4T R32.5.0) / जेटपैक 4.5.1 (L4T R32.5.1) / जेटपैक 4.6 (L4T R32.6.1) द्वारा समर्थित Python 3.6

PyTorch v1.12.0 के अनुसार

जेटपैक 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 v1.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, जिसका अर्थ है, हमें टॉर्चविजन 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

यहां संबंधित टॉर्चविजन संस्करण की एक सूची है जिसे आपको के अनुसार स्थापित करने की आवश्यकता है PyTorch विवरण:

  • PyTorch v1.10 - मशाल v0.11.1
  • PyTorch v1.12 - मशाल v0.13.0

DeepStream Configuration for YOLOv5

  • चरण 1. निम्नलिखित रेपो को क्लोन करें
cd ~
git clone https://github.com/marcoslucianops/DeepStream-Yolo
  • चरण 2. से gen_wts_yoloV5.py कॉपी करें डीपस्ट्रीम-Yolo/utils में yolov5 डायरेक्टरी
cp DeepStream-Yolo/utils/gen_wts_yoloV5.py yolov5
  • चरण 3. अंदर yolov5 रेपो, पीटी फ़ाइल को यहां से डाउनलोड करें 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 सह चालत आहे. हम देख सकते हैं कि एफपीएस लगभग 30 है।

INT8 अंशांकन

यदि आप अनुमान के लिए INT8 परिशुद्धता का उपयोग करना चाहते हैं, तो आपको नीचे दिए गए चरणों का पालन करना होगा

  • चरण 1. ओपनसीवी स्थापित करें
sudo apt-get install libopencv-dev
  • चरण 2. ओपनसीवी समर्थन के साथ nvdsinfer_custom_impl_Yolo लाइब्रेरी को संकलित/पुन: संकलित करें
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. अंशांकन चलाने के लिए COCO डेटासेट से 1000 यादृच्छिक छवियों का चयन करने के लिए निम्न चलाएँ
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. सभी चयनित छवियों के साथ अंशांकन.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 के साथ चल रहा है। हम देख सकते हैं कि एफपीएस लगभग 60 है।

बेंचमार्क परिणाम

निम्न तालिका सारांशित करती है कि Jetson Xavier NX पर विभिन्न मॉडल कैसा प्रदर्शन करते हैं।

मॉडल का नाम यथार्थता अनुमान का आकार अनुमान समय (ms) एफपीएस
योलोव5एस एफपी32 320x320 16.66 60
एफपी32 640x640 33.33 30
INT8 640x640 16.66 60
योलोव5एन एफपी32 640x640 16.66 60

अतिरिक्त

यह ट्यूटोरियल हमारे दोस्तों द्वारा सीड @lakshanthad और ऐलेन में लिखा गया है



2023-11-12 बनाया गया, अपडेट किया गया 2024-01-07
लेखक: ग्लेन-जोचर (5)

टिप्पणियाँ