Skip to main content

CV 태스크 총정리

학습 목표

  • 컴퓨터 비전의 3대 핵심 태스크(분류, 탐지, 세그멘테이션)를 구분할 수 있다
  • 각 태스크의 입력, 출력, 평가 지표를 설명할 수 있다
  • 프로젝트 요구사항에 따라 적합한 태스크를 선택할 수 있다
  • 응용 태스크(포즈 추정, OCR, 깊이 추정 등)의 개요를 파악할 수 있다

왜 중요한가

CV 프로젝트의 첫 번째 의사결정은 어떤 태스크를 풀 것인가입니다. “불량 제품을 찾아라”라는 요구사항만으로는 부족합니다. 불량 여부만 판단하면 분류, 불량 위치를 표시하면 탐지, 불량 영역을 정밀하게 추출하면 세그멘테이션입니다. 태스크 선택에 따라 필요한 데이터, 모델, 평가 방법이 완전히 달라집니다.

3대 핵심 태스크

이미지 분류 (Image Classification)

이미지 전체에 하나의 레이블(Label)을 할당하는 태스크입니다.
  • 입력: 이미지 1장
  • 출력: 클래스 레이블 + 확률값
  • 예시: 고양이/강아지 구분, 제품 양품/불량 판정
  • 대표 모델: ResNet, EfficientNet, ViT
  • 평가 지표: Accuracy, F1-Score, Confusion Matrix
# 분류 모델 추론 예시
import timm
import torch

model = timm.create_model('resnet50', pretrained=True, num_classes=2)
model.eval()

# 이미지 전처리 후 추론
with torch.no_grad():
    output = model(image_tensor)  # [1, 2] 형태
    pred = torch.argmax(output, dim=1)  # 0 또는 1

객체 탐지 (Object Detection)

이미지 속 객체의 위치(바운딩 박스)와 클래스를 동시에 예측합니다.
  • 입력: 이미지 1장
  • 출력: 바운딩 박스 좌표 (x, y, w, h) + 클래스 + 신뢰도
  • 예시: 보행자 탐지, 안전장비 착용 여부, 차량 번호판 위치
  • 대표 모델: YOLO 시리즈, Faster R-CNN, DETR
  • 평가 지표: mAP@50, mAP@50:95, IoU
# YOLO 탐지 추론 예시
from ultralytics import YOLO

model = YOLO('yolo11n.pt')
results = model('image.jpg')

for box in results[0].boxes:
    cls = int(box.cls)        # 클래스 인덱스
    conf = float(box.conf)    # 신뢰도
    xyxy = box.xyxy[0]        # 바운딩 박스 좌표

세그멘테이션 (Segmentation)

픽셀 단위로 각 픽셀이 어떤 클래스에 속하는지 분류합니다.
  • 입력: 이미지 1장
  • 출력: 픽셀별 클래스 맵 (이미지와 동일 크기)
  • 예시: 의료 영상 병변 영역, 자율주행 도로/인도 구분
  • 대표 모델: UNet, DeepLabV3+, Mask R-CNN, SAM
  • 평가 지표: mIoU, Dice Score, Pixel Accuracy
# Semantic Segmentation 추론 예시
import segmentation_models_pytorch as smp

model = smp.Unet(
    encoder_name='resnet34',
    encoder_weights='imagenet',
    classes=3,  # 클래스 수
)
model.eval()

with torch.no_grad():
    mask = model(image_tensor)  # [1, 3, H, W] 형태
    pred = torch.argmax(mask, dim=1)  # [1, H, W] 픽셀별 클래스

태스크 비교표

비교 항목분류탐지세그멘테이션
출력 단위이미지 전체객체별 박스픽셀별
위치 정보없음바운딩 박스픽셀 마스크
어노테이션 난이도낮음 (레이블만)중간 (박스 그리기)높음 (픽셀 칠하기)
어노테이션 비용$$$$$$
학습 난이도낮음중간높음
추론 속도빠름보통~빠름보통~느림
대표 평가 지표Accuracy, F1mAPmIoU, Dice
대표 도구timmultralyticssmp, ultralytics

세그멘테이션 세부 유형

세그멘테이션은 목적에 따라 세 가지로 나뉩니다.
유형설명출력 예시
시맨틱(Semantic)픽셀별 클래스 분류, 같은 클래스 객체 구분 안 함모든 차량 = 같은 색
인스턴스(Instance)같은 클래스 내 개별 객체 구분차량1 = 빨강, 차량2 = 파랑
파노픽(Panoptic)시맨틱 + 인스턴스 통합배경은 시맨틱, 객체는 인스턴스

응용 태스크 개요

3대 태스크 외에도 다양한 응용 태스크가 있습니다.
태스크입력출력활용 분야
포즈 추정(Pose Estimation)이미지/영상키포인트 좌표동작 분석, 스포츠, 재활
OCR이미지텍스트 문자열문서 디지털화, 번호판 인식
깊이 추정(Depth Estimation)단안 이미지깊이 맵3D 재구성, AR/VR
이미지 생성(Image Generation)텍스트/노이즈생성 이미지콘텐츠 제작, 데이터 증강
행동 인식(Action Recognition)영상 클립행동 레이블감시, 스포츠 분석
객체 추적(Object Tracking)영상궤적(Trajectory)자율주행, 스포츠

태스크 선택 가이드

프로젝트 요구사항에 따른 태스크 선택 흐름입니다.

실무 의사결정 예시

요구사항추천 태스크이유
제품 양품/불량 판정분류위치 불필요, 전체 판단만
불량 부위 표시탐지대략적 위치 필요
불량 면적 측정세그멘테이션정확한 영역 필요
안전모 착용 확인탐지사람+안전모 위치 필요
도로 영역 인식Semantic Seg도로/비도로 영역 구분
폐암 병변 윤곽Instance Seg개별 병변 식별 필요
태스크 선택은 프로젝트 초기에 결정해야 합니다. 나중에 변경하면 데이터 어노테이션을 처음부터 다시 해야 할 수 있습니다. 분류 데이터로 탐지를 할 수 없고, 바운딩 박스 데이터로 세그멘테이션을 하기 어렵습니다.

태스크별 데이터 어노테이션

태스크어노테이션 형식도구작업 시간 (이미지당)
분류폴더 분류 또는 CSV폴더 정리1~3초
탐지바운딩 박스 (YOLO, COCO)Label Studio, CVAT15~60초
Semantic Seg픽셀 마스크Label Studio, CVAT1~5분
Instance Seg다각형(Polygon)Label Studio, CVAT2~10분
가능합니다. 탐지 모델의 출력에서 바운딩 박스를 무시하고 클래스만 사용하면 분류처럼 활용할 수 있습니다. 그러나 일반적으로 태스크별로 최적화된 모델을 사용하는 것이 성능이 좋습니다.
아닙니다. 세그멘테이션은 더 정밀하지만 어노테이션 비용이 높고, 추론 속도가 느리며, 모든 상황에서 픽셀 단위 정밀도가 필요하지는 않습니다. 예를 들어 자동차 대수를 세는 것이 목적이라면 탐지로 충분합니다.
분류 → 탐지 → 세그멘테이션 순서를 추천합니다. 분류는 가장 단순하여 기초를 다지기 좋고, 탐지는 분류 + 위치 예측이며, 세그멘테이션은 가장 정밀한 형태이므로 점진적으로 복잡도를 높이는 것이 효과적입니다.
네. YOLO 시리즈는 탐지, 세그멘테이션, 포즈 추정, 분류를 하나의 프레임워크로 지원합니다. SAM은 프롬프트에 따라 다양한 세그멘테이션을 수행합니다. 다만 멀티태스크 모델이 항상 최선은 아니며, 프로젝트 요구에 따라 전문 모델을 선택하는 것이 유리할 수 있습니다.

체크리스트

  • 분류, 탐지, 세그멘테이션의 입출력 차이를 설명할 수 있다
  • 각 태스크의 대표 평가 지표를 안다
  • Semantic, Instance, Panoptic 세그멘테이션의 차이를 이해했다
  • 프로젝트 요구사항에 따라 적합한 태스크를 선택할 수 있다
  • 응용 태스크(포즈, OCR, 깊이 추정 등)의 존재를 인지했다
  • 태스크별 어노테이션 비용 차이를 이해했다

다음 문서