18장. OpenCV 전처리와 YOLO 연계
비교 실험 설계
두 비료 가운데 어느 쪽이 좋은지 알아보려면, 같은 씨앗을 같은 흙에 심고, 물과 햇빛도 같게 주고, 비료만 바꿔야 합니다. 물까지 다르게 주면 키가 다른 것이 비료 때문인지 물 때문인지 모릅니다. 전처리를 견줄 때도 같습니다. 같은 그림, 같은 모델, 같은 채점 방법을 두고 조건이나 처리 하나만 바꿉니다.
그림의 다섯 걸음이 공정한 비교 실험의 순서입니다. 먼저 원본 그림과 학습한 모델로 기준 점수를 잽니다. 그다음 조건이나 처리 하나만 바꾸고, 잡음은 씨앗을 고정해 늘 같게 만들고, IoU 0.5 와 신뢰도 0.25 의 같은 채점으로 잰 뒤, 표로 견줍니다. 여기서 같은 씨앗과 흙이 같은 그림과 모델, 비료가 바꾸는 처리 하나입니다.
이 장의 실험 표
프로젝트는 조건 4가지와 처리 3가지를 엇갈려 12칸의 표를 만듭니다.
| 그대로 둘 것 | 바꿀 것 | 잴 것 |
|---|---|---|
모델(best.pt), 검증용 사진 11장, IoU 0.5, 신뢰도 0.25, imgsz=320, 잡음의 씨앗 | 조건(원본, 어둡게, 잡음, 어둡게+잡음) × 처리(그대로, 밝기 보정, 잡음 제거+밝기 보정) | 정밀도, 재현율, F1 |
from itertools import product
import numpy as np
conditions = ["원본", "어둡게", "잡음", "어둡게+잡음"]
treatments = ["그대로", "밝기 보정", "잡음 제거+밝기 보정"]
# product: 두 목록의 모든 짝을 차례로 만든다(4 × 3 = 12 가지)
plan = list(product(conditions, treatments))
print(len(plan), "가지:", plan[:4], "...")
# 씨앗이 같으면 잡음도 똑같다: 조건마다 같은 씨앗으로 새로 만들면 공정하다
a = np.random.default_rng(1802).normal(0, 20, (3, 3))
b = np.random.default_rng(1802).normal(0, 20, (3, 3))
print("같은 씨앗의 잡음이 같은가:", bool(np.array_equal(a, b)))주의할 점
- 처리마다 신뢰도 기준값까지 바꾸면 무엇 때문에 점수가 달라졌는지 알 수 없습니다. 기준값을 바꿔 보는 실험은 따로 합니다(실습 3).
- 검증용 사진 11장, 물체 26개는 적습니다. 물체 하나를 더 맞히면 재현율이 1 ÷ 26 ≈ 0.038 오릅니다. 차이가 이 정도면 우연일 수 있다고 적습니다.