OpenCV 비전 실무17장 · Batch Processing 과 YOLO 데이터 준비6 / 21← 이전목차다음 →MetaContents

17장. Batch Processing 과 YOLO 데이터 준비

객체 탐지 데이터셋이란

과일 가게에서 사진마다 이름표를 하나 붙이는 일과, 사진 속 과일마다 테두리를 그리고 이름표를 붙이는 일은 수고가 다릅니다. 앞의 것은 "이 바구니는 사과 바구니" 라고 쓰면 끝이지만, 뒤의 것은 사과가 다섯 개면 상자 다섯 개를 그려야 합니다. 1장에서 본 분류와 객체 탐지의 차이가 데이터를 만드는 수고에서도 그대로 드러납니다.

분류는 그림 전체에 이름 하나, 객체 탐지는 물체마다 상자와 이름을 붙인 것을 견준 그림

왼쪽은 분류용 정답입니다. 그림 전체에 이름 하나만 붙습니다. 오른쪽은 객체 탐지용 정답입니다. 부품마다 초록 상자 하나와 클래스 이름이 붙습니다. 여기서 바구니 이름표가 분류 라벨이고, 과일마다 붙인 이름표가 탐지 라벨입니다. 두 그림 모두 이 장의 실습 데이터 ch17_raw/ 에 있는 그림입니다.

분류 데이터와 탐지 데이터

견줄 것분류 데이터 (16차시)객체 탐지 데이터 (이 장)
정답의 모양그림마다 이름 하나물체마다 상자 하나와 이름 하나
정답을 두는 곳클래스 이름의 폴더에 그림을 넣는다그림마다 같은 이름의 라벨 파일
한 그림의 물체 수하나로 본다0개부터 여러 개
만드는 수고그림 수만큼물체 수만큼 상자를 그린다
흔한 실수엉뚱한 폴더에 넣기상자 빠뜨리기, 좌표 실수, 이름 오타

이 장의 실습 데이터

ch17_raw/ 에는 컨베이어 위의 부품을 위에서 찍은 것처럼 그린 가상 그림 60장(320×240)과 주석 파일이 있습니다. 실제 부품이나 공장과 관계없고, 사람은 찍혀 있지 않습니다.

파일내용
part_001.png ~ part_060.png볼트(bolt), 너트(nut), 와셔(washer)가 1~5개 놓인 그림. 일부는 어둡거나 먼지가 끼어 있다
annotations.csv라벨링 도구에서 내보낸 것처럼 꾸민 주석. 열은 filename, class, x1, y1, x2, y2
mistakes.csvannotations.csv 에 일부러 섞어 둔 실수의 정답
Python
import pandas as pd

ann = pd.read_csv("ch17_raw/annotations.csv")
print(ann.head(3))
# 그림 한 장에 물체가 몇 개인지: filename 으로 묶어 줄 수를 센다
per_image = ann.groupby("filename").size()
print("주석이 있는 그림:", len(per_image), "장 · 물체:", len(ann), "개")
print("그림당 물체 수:", per_image.value_counts().sort_index().to_dict())

groupby("filename").size() 는 파일 이름이 같은 줄끼리 묶어 줄 수를 셉니다. 탐지 데이터는 한 그림이 여러 줄을 차지하므로 "줄 수 = 물체 수" 입니다.

주의할 점

  • 물체가 하나도 없는 그림(배경만 찍힌 그림)도 탐지 데이터에 넣을 수 있습니다. 이때는 내용이 빈 라벨 파일을 둡니다. 그런 그림은 모델에게 "여기에는 찾을 것이 없다"를 가르칩니다.
  • 거꾸로, 물체가 있는데 상자를 빠뜨리면 모델은 그 물체를 배경으로 배웁니다. 빠진 상자는 틀린 상자만큼 해롭습니다.
← 이전 절17장 · 멈추지 않는 일괄 처리다음 절 →17장 · 주석 달기(Annotation)