기존에 YOLOv5로 프로젝트를 진행하다가 호환성 학습속도 모델성능 등등... 답이 없어서 방황하던 와중, YOLO11은 도커 컨테이너로 간편하게 환경 설정을 할 수 있다고 해서 도전해봤습니다.
하드웨어 환경은 이렇습니다.
- 모델 운용: Jetson Nano
- 모델 학습: Windows 11 (NVIDIA RTX 3070)
문제 상황은 이렇습니다. 이래저래 서로 엮여있는 문제들입니다.
- Jetson Nano의 Jetpack 버전이 4라서 파이썬 3.8까지만 지원 (이거 때문에 호환성 문제 주루룩 발생)
- YOLOv5의 과거 커밋을 체리 피킹해서 사용해야 함
- torch 계열, opencv 라이브러리가 numpy 버전으로 줄다리기 함
- numpy 버전을 조정하면 이번엔 YOLOv5에 레거시 코드가 남아있어서 일일이 뜯어 고쳐야 함
- 깃허브 작업하기 힘듦
문제 접근 계획입니다. 차근차근 해보겠습니다.
- 젯슨 나노에 Ultralytics 공식 Docker 컨테이너 받기
- Windows에서 YOLO11 모델을 .onnx 확장자로 내보내기(export)
- 모델을 젯슨 나노에 옮긴 후 TensorRT로 최적화하기
젯슨 나노에 Docker 컨테이너 받기
우선 젯슨 나노에 OS를 올려줍니다.
https://deep-eye.tistory.com/56
[Jetson] Nvidia 젯슨 나노 (Jetson Nano) OS 설치 및 초기화 가이드
Jetson Nano 젯슨 나노는 NVIDIA에서 제작한 딥러닝용 보드로 GPU 연산이 가능한 프로세서를 탑재하여 CUDA를 활용한 이미지 프로세싱과 딥러닝 연산이 가능합니다. 가격 또한 저렴?하여 다양한 산업용
deep-eye.tistory.com
OS 설치가 다 되었다면 아래 커맨드로 도커를 받아오고 컨테이너를 실행합니다.
그리고 컨테이너 내부에서 pip로 ultralytics를 설치하면 종속성까지 자동으로 설치됩니다.(YOLOv5 때는 손으로 설치했던 것들까지...)
t=ultralytics/ultralytics:latest-jetson-jetpack4
### pull docker
sudo docker pull $t
### run docker
# 연결된 웹캠이 없다면 --device 옵션은 빼주세요.
sudo docker run -it --ipc=host --runtime=nvidia --name {container name} --device=/dev/video0:/dev/video0 -v ~/project:/workspace $t
### install YOLO
pip install ultralytics
--name 파라미터를 넘겨주는 이유는 중간에 컨테이너를 나오더라도 다시 같은 컨테이너를 실행하기 위해서입니다.
### start docker
sudo docker start -ai {container name}
Windows에서 모델 학습하기
파이썬은 3.10 사용했습니다.
의존성을 설치해주겠습니다.
# YOLO 설치
pip install ultralytics
# CUDA 12.1을 지원하는 torch로 변경
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
모델 학습 코드는 공식 Docs에 있는 걸 가져왔습니다.
from ultralytics import YOLO
# Create a new YOLO model from scratch
model = YOLO("yolo11n.yaml")
# Load a pretrained YOLO model (recommended for training)
model = YOLO("yolo11n.pt")
# Train the model using the 'coco8.yaml' dataset for 3 epochs
results = model.train(data="coco8.yaml", epochs=3, device=0)
# Evaluate the model's performance on the validation set
results = model.val()
# Export the model to ONNX format
success = model.export(format="onnx", device=0)
젯슨 나노에서 모델 실행 시키기
우선 모델을 Windows에서 젯슨으로 넘겨줍시다. 저는 spc 커맨드로 옮겼습니다.
https://baekh-93.tistory.com/50
[Linux] 윈도우에서 리눅스 서버에 파일 전송하기
운영중인 리눅스서버에 파일을 전송하는 방법 1. PowerShell을 실행한다. => 윈도우 환경에서 리눅스환경에 파일 전송시 OS가 다르기 때문에 윈도우 환경에서는 보통 PowerShell을 자주 사용한다. 2. 전
baekh-93.tistory.com
가져온 모델을 아래 커맨드로 로컬에서 컨테이너로 옮겨줍니다.
### cp file to docker
sudo docker cp {file} {container name}:/ultralytics
드디어 모델을 실행한 결과...
### predict
yolo predict model=best.pt source=0 show=False project=/workspace/runs
이게 이렇게 쉬울 일인가요...
최종 목표는 ONNX 모델을 엔진으로 최적화 하는 건데, 아쉽게도 .trt나 .engine 확장자로 모델 돌리기는 실패했습니다.
일단은 TensorRT 커맨드만 남겨볼게요.
### onnx trtexec
# 컨테이너 밖에서 로컬로 실행하면 됨.
# jetson nano는 int8 양자화 미지원
# workspace는 최적화 작업에 할당되는 메모리양을 조정해준다. (2048로 해도 계속 부족하다고 함.)
/usr/src/tensorrt/bin/trtexec --onnx=best.onnx --saveEngine=best.engine --fp16 --workspace=2048YOLOv5 때는 몇날 며칠 걸리던게 도커 환경에서 YOLO11로 하니 반나절도 안돼서 끝나버렸습니다.
물론 학습, 최적화까지 마쳐봐야 알겠지만 벌써 속이 너~~~~~~무 시원하네요.

프로젝트 진행하면서 오류가 발생해도 자료가 없어서 문제를 파악할 수가 없는게 너무 힘들었습니다.
Jetson Nano도 지원 중단됐고, YOLOv5도 이젠 구버전이다 보니, 저와 같은 환경에서 개발을 진행한 자료가 거의 없었습니다.(Ultralytics 공식 커뮤니티를 포함해도)
저 같은 사람이 없기를 기도하며...
어쩌다 이 글을 보신 분은 꼭 오류 해결하시고, 도움이 필요하시다면 힘 닿는 데까지 도와드리겠습니다.
다음 삽질은 아마 모델 학습 편으로 돌아오지 싶네요. 그럼 안녕
VSCode에서 SSH로 Jetson Nano와 연결하기
https://resultofeffort.tistory.com/149#google_vignette
[오류Error] VS Code Remote-SSH: "원격 호스트가 VS Code Server를 실행하기 위한 필수 구성 요소를 충족하
could not establish connection to "서버ip": the remote host does not meet the prerequisites for running vs code server. 2시간 30분 삽질 완료^^그래도 해결했으니 진짜 다행........... 문제 상황오늘 출근해서 VS Code에서 Remote
resultofeffort.tistory.com