TensorRT ๋ฐ DeepStream SDK๋ฅผ ์ฌ์ฉํ์ฌ NVIDIA Jetson์ ๋ฐฐํฌํฉ๋๋ค.
์ด ๊ฐ์ด๋์์๋ ํ์ต๋ ๋ชจ๋ธ์ NVIDIA Jetson ํ๋ซํผ์ ๋ฐฐํฌํ๊ณ TensorRT ๋ฐ DeepStream SDK๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ก ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์ฌ๊ธฐ์๋ TensorRT ์ ์ฌ์ฉํ์ฌ Jetson ํ๋ซํผ์์ ์ถ๋ก ์ฑ๋ฅ์ ๊ทน๋ํํฉ๋๋ค.
ํ๋์จ์ด ๊ฒ์ฆ
์ด ๊ฐ์ด๋๋ ๋ค์ Jetson ์ฅ์น์์ ํ ์คํธ ๋ฐ ๊ฒ์ฆ๋์์ต๋๋ค.
- ์ ฏ์จ ๋๋ ธ ๋ชจ๋๋ก ๊ตฌ์ถ๋ ์ฌ์ปดํจํฐ J1010์ ๋ณด์์ต๋๋ค.
- ์ ฏ์จ ์๋น์ NX ๋ชจ๋๋ก ๊ตฌ์ถ๋ ์ฌ์ปดํจํฐ J2021์ ๋ณด์์ต๋๋ค.
์์ํ๊ธฐ ์ ์
์ฌ๊ธฐ์๋ ์ด ๊ฐ์ด๋์ ํ์ํ CUDA, TensorRT ๋ฐ DeepStream SDK๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก Jetson ์ฅ์น์ ๋ชจ๋ SDK ๊ตฌ์ฑ ์์ ๋ฐ DeepStream SDK์ ํจ๊ป JetPack SDK๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์นํ๋์ง ํ์ธํฉ๋๋ค.
JetPack SDK๋ ํ๋์จ์ด ๊ฐ์ AI ์ฃ์ง ๊ฐ๋ฐ์ ์ํ ์๋ฒฝํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋ Jetson ๋ชจ๋ ๋ฐ ๊ฐ๋ฐ์ ํคํธ๋ JetPack SDK์์ ์ง์๋ฉ๋๋ค.
์ค์น ๋ฐฉ๋ฒ์๋ ํฌ๊ฒ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค,
- SD ์นด๋ ์ด๋ฏธ์ง ๋ฐฉ๋ฒ
- NVIDIA SDK ๊ด๋ฆฌ์ ๋ฐฉ๋ฒ
NVIDIA ๊ณต์ ์น์ฌ์ดํธ์์ ๋งค์ฐ ์์ธํ ์ค์น ๊ฐ์ด๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์์์ ์ธ๊ธํ ์ฌ์ปดํจํฐ J1010 ๋ฐ ์ฌ์ปดํจํฐ J2021์ ํด๋นํ๋ ๊ฐ์ด๋๋ ์ฐพ์ ์ ์์ต๋๋ค.
ํ์ํ ํจํค์ง ์ค์น
- 1๋จ๊ณ. Jetson ์ฅ์น์ ํฐ๋ฏธ๋์ ์ก์ธ์คํ์ฌ pip๋ฅผ ์ค์นํ๊ณ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค.
- 2๋จ๊ณ. ๋ค์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํฉ๋๋ค.
- 3๋จ๊ณ ์๊ตฌ ์ฌํญ.txt ์ด๊ธฐ
- 5๋จ๊ณ. ๋ค์ ์ค์ ํธ์งํฉ๋๋ค. ์ฌ๊ธฐ์ ๋จผ์ i๋ฅผ ๋๋ฌ ํธ์ง ๋ชจ๋๋ก ๋ค์ด๊ฐ์ผ ํฉ๋๋ค. ESC๋ฅผ ๋๋ฅธ ๋ค์ :wq๋ฅผ ์ ๋ ฅํ์ฌ ์ ์ฅํ๊ณ ์ข ๋ฃํฉ๋๋ค.
์ฐธ๊ณ : torch ๋ฐ torchvision์ ๋์ค์ ์ค์น๋ ์์ ์ด๋ฏ๋ก ์ง๊ธ์ ์ ์ธ๋ฉ๋๋ค.
- 6๋จ๊ณ. ์๋ ์ข ์์ฑ ์ค์น
- 7๋จ๊ณ. ํ์ํ ํจํค์ง ์ค์น
PyTorch ๋ฐ ํ ์น๋น์ ์ค์น
PyTorch ๋ฐ Torchvision์ ARM aarch64 ์ํคํ ์ฒ ๊ธฐ๋ฐ์ Jetson ํ๋ซํผ์์ ์คํํ๊ธฐ ์ํด ํธํ๋์ง ์์ผ๋ฏ๋ก pip์์ ์ค์นํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฏธ๋ฆฌ ๋น๋๋ PyTorch pip ํ ์ ์๋์ผ๋ก ์ค์นํ๊ณ ์์ค์์ Torchvision์ ์ปดํ์ผ/์ค์นํด์ผ ํฉ๋๋ค.
์ด ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์ฌ PyTorch ๋ฐ ํ ์น๋น์ ๋งํฌ์ ๋ชจ๋ ์ก์ธ์คํ์ธ์.
JetPack 4.6 ์ด์์์ ์ง์๋๋ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
PyTorch v1.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)์์ ์ง์ Python 3.6
- file_name: torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- URL: https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl
PyTorch v1.12.0
์ ฏํฉ 5.0(L4T R34.1.0)/์ ฏํฉ 5.0.1(L4T R34.1.1)/์ ฏํฉ 5.0.2(L4T R35.1.0)์์ ์ง์ Python 3.8
- file_name: torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
-
1๋จ๊ณ. JetPack ๋ฒ์ ์ ๋ฐ๋ผ ๋ค์ ํ์์ผ๋ก torch ์ ์ค์นํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๊ธฐ์๋ 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๋จ๊ณ. ์ค์นํ 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
๋ค์์ PyTorch ๋ฒ์ ์ ๋ฐ๋ผ ์ค์นํด์ผ ํ๋ ํด๋น ํ ์น๋น์ ๋ฒ์ ๋ชฉ๋ก์ ๋๋ค:
- PyTorch v1.10 - ํ ์น๋น์ V0.11.1
- PyTorch v1.12 - ํ ์น๋น์ V0.13.0
๋ฅ์คํธ๋ฆผ ๊ตฌ์ฑ YOLOv5
- 1๋จ๊ณ. ๋ค์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํฉ๋๋ค.
- 2๋จ๊ณ. DeepStream-Yolo /utils์์ gen_wts_yoloV5.py๋ฅผ ๋ค์ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํฉ๋๋ค. yolov5 ๋๋ ํ ๋ฆฌ
- 3๋จ๊ณ. yolov5 ๋ฆฌํฌ์งํ ๋ฆฌ ๋ด์์ YOLOv5 ๋ฆด๋ฆฌ์ค์์ pt ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค(์: YOLOv5s 6.1).
- 4๋จ๊ณ. cfg ๋ฐ wts ํ์ผ ์์ฑํ๊ธฐ
์ฐธ๊ณ : ์ถ๋ก ํฌ๊ธฐ ๋ณ๊ฒฝํ๊ธฐ(๊ธฐ๋ณธ๊ฐ: 640)
- 5๋จ๊ณ. ์์ฑ๋ cfg ๋ฐ wts ํ์ผ์ DeepStream-Yolo ํด๋์ ๋ณต์ฌํฉ๋๋ค.
- 6๋จ๊ณ. DeepStream-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 ํ์ผ์ ํธ์งํฉ๋๋ค.
- 8๋จ๊ณ. deepstream_app_config ํ์ผ์ ํธ์งํฉ๋๋ค.
- 9๋จ๊ณ. deepstream_app_config ํ์ผ์์ ๋น๋์ค ์์ค๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ์๋์์ ๋ณผ ์ ์๋ฏ์ด ๊ธฐ๋ณธ ๋น๋์ค ํ์ผ์ด ๋ก๋๋ฉ๋๋ค.
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
์ถ๋ก ์คํ
์์ ๊ฒฐ๊ณผ๋ FP32 ๋ฐ YOLOv5s 640x640์ Jetson Xavier NX์์ ์คํํ ๊ฒฐ๊ณผ์ ๋๋ค. FPS๊ฐ 30 ์ ๋์์ ์ ์ ์์ต๋๋ค.
INT8 ๋ณด์
์ถ๋ก ์ INT8 ์ ๋ฐ๋๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
- 1๋จ๊ณ. OpenCV ์ค์น
- 2๋จ๊ณ. OpenCV๋ฅผ ์ง์ํ๋ 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์ ๋ค์ด๋ก๋ํ๊ณ ์์ถ์ ํผ ํ DeepStream-Yolo ํด๋๋ก ์ด๋ํฉ๋๋ค.
-
4๋จ๊ณ. ๋ณด์ ์ด๋ฏธ์ง๋ฅผ ์ํ ์ ๋๋ ํฐ๋ฆฌ ๋ง๋ค๊ธฐ
- 5๋จ๊ณ. ๋ค์์ ์คํํ์ฌ COCO ๋ฐ์ดํฐ ์ธํธ์์ 1000๊ฐ์ ๋ฌด์์ ์ด๋ฏธ์ง๋ฅผ ์ ํํ์ฌ ๋ณด์ ์ ์คํํฉ๋๋ค.
์ฐธ๊ณ : NVIDIA๋ ์ข์ ์ ํ๋๋ฅผ ์ป์ผ๋ ค๋ฉด ์ต์ 500๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์ด ์์ ์์๋ ๋ ๋์ ์ ํ๋๋ฅผ ์ป๊ธฐ ์ํด 1000๊ฐ์ ์ด๋ฏธ์ง๊ฐ ์ ํ๋์์ต๋๋ค(์ด๋ฏธ์ง๊ฐ ๋ง์์๋ก ์ ํ๋๊ฐ ๋์์ง). INT8_CALIB_BATCH_SIZE ๊ฐ์ด ๋์์๋ก ์ ํ๋๊ฐ ๋์์ง๊ณ ๋ณด์ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค. GPU ๋ฉ๋ชจ๋ฆฌ์ ๋ง๊ฒ ์ค์ ํ์ธ์. ํค๋ -1000๋ถํฐ ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ฏธ์ง๊ฐ 2000๊ฐ์ธ ๊ฒฝ์ฐ -2000์ ์ค์ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
- 6๋จ๊ณ. ์ ํํ ๋ชจ๋ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋ calibration.txt ํ์ผ์ ๋ง๋ญ๋๋ค.
- 7๋จ๊ณ. ํ๊ฒฝ ๋ณ์ ์ค์
- 8๋จ๊ณ. config_infer_primary_yoloV5.txt ํ์ผ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์์
To
- 9๋จ๊ณ. ์ถ๋ก ์คํ
์์ ๊ฒฐ๊ณผ๋ INT8 ๋ฐ YOLOv5s 640x640์ผ๋ก Jetson Xavier NX์์ ์คํํ ๊ฒฐ๊ณผ์ ๋๋ค. FPS๊ฐ 60 ์ ๋์์ ์ ์ ์์ต๋๋ค.
๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ
๋ค์ ํ์๋ Jetson Xavier NX์์ ๋ค์ํ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ์์ฝ๋์ด ์์ต๋๋ค.
๋ชจ๋ธ ์ด๋ฆ | ์ ๋ฐ๋ | ์ถ๋ก ํฌ๊ธฐ | ์ถ๋ก ์๊ฐ(ms) | FPS |
---|---|---|---|---|
YOLOv5s | FP32 | 320x320 | 16.66 | 60 |
FP32 | 640x640 | 33.33 | 30 | |
INT8 | 640x640 | 16.66 | 60 | |
YOLOv5n | FP32 | 640x640 | 16.66 | 60 |
์ถ๊ฐ
์ด ํํ ๋ฆฌ์ผ์ @lakshanthad์ Elaine์ ์น๊ตฌ๋ค์ด ์์ฑํ์ต๋๋ค.