(21. 11. 01 최초 작성)
Jetson Nano에서 YOLOv5 사용 전 준비할 것들
Jetson Nano에 JetPack 4.6 + 필수 SW 설치
OpenCV CUDA 가속 활성화로 젯슨 나노 100% 활용하기(간단)
Jetson Nano에서 YOLOv5 실행하기(0.13s, 7.7fps)
서론
Jetson Nano를 처음 구입했다면, 딥러닝 예제를 돌려보는게 인지상정입니다. 그리고 그에 맞게 JetPack에서는 기본적인 Inference를 수행할 수 있는 Docker Image 가 내장되어있습니다. 그러나 이 Docker Image는 Demonstration 용도이기 때문에 이걸로 뭔가를 제대로 써먹어서 만들어보기에는 무리가 있습니다. 그래서 쓸만한 장난감 하나를 만들어보기 위해 여기에서는 Object Detection 용도로 요즘 잘 써먹고 있는 YOLO(You Only Look Once), 그것도 가장 최신버전인 v5 모델을 가지고서 쓸만한 Object Detection을 수행해보도록 하겠습니다.
여러분의 삽질 시간을 줄여주고 싶었습니다.
저는 Jetson이 처음이다 보니, Environment 세팅에 많은 시간을 들이게 되었습니다. 한 2일 정도 걸린 것 같은데, 적어도 이 글을 읽고 저같은 삽질을 하는 사람이 조금은 줄어들기를 바라는 마음으로 이 글을 작성합니다. Jetson YOLOv5를 삽질없이 실행시키기 위해 필요한 것들과, 사전 준비사항, 설치 순서를 안내하겠습니다. 이 글을 읽고, 여러분들은 저와 같은 삽질 시간을 줄여, 그 시간을 다른 삽질 하는데 사용하기를 기도하겠습니다.
Jetson Nano 환경 | JetPack 4.6, Python 3.6.9, OpenCV 4.5.4(CUDA), PyTorch 1.8.0, Torchvision v0.9.0
이 시리즈의 정독이 끝나면 위의 환경에서 YOLOv5가 정상적으로 작동하는 것을 할 수 있습니다.
Jetson Nano에서 YOLOv5 사전 준비사항
Jetson Nano가 처음이라면, 미리 준비하셔야할 게 있습니다. 이 점들을 미리 숙지하시어, 다음 내용 진행에 차질이 없도록 해야 합니다.

Jetson Nano A02, B01 | inference를 하기 위한 Jetson Nano로 A02, B01 모델을 추천합니다. 최근에 2GB RAM 제품이 10만원 이하의 가격으로 출시되었습니다. 2GB 제품이 USB-C 단자를 지원하고 가격이 저렴하다는 장점이 있지만, YOLOv5 사용에는 적합하지 않습니다. YOLOv5를 YOLOv5s weight로 A02모델에서 시연해본 결과 YOLOv5 모델만으로 2.5GB 이상의 램을 사용합니다. desktop manager 용량까지 생각하면 총 램 사용량은 3.9GB에 육박합니다. 2GB 모델에서는 기본 할당된 Swap까지 모두 사용해야 겨우 YOLOv5를 돌릴 수 있습니다. (2GB 모델로도 동작은 하지만 로딩 시간이 길고 제 성능이 안나온다는 해외 포럼의 의견도 있었습니다.)
2GB 모델을 굳이 사용하시겠다면, 두 가지 옵션이 있습니다. 그러나 컴퓨팅 파워는 좋으면 좋을수록 이득이라는 걸 염두에 두어야 합니다.
더 작은 network 사용하기 | mobilenet이나 yolov5-n 사용할 수 있습니다. 그러나 mobilenet은 정확도가 떨어지고, yolov5-nano의 존재 여부는 확실치 않습니다. custom weights를 사용하면 램 사용량이 줄어들지도 모르겠습니다.
GUI환경 제거하기 | gdm환경을 제거하고, 비디오 스트림 서버를 Jetson Nano에 구축해 Boundary Box가 Overlay된 stream을 외부 client를 통해 받아볼 수 있도록 할 수 있습니다. 제품 개발이 계속 진행되다 보면 이 기능을 언젠가는 구현해야 합니다. 언제까지 외부 모니터에 HDMI 연결하거나 VNC를 사용할 수는 없기 때문입니다.

5V PWM 팬 | Jetson Nano에는 PC 메인보드에 있는 것과 같은 형태의 4Pin PWM Fan 커넥터가 있습니다. YOLOv5는 높은 하드웨어 자원을 필요로 하기에, 팬이 선택이라고는 하지만 사실상 필수입니다. 당장 팬을 구할 시간이나 여력이 안된다면, 놀고 있는 PC에 사용되는 PWM 팬을 장착해도 좋습니다. (PC 쿨링팬은 12V 환경에서 동작하므로 제 성능을 100% 내지 않습니다. 저는 일단 라이젠 기본 쿨러를 연결하고 팬 속도를 100%로 놓고 사용중입니다.)


20W 배럴 잭 어댑터 | Jetson Nano의 하드웨어 자원을 많이 소모하는 만큼, 전력도 넉넉히 공급해야 합니다. 20W까지 제공하는 Jetson Nano 어댑터를 구입해 배럴잭으로 전원 공급을 추천합니다. 배럴잭으로 전원 공급시 꼭 J48 부위를 점퍼 핀으로 쇼트시켜줘야 배럴잭을 통해 전원이 공급됩니다.

32GB A1 등급 이상의 microSD 카드 | microSD카드의 랜덤IO 성능은 A1 / A2 등급으로 표시됩니다. 일반적인 데이터 저장하는데 랜덤IO 속도가 중요치 않지만, 지금처럼 OS를 돌리는데는 랜덤IO 속도가 중요합니다. 따라서 Jetson Nano에 microSD를 사용 전, microSD 카드에 A1 / A2 글자가 있는지 확인하시고 사용해야 합니다. 그렇지 않으면 사용 중간 중간 대역폭 부족으로 Freezing 현상 발생합니다.
앞으로 해나갈 것들
OS설치 | JetPack 설치, jetson-stats 설치
메모리 공간 확보 | gdm3 제거, lightdm 설치, swap공간 설정
environment 설정 | OpenCV-CUDA 설치, pytorch, torchvision, yolov5 + requirement
마치며
생각보다 긴 대장정이 될 것입니다. 마음을 단단히, 혹은 편히 먹고 과정을 즐기시길 바랍니다. 이 글은 Jetson Nano에 YOLOv5를 설치하기 위해 진행한 여러 삽질 끝의 결과물이고, 비교적 최신 문서일테니 이 글을 읽으시는 분의 환경에 가까울 가능성이 큽니다. 중간에 문제가 생겼다면 오른쪽 아래 chat을 통해 문의주실 수 있습니다. 믿고 따라와 주세요. 감사합니다.
긴 글 읽어주셔서 감사합니다. ❤️와 광고 클릭으로 고마움을 간단히 표현할 수 있습니다.
개발환경 | Mac OS 15.0 Monterey, Python 3.9, ESP-IDF v4.3, EasyEDA 6.4.24
제품 개발 및 기타 문의 | dokixote@wklabs.io 혹은 오른쪽 아래 채팅을 통해 문의
(21. 11. 01 최초 작성)
Jetson Nano에서 YOLOv5 사용 전 준비할 것들
Jetson Nano에 JetPack 4.6 + 필수 SW 설치
OpenCV CUDA 가속 활성화로 젯슨 나노 100% 활용하기(간단)
Jetson Nano에서 YOLOv5 실행하기(0.13s, 7.7fps)
서론
Jetson Nano를 처음 구입했다면, 딥러닝 예제를 돌려보는게 인지상정입니다. 그리고 그에 맞게 JetPack에서는 기본적인 Inference를 수행할 수 있는 Docker Image 가 내장되어있습니다. 그러나 이 Docker Image는 Demonstration 용도이기 때문에 이걸로 뭔가를 제대로 써먹어서 만들어보기에는 무리가 있습니다. 그래서 쓸만한 장난감 하나를 만들어보기 위해 여기에서는 Object Detection 용도로 요즘 잘 써먹고 있는 YOLO(You Only Look Once), 그것도 가장 최신버전인 v5 모델을 가지고서 쓸만한 Object Detection을 수행해보도록 하겠습니다.
여러분의 삽질 시간을 줄여주고 싶었습니다.
저는 Jetson이 처음이다 보니, Environment 세팅에 많은 시간을 들이게 되었습니다. 한 2일 정도 걸린 것 같은데, 적어도 이 글을 읽고 저같은 삽질을 하는 사람이 조금은 줄어들기를 바라는 마음으로 이 글을 작성합니다. Jetson YOLOv5를 삽질없이 실행시키기 위해 필요한 것들과, 사전 준비사항, 설치 순서를 안내하겠습니다. 이 글을 읽고, 여러분들은 저와 같은 삽질 시간을 줄여, 그 시간을 다른 삽질 하는데 사용하기를 기도하겠습니다.
Jetson Nano 환경 | JetPack 4.6, Python 3.6.9, OpenCV 4.5.4(CUDA), PyTorch 1.8.0, Torchvision v0.9.0
이 시리즈의 정독이 끝나면 위의 환경에서 YOLOv5가 정상적으로 작동하는 것을 할 수 있습니다.
Jetson Nano에서 YOLOv5 사전 준비사항
Jetson Nano가 처음이라면, 미리 준비하셔야할 게 있습니다. 이 점들을 미리 숙지하시어, 다음 내용 진행에 차질이 없도록 해야 합니다.

Jetson Nano A02, B01 | inference를 하기 위한 Jetson Nano로 A02, B01 모델을 추천합니다. 최근에 2GB RAM 제품이 10만원 이하의 가격으로 출시되었습니다. 2GB 제품이 USB-C 단자를 지원하고 가격이 저렴하다는 장점이 있지만, YOLOv5 사용에는 적합하지 않습니다. YOLOv5를 YOLOv5s weight로 A02모델에서 시연해본 결과 YOLOv5 모델만으로 2.5GB 이상의 램을 사용합니다. desktop manager 용량까지 생각하면 총 램 사용량은 3.9GB에 육박합니다. 2GB 모델에서는 기본 할당된 Swap까지 모두 사용해야 겨우 YOLOv5를 돌릴 수 있습니다. (2GB 모델로도 동작은 하지만 로딩 시간이 길고 제 성능이 안나온다는 해외 포럼의 의견도 있었습니다.)
2GB 모델을 굳이 사용하시겠다면, 두 가지 옵션이 있습니다. 그러나 컴퓨팅 파워는 좋으면 좋을수록 이득이라는 걸 염두에 두어야 합니다.
더 작은 network 사용하기 | mobilenet이나 yolov5-n 사용할 수 있습니다. 그러나 mobilenet은 정확도가 떨어지고, yolov5-nano의 존재 여부는 확실치 않습니다. custom weights를 사용하면 램 사용량이 줄어들지도 모르겠습니다.
GUI환경 제거하기 | gdm환경을 제거하고, 비디오 스트림 서버를 Jetson Nano에 구축해 Boundary Box가 Overlay된 stream을 외부 client를 통해 받아볼 수 있도록 할 수 있습니다. 제품 개발이 계속 진행되다 보면 이 기능을 언젠가는 구현해야 합니다. 언제까지 외부 모니터에 HDMI 연결하거나 VNC를 사용할 수는 없기 때문입니다.

5V PWM 팬 | Jetson Nano에는 PC 메인보드에 있는 것과 같은 형태의 4Pin PWM Fan 커넥터가 있습니다. YOLOv5는 높은 하드웨어 자원을 필요로 하기에, 팬이 선택이라고는 하지만 사실상 필수입니다. 당장 팬을 구할 시간이나 여력이 안된다면, 놀고 있는 PC에 사용되는 PWM 팬을 장착해도 좋습니다. (PC 쿨링팬은 12V 환경에서 동작하므로 제 성능을 100% 내지 않습니다. 저는 일단 라이젠 기본 쿨러를 연결하고 팬 속도를 100%로 놓고 사용중입니다.)


20W 배럴 잭 어댑터 | Jetson Nano의 하드웨어 자원을 많이 소모하는 만큼, 전력도 넉넉히 공급해야 합니다. 20W까지 제공하는 Jetson Nano 어댑터를 구입해 배럴잭으로 전원 공급을 추천합니다. 배럴잭으로 전원 공급시 꼭 J48 부위를 점퍼 핀으로 쇼트시켜줘야 배럴잭을 통해 전원이 공급됩니다.

32GB A1 등급 이상의 microSD 카드 | microSD카드의 랜덤IO 성능은 A1 / A2 등급으로 표시됩니다. 일반적인 데이터 저장하는데 랜덤IO 속도가 중요치 않지만, 지금처럼 OS를 돌리는데는 랜덤IO 속도가 중요합니다. 따라서 Jetson Nano에 microSD를 사용 전, microSD 카드에 A1 / A2 글자가 있는지 확인하시고 사용해야 합니다. 그렇지 않으면 사용 중간 중간 대역폭 부족으로 Freezing 현상 발생합니다.
앞으로 해나갈 것들
OS설치 | JetPack 설치, jetson-stats 설치
메모리 공간 확보 | gdm3 제거, lightdm 설치, swap공간 설정
environment 설정 | OpenCV-CUDA 설치, pytorch, torchvision, yolov5 + requirement
마치며
생각보다 긴 대장정이 될 것입니다. 마음을 단단히, 혹은 편히 먹고 과정을 즐기시길 바랍니다. 이 글은 Jetson Nano에 YOLOv5를 설치하기 위해 진행한 여러 삽질 끝의 결과물이고, 비교적 최신 문서일테니 이 글을 읽으시는 분의 환경에 가까울 가능성이 큽니다. 중간에 문제가 생겼다면 오른쪽 아래 chat을 통해 문의주실 수 있습니다. 믿고 따라와 주세요. 감사합니다.
긴 글 읽어주셔서 감사합니다. ❤️와 광고 클릭으로 고마움을 간단히 표현할 수 있습니다.
개발환경 | Mac OS 15.0 Monterey, Python 3.9, ESP-IDF v4.3, EasyEDA 6.4.24
제품 개발 및 기타 문의 | dokixote@wklabs.io 혹은 오른쪽 아래 채팅을 통해 문의