OpenCV 비전 실무16장 · AI 데이터 정제와 데이터 증강9 / 21← 이전목차다음 →MetaContents

16장. AI 데이터 정제와 데이터 증강

데이터 증강이란

처음 보는 과일을 아이에게 알려 줄 때, 사과 한 개를 이리저리 돌려 가며 보여 줍니다. 위에서, 옆에서, 밝은 창가에서, 조금 어두운 식탁에서 봅니다. 사과는 한 개지만 아이는 여러 모습의 사과를 보고 "사과란 이런 것"을 익힙니다. 데이터 증강은 이 일을 사진으로 합니다. 사진 한 장을 뒤집고 돌리고 밝기를 바꿔 여러 장을 만듭니다.

양 늘리기, 상황 넓히기, 정답 지키기의 세 가지 까닭을 견준 비교 그림

그림의 세 상자가 증강을 하는 까닭과 지킬 것입니다. 사진이 적을 때 한 장에서 여러 장을 만들어 양을 늘리고, 방향·밝기·흐림이 다른 경우를 미리 보여 줘 실제 상황에 강하게 합니다. 그리고 셋째 상자, 정답 이름표는 그대로여야 합니다. 여기서 사과를 돌려 보는 일이 증강이고, 돌려도 사과라는 사실이 정답 보존입니다. 비유와 다른 점도 있습니다. 진짜 사과를 돌리면 뒷면이 보이지만, 사진을 돌려도 찍히지 않은 뒷면은 생기지 않습니다. 증강은 새 정보를 만들지 못하고, 가진 정보를 다른 모습으로 보여 줄 뿐입니다.

오른쪽 화살표를 뒤집으면 왼쪽, 글자를 뒤집으면 거울 글씨, 6 을 돌리면 9, 귤의 색상을 돌리면 라임 색이 되는 네 가지 예

정답이 바뀌는 변환의 네 가지 예입니다. "오른쪽" 화살표를 좌우로 뒤집으면 "왼쪽"이 되고, 글자는 14장에서 본 거울 글씨가 됩니다. 숫자 6 을 180도 돌리면 9 가 됩니다. 귤의 색상(3장의 H)을 30 만큼 돌리면 라임 색이 되어, 색으로 과일을 가르는 데이터에서는 정답이 흔들립니다.

데이터마다 써도 되는 증강

데이터좌우 뒤집기위아래 뒤집기큰 회전색상 크게 바꾸기
과일 분류(이 장)된다된다(위에서 찍은 사진이면)된다안 된다(색이 정답의 단서)
교통 표지안 된다(화살표, 글자)안 된다안 된다안 된다(빨강·파랑이 뜻)
손글씨 숫자안 된다안 된다안 된다(6과 9)된다
공장 부품 흠집된다된다된다대개 된다

짧은 예시

Python
# 증강 계획을 표로 적고 "정답 보존"인 것만 고른다
plans = [
    ("좌우 뒤집기", "과일", True),
    ("좌우 뒤집기", "화살표 표지", False),   # 오른쪽 → 왼쪽
    ("180도 돌리기", "숫자 6", False),       # 6 → 9
    ("색상 +30", "귤", False),               # 귤 → 라임 색
    ("밝기 +20", "과일", True),
]
for name, data, keeps in plans:
    print(f"{name:8} | {data:6} | {'써도 됨' if keeps else '쓰면 안 됨'}")

# 사진 수를 몇 배로 늘리나: 원본 한 장에 증강 세 장이면 4배
train = 21
print(train, "→", train * (1 + 3))   # 결과: 21 → 84

'써도 됨' if keeps else '쓰면 안 됨' 은 keeps 가 True 면 앞의 글자, False 면 뒤의 글자를 고릅니다. 마지막 두 줄은 프로젝트에서 학습용 사진 한 장에 증강 세 장을 더하면 몇 장이 되는지 미리 계산한 것입니다.

주의할 점

  • 증강은 데이터를 "모으는 일"을 대신하지 못합니다. 사과 사진만 잔뜩 있고 귤 사진이 세 장뿐이면, 귤 세 장을 아무리 돌려도 다양한 귤을 보여 줄 수 없습니다.
  • 지나친 증강은 오히려 해롭습니다. 90도 넘게 돌리거나 너무 어둡게 만들면 실제로는 볼 일 없는 사진을 배우게 됩니다.
← 이전 절16장 · 크기와 형식 맞추기다음 절 →16장 · 기하 증강