OpenCV 비전 실무19장 · Vision 데이터 파이프라인3 / 21← 이전목차다음 →MetaContents

19장. Vision 데이터 파이프라인

파이프라인이란

택배 분류 센터에서는 상자가 컨베이어를 타고 흘러갑니다. 첫 칸에서 송장을 읽고, 둘째 칸에서 찌그러진 상자를 빼고, 셋째 칸에서 다시 포장하고, 넷째 칸에서 지역을 나누고, 마지막 칸에서 몇 개가 나갔는지 셉니다. 칸마다 받는 것과 내보내는 것이 정해져 있어서, 한 칸의 일꾼이 바뀌어도 라인은 그대로 돌아갑니다.

수집, 거르기, 다듬기, 추론, 보고의 다섯 단계를 화살표로 이은 흐름도

그림의 다섯 상자를 왼쪽에서 오른쪽으로 읽습니다. 1장에서는 모으기, 거르기, 다듬기, 늘리기, 알아보기의 다섯 단계를 보았습니다. 늘리기(증강)는 학습할 때만 하는 일이라, 학습이 끝난 모델로 새 그림을 검사하는 이 장에서는 빼고, 끝에 "보고" 단계를 붙였습니다. 여기서 송장 읽기가 수집, 찌그러진 상자 빼기가 거르기, 다시 포장하기가 다듬기, 지역 나누기가 추론, 출고 개수 세기가 보고입니다. 비유와 다른 점도 있습니다. 택배 라인은 상자 여러 개가 동시에 여러 칸에 있지만, 이 장의 파이프라인은 한 단계가 그림 전부를 처리한 뒤 다음 단계로 넘깁니다.

단계마다 받는 것과 내보내는 것

단계받는 것내보내는 것쓰는 앞 장
수집폴더 이름, 동영상 이름그림 항목 목록(파일 이름, 출처)15장, 17장
거르기그림 항목 목록통과한 항목(그림 배열 포함), 탈락 기록16장, 17장
다듬기통과한 항목320×240 으로 맞춘 그림, 손질 기록5장, 6장, 14장
추론다듬은 그림물체 표(한 행 = 물체 하나)18장
보고물체 표, 기록상자 그림 격자, 클래스별 개수, 깔때기 표17장, 18장

짧은 예시

Python
# 파이프라인을 (단계 이름, 받는 것, 내보내는 것) 목록으로 적어 두고 차례로 찍는다
pipeline = [
    ("수집", "폴더 이름", "그림 항목 목록"),
    ("거르기", "그림 항목 목록", "통과한 항목"),
    ("다듬기", "통과한 항목", "맞춘 그림"),
    ("추론", "맞춘 그림", "물체 표"),
    ("보고", "물체 표", "그림과 표"),
]
for no, (stage, given, made) in enumerate(pipeline, start=1):
    print(f"{no}. {stage}: {given} → {made}")

# 앞 단계가 내보낸 것과 다음 단계가 받는 것이 같은지 확인한다
for (a, _, made), (b, given, _) in zip(pipeline, pipeline[1:]):
    print(a, "→", b, "이어짐" if made == given else "끊김")
# 결과: 수집 → 거르기 이어짐 ... 추론 → 보고 이어짐 (넷 모두 이어짐)

zip(pipeline, pipeline[1:]) 은 목록을 한 칸 밀어 짝지어서 (첫째, 둘째), (둘째, 셋째) 처럼 이웃한 두 단계를 꺼냅니다. 앞 단계의 출력과 다음 단계의 입력이 같아야 라인이 이어집니다.

주의할 점

  • 파이프라인은 앞 단계의 실수를 뒤로 그대로 넘깁니다. 깨진 그림을 거르기에서 놓치면 추론 단계에서 오류가 나거나 엉뚱한 상자가 나옵니다. 앞쪽 단계일수록 꼼꼼히 만듭니다.
  • 한 번에 다섯 단계를 다 짜지 않습니다. 단계 하나를 만들고 결과를 확인한 뒤 다음 단계를 붙입니다(실습 1부터 실습 4까지가 이 순서입니다).
← 이전 절19장 · 용어 짚고 가기다음 절 →19장 · 단계를 함수로 나누기