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

18장. OpenCV 전처리와 YOLO 연계

전처리와 증강, 어느 쪽으로 풀까

비 오는 날 우산을 쓰는 방법과, 평소에 비 맞는 길도 달려 보는 방법이 있습니다. 우산은 그날그날 써야 하지만 효과가 바로 나고, 빗길 연습은 미리 해 두면 우산 없이도 덜 미끄러집니다. 어두운 사진을 다루는 방법도 둘입니다. 쓸 때마다 OpenCV 로 손질해 넣거나(우산), 16장의 증강으로 어두운 사진을 학습 때 미리 보여 줍니다(빗길 연습).

쓸 때마다 사진을 고치는 OpenCV 손질과 학습 사진을 늘려 익히게 하는 증강을 견준 비교 그림

왼쪽 카드의 OpenCV 손질은 학습을 다시 하지 않아도 바로 쓸 수 있고, 원인이 "어둡다"처럼 하나로 분명할 때 잘 듣습니다. 오른쪽 카드의 증강은 다시 학습해야 하지만, 밝기와 잡음이 제각각인 사진에 두루 강해집니다. 여기서 우산이 OpenCV 손질, 빗길 연습이 증강입니다.

고르는 기준

상황알맞은 쪽까닭
카메라 한 대의 조명이 늘 어둡다OpenCV 손질원인이 하나로 분명하고 다시 학습하지 않아도 된다
낮과 밤, 맑은 날과 흐린 날이 섞여 들어온다증강조건이 제각각이라 손질 하나로 맞추기 어렵다
학습을 다시 할 시간과 장비가 없다OpenCV 손질모델은 그대로 둔다
손질을 걸었더니 오히려 떨어졌다증강, 또는 더 약한 손질학습 때 보지 못한 모습으로 바꾼 것일 수 있다
둘 다 할 수 있다둘 다증강으로 강하게 만들고, 아주 나쁜 사진만 손질한다

이 장의 모델이 어두운 사진에 강했던 것도, 학습용 사진에 어두운 그림이 섞여 있었기 때문입니다(실습 5). 증강으로 어두운 사진을 넣어 준 것과 같은 효과입니다. 증강을 할 때도 16장에서 본 규칙은 그대로입니다. 증강은 학습용에만 하고, 검증용과 시험용은 손대지 않습니다. 아래는 학습용 사진마다 어둡게 할 정도를 씨앗을 고정해 고르는 예입니다.

Python
import numpy as np

rng = np.random.default_rng(1803)
# 학습용 사진 다섯 장마다 밝기 배율을 0.3~1.0 사이에서 고른다(uniform: 고르게 뽑기)
factors = rng.uniform(0.3, 1.0, 5)
print([round(float(f), 2) for f in factors])
# 원본 평균 밝기가 75 인 사진이라면 증강 뒤 평균 밝기는 대략
print([round(75 * float(f), 1) for f in factors])

주의할 점

  • 쓸 때 손질을 정했으면, 그 손질을 학습용 사진에도 똑같이 걸어 다시 학습하는 방법도 있습니다. 어느 쪽이든 학습 때와 쓸 때의 처리를 맞추는 것이 핵심입니다.
  • 증강으로 다시 학습하면 결과 모델이 바뀌므로, 이 장의 점수 표를 처음부터 다시 만들어 견줍니다.
← 이전 절18장 · 비교 실험 설계다음 절 →18장 · 실습 지도