Bỏ để qua phần nội dung

Triển khai trên NVIDIA Jetson bằng cách sử dụng TensorRT và SDK DeepStream

📚 Hướng dẫn này giải thích cách triển khai mô hình đã đào tạo vào Nền tảng NVIDIA Jetson và thực hiện suy luận bằng cách sử dụng TensorRT và SDK DeepStream. Ở đây chúng tôi sử dụng TensorRT để tối đa hóa hiệu suất suy luận trên nền tảng Jetson.

Xác minh phần cứng

Chúng tôi đã thử nghiệm và xác minh hướng dẫn này trên các thiết bị Jetson sau

Trước khi bắt đầu

Đảm bảo bạn đã cài đặt đúng cách SDK JetPack với tất cả các Thành phần SDKSDK DeepStream trên thiết bị Jetson vì điều này bao gồm CUDA, TensorRT và SDK DeepStream cần thiết cho hướng dẫn này.

JetPack SDK cung cấp một môi trường phát triển đầy đủ để phát triển AI tại biên được tăng tốc phần cứng. Tất cả các mô-đun Jetson và bộ công cụ dành cho nhà phát triển đều được hỗ trợ bởi JetPack SDK.

Có hai phương pháp cài đặt chính bao gồm,

  1. Phương pháp hình ảnh thẻ SD
  2. Phương pháp NVIDIA SDK Manager

Bạn có thể tìm thấy hướng dẫn cài đặt rất chi tiết từ trang web chính thức của NVIDIA. Bạn cũng có thể tìm thấy các hướng dẫn tương ứng với reComputer J1010reComputer J2021 đã đề cập ở trên.

Cài đặt các gói cần thiết

  • Bước 1. Truy cập thiết bị đầu cuối của thiết bị Jetson, cài đặt pip và nâng cấp nó
sudo apt update
sudo apt install -y python3-pip
pip3 install --upgrade pip
  • Bước 2. Sao chép repo sau
git clone https://github.com/ultralytics/yolov5
  • Bước 3. Mở requirements.txt
cd yolov5
vi requirements.txt
  • Bước 5. Chỉnh sửa các dòng sau. Ở đây bạn cần nhấn i trước để vào chế độ chỉnh sửa. Nhấn ESC, sau đó gõ : wq để lưu và thoát
# torch>=1.8.0
# torchvision>=0.9.0

Ghi: torch Và Torchvision hiện đang bị loại trừ vì chúng sẽ được cài đặt sau.

  • Bước 6. Cài đặt phụ thuộc bên dưới
sudo apt install -y libfreetype6-dev
  • Bước 7. Cài đặt các gói cần thiết
pip3 install -r requirements.txt

Cài đặt PyTorch và Torchvision

Chúng tôi không thể cài đặt PyTorch và Torchvision từ pip vì chúng không tương thích để chạy trên nền tảng Jetson dựa trên kiến trúc ARM aarch64. Do đó, chúng ta cần cài đặt thủ công dựng sẵn PyTorch bánh xe pip và biên dịch / cài đặt Torchvision từ nguồn.

Truy cập trang này để truy cập tất cả các PyTorch và các liên kết Torchvision.

Dưới đây là một số phiên bản được hỗ trợ bởi JetPack 4.6 trở lên.

PyTorch v1.10.0

Được hỗ trợ bởi 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) với Python 3.6

PyTorch v1.12.0

Được hỗ trợ bởi JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0) với Python 3.8

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

Ví dụ: ở đây chúng tôi đang chạy JP4.6.1 và do đó chúng tôi chọn 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
  • Bước 2. Cài đặt torchvision tùy thuộc vào phiên bản của PyTorch mà bạn đã cài đặt. Ví dụ, chúng tôi đã chọn PyTorch v1.10.0, có nghĩa là, chúng ta cần chọn 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

Dưới đây là danh sách các phiên bản torchvision tương ứng mà bạn cần cài đặt theo PyTorch Phiên bản:

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

Cấu hình DeepStream cho YOLOv5

  • Bước 1. Sao chép repo sau
cd ~
git clone https://github.com/marcoslucianops/DeepStream-Yolo
  • Bước 2. Sao chép gen_wts_yoloV5.py từ DeepStream-Yolo/utils vào yolov5 thư mục
cp DeepStream-Yolo/utils/gen_wts_yoloV5.py yolov5
  • Bước 3. Bên trong yolov5 repo, tải xuống tệp pt từ YOLOv5 bản phát hành (ví dụ cho YOLOv5s 6.1)
cd yolov5
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt
  • Bước 4. Tạo tệp cfgwts
python3 gen_wts_yoloV5.py -w yolov5s.pt

Lưu ý: Để thay đổi kích thước suy luận (mặc định: 640)

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

Example for 1280:

-s 1280
or
-s 1280 1280
  • Bước 5. Sao chép các tệp cfgwts đã tạo vào DeepStream-Yolo thư mục
cp yolov5s.cfg ~/DeepStream-Yolo
cp yolov5s.wts ~/DeepStream-Yolo
  • Bước 6. Mở nút DeepStream-Yolo Thư mục và biên dịch thư viện
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
  • Bước 7. Chỉnh sửa tệp config_infer_primary_yoloV5.txt theo mô hình của bạn
[property]
...
custom-network-config=yolov5s.cfg
model-file=yolov5s.wts
...
  • Bước 8. Chỉnh sửa tệp deepstream_app_config
...
[primary-gie]
...
config-file=config_infer_primary_yoloV5.txt
  • Bước 9. Thay đổi nguồn video trong tệp deepstream_app_config . Ở đây một tệp video mặc định được tải như bạn có thể thấy bên dưới
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

Chạy suy luận

deepstream-app -c deepstream_app_config.txt
YOLOv5 với FP32 deepstream

Kết quả trên là chạy trên Jetson Xavier NX với FP32YOLOv5s 640x640. Chúng ta có thể thấy rằng FPS là khoảng 30.

Hiệu chuẩn INT8

Nếu bạn muốn sử dụng độ chính xác INT8 để suy luận, bạn cần làm theo các bước dưới đây

  • Bước 1. Cài đặt OpenCV
sudo apt-get install libopencv-dev
  • Bước 2. Biên dịch / biên dịch lại thư viện nvdsinfer_custom_impl_Yolo với sự hỗ trợ 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
  • Bước 3. Đối với tập dữ liệu COCO, tải xuống val2017, giải nén và chuyển sang DeepStream-Yolo thư mục

  • Bước 4. Tạo một thư mục mới cho hình ảnh hiệu chuẩn

mkdir calibration
  • Bước 5. Chạy như sau để chọn 1000 hình ảnh ngẫu nhiên từ tập dữ liệu COCO để chạy hiệu chuẩn
for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do \
    cp ${jpg} calibration/; \
done

Ghi: NVIDIA khuyến nghị ít nhất 500 hình ảnh để có được độ chính xác tốt. Trong ví dụ này, 1000 hình ảnh được chọn để có độ chính xác tốt hơn (nhiều hình ảnh hơn = độ chính xác cao hơn). Giá trị INT8_CALIB_BATCH_SIZE cao hơn sẽ dẫn đến độ chính xác cao hơn và tốc độ hiệu chuẩn nhanh hơn. Đặt nó theo bộ nhớ GPU của bạn. Bạn có thể đặt nó từ đầu -1000. Ví dụ: đối với 2000 hình ảnh, đầu -2000. Quá trình này có thể mất nhiều thời gian.

  • Bước 6. Tạo tệp calibration.txt với tất cả các hình ảnh đã chọn
realpath calibration/*jpg > calibration.txt
  • Bước 7. Đặt biến môi trường
export INT8_CALIB_IMG_PATH=calibration.txt
export INT8_CALIB_BATCH_SIZE=1
  • Bước 8. Cập nhật tệp config_infer_primary_yoloV5.txt

Từ

...
model-engine-file=model_b1_gpu0_fp32.engine
#int8-calib-file=calib.table
...
network-mode=0
...

Đến

...
model-engine-file=model_b1_gpu0_int8.engine
int8-calib-file=calib.table
...
network-mode=1
...
  • Bước 9. Chạy suy luận
deepstream-app -c deepstream_app_config.txt
YOLOv5 với deepstream INT8

Kết quả trên là chạy trên Jetson Xavier NX với INT8YOLOv5s 640x640. Chúng ta có thể thấy rằng FPS là khoảng 60.

Kết quả điểm chuẩn

Bảng sau đây tóm tắt cách các mô hình khác nhau hoạt động trên Jetson Xavier NX.

Tên Model Chính xác Kích thước suy luận Thời gian suy luận (ms) FPS
YOLOv5s FP32 320x320 16.66 60
FP32 640x640 33.33 30
INT8 640x640 16.66 60
YOLOv5n FP32 640x640 16.66 60

Bổ sung

Hướng dẫn này được viết bởi bạn bè của chúng tôi tại seeed @lakshanthad và Elaine



Đã tạo 2023-11-12, Cập nhật 2024-01-07
Tác giả: glenn-jocher (5)

Ý kiến