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

18장. OpenCV 전처리와 YOLO 연계

학습 기록 읽기

운동을 시작하면 매일 몸무게와 달리기 기록을 적어 둡니다. 하루 이틀의 숫자는 오르락내리락하지만, 몇 주를 이어 그리면 흐름이 보입니다. 기록이 더 나아지지 않고 평평해지면 운동 방법을 바꿀 때입니다. 학습 기록도 이렇게 읽습니다. ultralytics 는 에포크마다 손실과 점수를 results.csv 에 한 줄씩 적습니다.

손실이 줄어든다, mAP50 이 오른다, 평평해진다의 세 가지를 나란히 놓은 비교 그림

그림의 세 카드가 학습 기록에서 볼 것입니다. 왼쪽 카드처럼 손실은 에포크가 지날수록 줄어야 하고, 가운데 카드처럼 검증용 사진의 mAP50 은 올라야 합니다. 오른쪽 카드처럼 어느 때부터 더 돌려도 나아지지 않으면 학습이 거의 끝난 것입니다. 여기서 매일의 몸무게가 에포크마다의 손실, 달리기 기록이 mAP50 입니다.

results.csv 의 주요 열

열 이름뜻좋은 흐름
epoch몇 번째 에포크인가1 부터 30 까지
train/box_loss학습용 사진에서 상자 자리가 틀린 정도줄어든다
train/cls_loss학습용 사진에서 클래스가 틀린 정도줄어든다
val/box_loss검증용 사진에서 상자 자리가 틀린 정도줄어든다
metrics/precision(B), metrics/recall(B)검증용 사진의 정밀도와 재현율오른다
metrics/mAP50(B)IoU 0.5 기준의 점수 평균1 쪽으로 오른다
metrics/mAP50-95(B)IoU 기준을 0.5 부터 0.95 까지 바꿔 가며 낸 점수의 평균오른다. mAP50 보다 엄격해 낮게 나온다

열 이름 끝의 (B) 는 box(상자)의 머리글자입니다. 손실이 셋 이상 있는 것은 상자 자리, 클래스, 상자 테두리의 세밀함을 따로 채점하기 때문입니다. 어떻게 계산하는지는 이 과정의 범위 밖이고, "작을수록 좋은 틀린 정도 점수"로 읽으면 됩니다.

mAP50 을 쉬운 말로

mAP50 은 두 단계로 만듭니다. 먼저 클래스마다 "IoU 0.5 넘게 겹치면 맞힌 것으로 치고, 헛것과 놓친 것을 함께 따진 점수(AP, Average Precision)"를 0~1 로 냅니다. 그다음 클래스의 점수를 평균합니다(앞의 m 이 mean, 평균). 예를 들어 bolt 0.9, nut 0.8, washer 0.7 이면 mAP50 은 (0.9 + 0.8 + 0.7) ÷ 3 = 0.8 입니다. 모든 물체를 헛것 없이 다 찾으면 1 이 됩니다.

아래 예시는 기록을 읽는 법을 보이려고 숫자를 지어낸 작은 표입니다. 실제 기록은 실습 2에서 읽습니다.

Python
import pandas as pd

# 지어낸 기록 다섯 줄(꼴만 results.csv 와 같다)
log = pd.DataFrame({"epoch": [1, 2, 3, 4, 5],
                    "train/box_loss": [2.1, 1.6, 1.3, 1.2, 1.2],
                    "metrics/mAP50(B)": [0.05, 0.30, 0.55, 0.62, 0.61]})
best = log.loc[log["metrics/mAP50(B)"].idxmax()]      # idxmax: 가장 큰 값이 있는 줄 번호
print("가장 좋았던 에포크:", int(best["epoch"]), "· mAP50:", float(best["metrics/mAP50(B)"]))
# 마지막 두 에포크의 차이가 작으면 평평해진 것이다
print("마지막 두 에포크의 mAP50 차이:", round(float(log["metrics/mAP50(B)"].diff().iloc[-1]), 2))

diff() 는 바로 앞 줄과의 차이입니다. 마지막 차이가 0 에 가깝거나 음수면 더 돌려도 나아지지 않는다는 신호입니다. ultralytics 는 학습하는 동안 점수가 가장 좋았던 때의 가중치를 best.pt, 마지막 때의 가중치를 last.pt 로 따로 저장합니다.

주의할 점

  • 학습용 손실은 계속 줄어드는데 검증용 손실이 다시 오르기 시작하면 과적합입니다. 연습 문제만 외우고 모의고사는 못 푸는 상태입니다.
  • 검증용 사진이 11장뿐이라 한 장만 맞히고 못 맞혀도 점수가 크게 출렁입니다. 작은 데이터셋의 점수는 소수 둘째 자리까지 믿지 말고 흐름으로 읽습니다.
← 이전 절18장 · 전이 학습다음 절 →18장 · 추론 결과 다루기