Jetson Nano에서 YOLOv5 사용 전 준비할 것들
Jetson Nano에 JetPack 4.6 + 필수 SW 설치
OpenCV CUDA 가속 활성화로 젯슨 나노 100% 활용하기(간단)
Jetson Nano에서 YOLOv5 실행하기(0.13s, 7.7fps)
서론
이전 포스팅에서 Jetson Nano 환경에서 YOLOv5를 돌리기 위해 JetPack 4.6, jetson-stats를 설치했습니다. 이후 jtop을 통해 설치된 SW를 확인해 보면 OpenCV 4.1.1이 설치되어 있는 것을 볼 수 있습니다. 저희가 직접 설치하지는 않았지만 OpenCV는 JetPack 안에 포함되어 있었습니다. 여기서 CUDA를 사용하기 위해 굳이 Jetson Nano를 샀는데, compiled CUDA 항목에는 No라고 표시되어 있습니다. 이러면 CUDA 사용이 제한됩니다. 게다가 YOLOv5에는 OpenCV 4.1.2 이상을 필요로 합니다. 이번 포스팅에서는 OpenCV 4.5.4 with CUDA를 설치해 Jetson Nano의 성능을 100% 활용할 수 있는 기초를 만들어보도록 하겠습니다.
사전 준비사항
마음의 준비 | 이 과정은 OpenCV를 그냥 다운 받아 설치하는 게 아니라 CMake로 Jetson Nano 환경의 aarch64 아키텍처에 맞게 빌드하는 과정입니다. Jetson Nano에서만 진행할 수 있는 작업이라 완료까지 2.5시간 정도 소요됩니다. 제 경우는 중간에 암호 입력 창이 떠서 잠시 중단되었었는데 이런 문제를 해결하기 위해 root 계정으로 시도한 후 외출했다 돌아오시면 설치가 다 되어 있을 듯 합니다.
Swap공간 설정 | 하나의 프로그램을 빌드하는 과정이기에, Jetson Nano의 RAM만으로는 충당이 되지 않습니다. openCV 전체 빌드에는 약 8.5GB이상의 램이 필요합니다. RAM 업그레이드는 불가능하니 여기에서는 microSD에 Swap 공간을 할당하여 사용합니다.
혹시 모를 오류 대비 | 이 글은 (2021. 11. 01.)에 최초 작성되었으며, Q-Engineering 블로그의 글을 기반으로 합니다. 기술 문서 특성상 변동이 있을 수 있으니 문제 발생 시 원문을 참조하시기 바랍니다.
Swap공간 설정하기
다음과 같은 내용으로 스왑 파일 내의 값을 업데이트합니다. 모든 것이 완료되어 재부팅된 후, 터미널에서 free -m 명령어를 입력했을 때, swap공간이 6074정도로 나오면 성공입니다.
## 복붙의 편의성을 위해 $를 생략합니다.
# 업데이트를 확인합니다. 이전 포스팅에서 이미 이걸 했다면, 굳이 하지 않아도 좋습니다.
sudo apt-get update
sudo apt-get upgrade
# nano 에디터를 설치합니다. 이미 설치했다면, 굳이 하지 않아도 좋습니다.
sudo apt-get install nano
# dphys-swapfile을 설치합니다.
sudo apt-get install dphys-swapfile
## 두 Swap파일의 값이 다음과 같도록 값을 추가하거나, 파일 내 주석을 해제합니다.
# CONF_SWAPSIZE=4096
# CONF_SWAPFACTOR=2
# CONF_MAXSWAP=4096
# /sbin/dphys-swapfile를 엽니다.
sudo nano /sbin/dphys-swapfile
# 값을 수정한 후 [Ctrl] + [X], [y], [Enter]를 눌러 저장하고 닫습니다
# /etc/dphys-swapfile를 편집합니다.
sudo nano /etc/dphys-swapfile
# 값을 수정한 후 [Ctrl] + [X], [y], [Enter]를 눌러 저장하고 닫습니다
# Jetson Nano 재부팅
sudo reboot
OpenCV 4.5.4 with CUDA
원문에서는 Jetson Nano에 OpenCV 설치하는 것을 다음과 같이 설명하고 있습니다.
Jetson Nano에 OpenCV 설치? 그렇게 어렵지 않다. 명령어 68줄만 입력하면 된다. 그래서 모든 걸 한 번에 끝낼 스크립트 작성해놨으니 필요하면 쓰세요~!
wget https://github.com/Qengineering/Install-OpenCV-Jetson-Nano/raw/main/OpenCV-4-5-4.sh
sudo chmod 755 ./OpenCV-4-5-4.sh
./OpenCV-4-5-4.sh
위트있는 미국식 유머에 무릎을 탁! 치고 가면서 감사한 마음으로 위의 명령어를 순서대로 입력하면 OpenCV 설치는 끝납니다. 처음에 dependecies를 설치하고, 마지막에 ldconfigs 관련 내용이 나오면 성공적으로 설치가 완료되는 겁니다. 이후 SD카드 공간 확보와 스왑 공간 해제를 위해 다음의 명령을 추가로 수행할 수 있습니다. 저는 굳이 하지 않았습니다.
rm OpenCV-4-5-4.sh
# Swap 제거
sudo /etc/init.d/dphys-swapfile stop
sudo apt-get remove --purge dphys-swapfile
# 275MB 추가 SD공간 확보를 원한다면
sudo rm -rf ~/opencv
sudo rm -rf ~/opencv_contrib
PyTorch 1.8 + torchvision v0.9.0
YOLOv5를 위해 이 긴 길을 걸어왔습니다. 이제 pytorch와 torchvision을 설치하고 YOLOv5에 필요한 requirements만 설치하면 모든 게 다 끝납니다.
# PyTorch 1.8.0 다운로드 및 dependencies 설치
wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whl
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
# Cython, numpy, pytorch 설치
pip3 install Cython
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl
# torchvision dependencies 설치
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.9.0
python3 setup.py install --user
cd ../ # attempting to load torchvision from build dir will result in import error
Done!
위의 과정을 잘 따라오셨다면 jetson-stats에서 OpenCV가 4.5.4 with CUDA로 표시되고, Python에서는 PyTorch가 정상적으로 설치된 것을 확인할 수 있습니다. 다음 포스팅에서는 YOLOv5를 설치해 image와 웹캠, YouTube video에서의 Inference를 수행해보도록 하겠습니다.
+ iPhone을 사용하시는 경우 iDetection 앱을 통해 YOLOv5에 대한 inference를 간접적으로 확인해볼 수 있습니다. 쉬어가는 의미에서 한 번 테스트해보는 것 추천드립니다. 이 성능을 보고 있으면 앱등이에서 벗어날 수가 없습니다.
(iPhone 13 Pro + YOLOv5s에서 평균 30fps, 30ms inference time per image)
긴 글 읽어주셔서 감사합니다. ❤️와 광고 클릭으로 고마움을 간단히 표현할 수 있습니다.
개발환경 | Mac OS 15.0 Monterey, Python 3.9, ESP-IDF v4.3, EasyEDA 6.4.24
개발환경(Jetson Nano) | JetPack 4.6[L4T 32.6.1], Python 3.6.9, PyTorch 1.8.0, torchvision 0.9.0, OpenCV 4.5.4 with CUDA
제품 개발 및 기타 문의 | dokixote@wklabs.io 혹은 오른쪽 아래 채팅을 통해 문의