▶️24

[영상] YOLOv8 커스텀 데이터 학습하기

Day 3: YOLO 객체 탐지

학습 목표
  • 커스텀 데이터셋으로 YOLO 를 학습하는 5단계를 순서대로 설명할 수 있다
  • data.yaml 의 각 항목이 무엇을 가리키는지 설명할 수 있다
  • YOLO 라벨 포맷(cx, cy, w, h 정규화)을 읽고 쓸 수 있다
  • mAP@50 과 mAP@50-95 의 차이를 IoU 와 연결해 설명할 수 있다

영상 핵심 정리 — 커스텀 데이터로 YOLO 학습하기

학습 파이프라인 5단계

1. 이미지 수집      우리 라인에서 찍는다. 조명·각도를 실제 운전 조건과 맞춘다
2. 라벨링           결함마다 상자를 치고 클래스를 붙인다
3. data.yaml 작성   경로와 클래스 이름을 적는다
4. model.train()    사전학습 가중치에서 이어 학습한다
5. 검증             mAP·Recall 을 보고, 틀린 이미지를 직접 본다

data.yaml

path: /abs/path/manufacturing_defect_dataset
train: train/images
val:   val/images
names:
  0: scratch
  1: crack
  2: particle

labels/ 폴더는 images/ 와 이름이 1:1 로 맞아야 한다. Ultralytics 는 경로 문자열에서 imageslabels 로 바꿔 라벨을 찾는다.

YOLO 라벨 포맷

# scratch(클래스 1) 하나가 있는 이미지의 라벨 파일
1 0.512 0.334 0.087 0.043
│   │     │     │     └── h (높이 ÷ 이미지 높이)
│   │     │     └──────── w (너비 ÷ 이미지 너비)
│   │     └────────────── cy (중심 y ÷ 이미지 높이)
│   └──────────────────── cx (중심 x ÷ 이미지 너비)
└──────────────────────── class_id

# 640×640 이미지로 복원
cx_px = 0.512 × 640 = 328
w_px  = 0.087 × 640 =  56

학습 코드

from ultralytics import YOLO

model = YOLO('yolo11n.pt')
results = model.train(
    data='manufacturing_defect_dataset/data.yaml',
    epochs=50,
    imgsz=640,
    patience=10,      # 개선이 없으면 조기 종료
)

함정 주의: train()augment=True 를 넣어도 학습 증강이 켜지지 않는다. Ultralytics 에서 augment 는 검증·예측 단계의 TTA(Test Time Augmentation) 인자다. 학습 증강은 mosaic, hsv_h, fliplr 같은 개별 인자로 조절한다.

함정 주의: epochs 를 무작정 늘리면 과적합한다. 소규모 제조 데이터는 patience 를 걸고 검증 손실을 보며 멈춘다.

다음 task와의 연결

다음 reading 에서 1-stage 와 2-stage 탐지기의 구조 차이를 본다.

AI로 학습하기 — 꿀팁
mAP@50 vs mAP@50-95 평가 기준 검증AI 학습 팁

제조 외관검사 모델의 mAP@50과 mAP@50-95 지표가 현장 불량 탐지 품질을 올바로 반영하는지 AI로 검증하고, YOLO 좌표 정규화 포맷 오류가 가져오는 결과를 점검하세요.

제조 불량 탐지 모델의 평가 지표로 mAP@50과 mAP@50-95를 사용할 때 어느 지표가 더 중요한지 검증해줘. IoU 0.5와 0.5~0.95 구간 평균의 차이, Feature Extraction(백본 동결+헤드만 학습)과 Full Fine-tuning 중 어느 전략이 소량 제조 불량 데이터에 더 적합한지, YOLO 좌표 포맷(cx, cy, w, h 0~1 정규화)이 잘못됐을 때 탐지 결과에 어떤 오류가 생기는지도 보여줘.
이 팁이 도움이 됐나요?
핵심 포인트
  • 학습 5단계: 이미지 수집 → 라벨링 → data.yaml 작성 → model.train() → 검증
  • YOLO 좌표 포맷: cx, cy, w, h 모두 이미지 크기로 나눈 0~1 값
  • mAP@50 은 IoU 0.5 기준, mAP@50-95 는 0.5~0.95 를 0.05 간격으로 평균
  • 학습 증강은 train() 의 개별 인자(mosaic, hsv_h, fliplr 등)로 조절한다
용어