OpenCV 비전 실무18장 · OpenCV 전처리와 YOLO 연계5 / 21← 이전목차다음 →MetaContents

18장. OpenCV 전처리와 YOLO 연계

전이 학습

운전을 오래 한 사람이 처음 타는 차를 빌렸다고 해 봅시다. 운전 자체를 다시 배우지는 않습니다. 의자와 거울을 맞추고, 브레이크가 얼마나 민감한지 몇 번 밟아 보고, 차 크기에 감을 잡으면 금방 익숙해집니다. 전이 학습이 이것입니다. COCO 의 80가지 물체로 "물체의 테두리와 모양을 보는 법"을 익힌 yolo11n 에게, 볼트와 너트와 와셔를 조금 더 보여 줘서 우리 부품에 맞춥니다.

운전을 처음 배우는 처음부터 배우기와 새 차에 적응하는 전이 학습을 견준 비교 그림

왼쪽 카드는 아무것도 모르는 모델을 처음부터 가르치는 길입니다. 사진이 수천 장 넘게 들고 시간도 오래 걸립니다. 오른쪽 카드의 전이 학습은 17장에서 만든 학습용 사진 45장으로도 해 볼 만합니다. 여기서 운전 실력이 사전학습 가중치이고, 새 차가 우리 부품 데이터셋입니다. 비유와 다른 점이 하나 있습니다. 사람은 옛 차 운전법을 잊지 않지만, 모델은 부품을 배우면서 COCO 의 80가지를 찾는 능력은 버립니다. 학습한 모델의 names 에는 bolt, nut, washer 셋만 남습니다.

문제 풀기, 채점하기, 고치기, 모의고사의 네 걸음을 이은 흐름도

학습은 문제집을 여러 번 풀며 틀린 만큼 고치는 일입니다. 그림의 네 걸음이 에포크 한 번에 일어나는 일입니다. 학습용 사진을 배치 8장씩 묶어 상자를 맞혀 보고, 틀린 정도를 손실로 매기고, 손실이 줄도록 가중치를 조금 고칩니다. 학습용 사진을 다 돌면 검증용 사진(17장의 모의고사)으로 mAP50 을 잽니다. 이 네 걸음을 에포크 수만큼 되풀이합니다.

학습에 주는 값

실습 2에서 쓰는 값입니다. 숫자를 바꾸면 결과도 달라지므로, 이 장의 결과와 견줄 때는 이 값을 그대로 씁니다.

값이 장에서뜻바꾸면
dataout_ch17_yolo/data.yaml17장에서 만든 데이터셋의 안내판다른 데이터셋으로 배운다
epochs30문제집을 몇 번 풀까늘리면 오래 걸리고, 너무 늘리면 과적합
batch8한 번에 몇 장씩 볼까늘리면 메모리를 많이 쓴다
imgsz320사진을 맞출 크기우리 그림이 320×240 이라 320
device"cpu"어느 장치로 계산할까그래픽 카드가 있으면 0
workers0사진을 읽는 일꾼 수Windows 에서는 0 이 탈이 적다
seed, deterministic0, True씨앗 고정, 같은 계산 순서같은 PC 에서 다시 돌려도 결과가 같게

얼마나 걸릴까

45장을 8장씩 묶으면 에포크 한 번에 묶음이 6개(마지막 묶음은 5장)입니다. 30 에포크면 가중치를 180번 고칩니다. 교안 PC(그래픽 카드 없음)에서는 에포크 한 번에 11초쯤, 30 에포크에 6분 남짓(5.7분) 걸렸습니다. 걸리는 시간은 PC 마다 크게 다릅니다.

Python
import math

n_train, batch, epochs = 45, 8, 30
steps = math.ceil(n_train / batch)        # ceil: 올림. 45 ÷ 8 = 5.6 → 6 묶음
print("에포크 한 번의 묶음 수:", steps)
print("가중치를 고치는 횟수:", steps * epochs)
# 에포크 한 번에 11초가 걸린다고 치면 전체는 몇 분인가
print("어림 시간(분):", round(11 * epochs / 60, 1))

주의할 점

  • 전이 학습을 해도 데이터셋이 작으면 실력에 한계가 있습니다. 이 장의 45장은 수업용으로 줄인 크기입니다. 실제 현장에서는 클래스마다 수백 장 이상을 모읍니다.
  • 학습 중에는 CPU 를 거의 다 씁니다. 수업에서는 학습을 미리 돌려 두거나, 다른 작업을 하지 않는 동안 돌립니다.
← 이전 절18장 · ultralytics 와 사전학습 모델다음 절 →18장 · 학습 기록 읽기