Skip to main content

비디오 이해

학습 목표

  • 비디오 CV의 주요 태스크(행동 인식, 객체 추적, Optical Flow)를 구분할 수 있다
  • 이미지 기반 CV와 비디오 CV의 차이를 이해한다
  • 각 태스크의 대표 모델과 도구를 파악한다

왜 중요한가

실세계의 많은 CV 문제는 단일 이미지가 아닌 연속된 프레임(비디오)을 다룹니다. 감시 카메라의 이상 행동 감지, 스포츠 경기의 선수 추적, 자율주행의 움직임 예측 등은 시간 정보를 활용해야 합니다. 비디오 이해는 이미지 기반 CV에 시간 차원(Temporal Dimension)을 추가한 것입니다.

주요 태스크

행동 인식 (Action Recognition)

영상 클립 내의 행동을 분류합니다. 이미지 분류의 비디오 버전입니다.
모델방식특징
I3D3D CNN시공간 특징 동시 학습
SlowFast듀얼 경로느린 경로(의미) + 빠른 경로(동작)
TimeSformerVideo Transformer시공간 Self-Attention
VideoMAEMasked Autoencoder사전학습 효율 극대화
from transformers import VideoMAEForVideoClassification, VideoMAEImageProcessor
import torch

processor = VideoMAEImageProcessor.from_pretrained("MCG-NJU/videomae-base-finetuned-kinetics")
model = VideoMAEForVideoClassification.from_pretrained("MCG-NJU/videomae-base-finetuned-kinetics")

# 16프레임 입력 (예시)
# frames: [16, H, W, 3] numpy 배열 리스트
inputs = processor(frames, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs)
    pred = outputs.logits.argmax(dim=1)
    print(f"예측 행동: {model.config.id2label[pred.item()]}")

객체 추적 (Object Tracking)

영상에서 특정 객체를 프레임 간 추적하여 궤적(Trajectory)을 생성합니다.
방식설명대표 도구
SOT (Single Object)첫 프레임에서 지정한 객체 1개 추적SiamFC, OSTrack
MOT (Multi Object)여러 객체 동시 추적ByteTrack, BoT-SORT
import supervision as sv
from ultralytics import YOLO

model = YOLO('yolo11m.pt')
tracker = sv.ByteTrack()

# 영상 처리
for frame in sv.get_video_frames_generator('video.mp4'):
    results = model(frame)[0]
    detections = sv.Detections.from_ultralytics(results)
    detections = tracker.update_with_detections(detections)

    # 추적 ID 포함 시각화
    labels = [f"ID:{tid}" for tid in detections.tracker_id]
    annotated = sv.BoxAnnotator().annotate(frame.copy(), detections)

Optical Flow

연속된 두 프레임 간 픽셀의 이동을 벡터로 표현합니다. 움직임 분석의 기초입니다.
import cv2

# Dense Optical Flow (Farneback)
prev_gray = cv2.cvtColor(prev_frame, cv2.COLOR_BGR2GRAY)
curr_gray = cv2.cvtColor(curr_frame, cv2.COLOR_BGR2GRAY)

flow = cv2.calcOpticalFlowFarneback(
    prev_gray, curr_gray, None,
    pyr_scale=0.5, levels=3, winsize=15,
    iterations=3, poly_n=5, poly_sigma=1.2, flags=0
)
# flow: [H, W, 2] - 각 픽셀의 (dx, dy) 이동량

이미지 CV vs 비디오 CV

비교 항목이미지 CV비디오 CV
입력단일 프레임프레임 시퀀스
차원공간 (H, W)공간 + 시간 (T, H, W)
계산량보통높음
핵심 추가 요소-시간 모델링, 추적
추론은 CPU로도 가능하지만 매우 느립니다. 실시간 처리를 위해서는 GPU가 필수이며, 프레임 수를 줄이거나(skip) 경량 모델을 사용하여 처리 속도를 확보할 수 있습니다.
YOLO는 프레임별 탐지만 수행하므로, 프레임 간 동일 객체를 연결하는 추적기(ByteTrack 등)가 필요합니다. supervision 라이브러리가 YOLO + 추적기를 간편하게 연결해 줍니다.

체크리스트

  • 행동 인식, 객체 추적, Optical Flow의 차이를 안다
  • 이미지 CV와 비디오 CV의 핵심 차이를 이해했다
  • SOT와 MOT의 차이를 설명할 수 있다
  • supervision + YOLO로 객체 추적 파이프라인을 구성할 수 있다

다음 문서