사용자 학습

YOLOv5를 사용하여 사용자 데이터를 학습시키고 특정 표지판(right, left, ahead)을 탐지하려면 다음 과정을 따르면 됩니다.


1. 필수 설치

  1. YOLOv5 설치
    GitHub에서 YOLOv5를 클론하고 필요한 라이브러리를 설치합니다.

    git clone https://github.com/ultralytics/yolov5.git
    cd yolov5
    pip3 install -r requirements.txt
    

  2. Python 환경 구성
    Python 3.8 이상이 필요하며, CUDA와 PyTorch가 Jetson Orin Nano에 맞게 설치되어 있어야 합니다.


2. 데이터 준비

  1. 데이터셋 수집
  2. right, left, ahead 표지판 이미지를 수집합니다.
  3. 데이터는 다양한 각도와 조명 조건을 포함하여 충분히 준비해야 합니다.
  4. 이미지 크기는 YOLO 모델에 적합하도록 정규화되지 않아도 됩니다.

  5. 라벨링
    라벨링 도구인 LabelImg 또는 **Roboflow**를 사용하여 데이터를 라벨링합니다.

  6. 각 이미지에 대해 객체의 경계 상자를 설정하고, right, left, ahead로 클래스 이름을 지정합니다.
  7. YOLO 형식의 라벨 파일 생성 (이미지와 같은 이름, .txt 확장자):

    class_id x_center y_center width height
    
    예:
    0 0.5 0.5 0.2 0.3
    

    • class_id는 클래스 번호 (0 = right, 1 = left, 2 = ahead).
    • x_center, y_center, width, height는 이미지 크기 대비 상대 좌표 (0~1 범위).
  8. 디렉토리 구조 설정
    YOLO는 다음 구조를 기대합니다:

    dataset/
        images/
            train/
            val/
        labels/
            train/
            val/
    

  9. images/train에는 학습 이미지가, images/val에는 검증 이미지가 있습니다.
  10. labels/trainlabels/val에는 각각의 라벨 파일이 있습니다.

3. 데이터 구성 파일 작성

  1. data.yaml 생성
    프로젝트 폴더에 data.yaml 파일을 생성합니다. 예:
    path: ./dataset  # 데이터셋 경로
    train: images/train  # 학습 이미지 경로
    val: images/val  # 검증 이미지 경로
    nc: 3  # 클래스 수
    names: ['right', 'left', 'ahead']  # 클래스 이름
    

4. YOLO 모델 학습

  1. 사전 학습된 모델 다운로드
    사전 학습된 YOLOv5 모델(yolov5s.pt)을 사용합니다. YOLOv5s는 소형 모델로 Jetson Nano에서도 적합합니다.

  2. 학습 시작
    YOLO 학습을 시작합니다.

    python3 train.py --img 640 --batch 16 --epochs 50 --data data.yaml --weights yolov5s.pt --device 0
    

  3. --img: 입력 이미지 크기 (기본 640).
  4. --batch: 배치 크기 (Jetson Orin Nano의 메모리 상황에 맞게 조정).
  5. --epochs: 학습 반복 횟수.
  6. --data: data.yaml 파일 경로.
  7. --weights: 사전 학습된 가중치.
  8. --device: GPU 사용 (0).

  9. 학습 모니터링
    학습 진행 상황은 runs/train/exp/ 디렉토리에 저장됩니다.

  10. 학습 로그: results.png 및 텍스트 로그 파일.
  11. 최종 모델 가중치: runs/train/exp/weights/best.pt.

5. 학습된 모델 테스트

  1. 테스트 데이터 준비
    테스트할 이미지나 동영상을 준비합니다.

  2. 모델 추론
    학습된 모델을 사용하여 추론합니다.

    python3 detect.py --weights runs/train/exp/weights/best.pt --img 640 --source data/images/test.jpg
    

  3. --source: 테스트 이미지 또는 동영상 경로.
  4. 결과는 runs/detect/exp/에 저장됩니다.

6. Jetson Orin Nano에서 최적화

  1. TensorRT 변환
    학습된 모델(best.pt)을 ONNX로 변환한 후 TensorRT로 최적화합니다.

    python3 export.py --weights runs/train/exp/weights/best.pt --img 640 --batch 1
    trtexec --onnx=best.onnx --saveEngine=best.trt --fp16
    

  2. 최적화된 모델 실행
    TensorRT로 변환된 모델(best.trt)을 실행합니다. 이 과정은 Jetson의 GPU 가속을 극대화합니다.


7. 결과 분석

학습 성능 및 검증 성능을 평가합니다. - results.png 분석: 학습 및 검증 정확도, 손실 그래프. - 혼동 행렬: 클래스별 정확도 확인. - 실시간 테스트: 모델의 실제 성능 확인.


8. 실시간 감지 (Jetson Orin Nano)

Jetson Orin Nano에서 실시간 객체 감지를 수행하려면 OpenCV와 YOLO 모델을 결합하여 카메라 스트림을 처리합니다.

import cv2
from yolov5 import YOLO

model = YOLO('runs/train/exp/weights/best.pt')
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    results = model(frame)
    frame = results.render()

    cv2.imshow('YOLO Detection', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()


필요한 추가 사항이나 구현 중 문제가 있다면 언제든지 문의하세요!