19장. Vision 데이터 파이프라인
파이프라인 점검 체크리스트
비행기 조종사는 이륙 전에 체크리스트를 한 줄씩 소리 내어 읽으며 확인합니다. 수천 번 날아 본 조종사도 같은 목록을 씁니다. 익숙할수록 한두 가지를 빠뜨리기 쉽기 때문입니다. 파이프라인도 처음 돌린 뒤와 기준을 바꾼 뒤에 같은 목록으로 훑어봅니다.
그림의 네 카드가 점검의 갈래입니다. 입력이 맞는지(폴더, 확장자, 정답표), 단계마다 통과 수가 말이 되는지, 출력 그림을 눈으로 보았는지, 다시 돌려도 같은 결과가 나오는지 봅니다. 여기서 조종사의 연료·날개·계기판 확인이 각 카드이고, 소리 내어 읽는 일이 아래 체크리스트입니다.
체크리스트
통과 수 점검표
| 점검 | 이상한 신호 | 의심할 곳 |
|---|---|---|
| 수집 수가 0 | 그림을 하나도 못 모음 | 작업 폴더, 폴더 이름, 확장자 대소문자 |
| 읽기에서 많이 빠짐 | 절반 넘게 깨짐 | 내려받기가 끊겼거나 다른 형식(heic 등) |
| 흐림에서 많이 빠짐 | 정상 그림까지 탈락 | blur_min 이 데이터에 비해 너무 큼 |
| 중복에서 많이 빠짐 | 서로 다른 그림이 중복으로 | hash_max 가 너무 큼 |
| 추론 상자 수가 0 | 모델이 아무것도 못 찾음 | 가중치 경로, 다듬기 크기, conf |
짧은 예시
# 단계별 남은 수가 줄거나 같은지 자동으로 확인한다
counts = [("들어온 그림", 24), ("읽기", 22), ("밝기", 21), ("흐림", 20), ("중복", 18), ("다듬기", 18)]
problems = [(a, b) for (a, x), (b, y) in zip(counts, counts[1:]) if y > x]
print("늘어난 단계:", problems if problems else "없음") # 결과: 늘어난 단계: 없음
# 한 단계에서 절반 넘게 빠지면 알린다
for (a, x), (b, y) in zip(counts, counts[1:]):
if x > 0 and (x - y) / x > 0.5:
print("확인 필요:", b, f"{x} → {y}")
print("점검 끝") # 결과: 점검 끝이런 자동 점검은 체크리스트의 일부를 코드로 옮긴 것입니다. "상자가 부품에 맞는지"처럼 눈으로만 볼 수 있는 항목은 코드로 대신할 수 없습니다.
주의할 점
- 체크리스트는 한 번 만들고 끝이 아닙니다. 파이프라인에서 실수가 나올 때마다 그 실수를 막는 항목을 한 줄 더합니다.
- 결과가 너무 좋아 보여도 점검합니다. 중복 그림이 남아 있으면 같은 부품을 두 번 세어 개수가 부풀려집니다.