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
- Seeed reComputer J1010 được xây dựng với mô-đun Jetson Nano
- Seeed reComputer J2021 được xây dựng với mô-đun Jetson Xavier NX
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 SDK và SDK 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,
- Phương pháp hình ảnh thẻ SD
- 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 J1010 và reComputer 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ó
- Bước 2. Sao chép repo sau
- Bước 3. Mở 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
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
- Bước 7. Cài đặt các gói cần thiết
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
- file_name: torch-1.10.0-CP36-CP36M-linux_aarch64.whl
- Địa chỉ: https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl
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
- file_name: torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
-
Bước 1. Cài đặt torch theo phiên bản JetPack của bạn ở định dạng sau
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
- Bước 2. Sao chép gen_wts_yoloV5.py từ DeepStream-Yolo/utils vào yolov5 thư mục
- 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)
- Bước 4. Tạo tệp cfg và wts
Lưu ý: Để thay đổi kích thước suy luận (mặc định: 640)
- Bước 5. Sao chép các tệp cfg và wts đã tạo vào DeepStream-Yolo thư mục
- 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
- Bước 8. Chỉnh sửa tệp deepstream_app_config
- 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
Kết quả trên là chạy trên Jetson Xavier NX với FP32 và YOLOv5s 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
- 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
- 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
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
- Bước 7. Đặt biến môi trường
- Bước 8. Cập nhật tệp config_infer_primary_yoloV5.txt
Từ
Đến
- Bước 9. Chạy suy luận
Kết quả trên là chạy trên Jetson Xavier NX với INT8 và YOLOv5s 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