Temporal Structure of Video Data
비디오의 시간적 구조
비디오는 공간(H×W)과 시간(T)이 동시에 중요한 4D 텐서다 — 메모리 비용이 이미지의 T배이며, 이를 극복하기 위한 temporal modeling 전략(3D CNN, 2D+Temporal, VideoMAE, 프레임 샘플링)의 선택이 전체 시스템 성능과 비용을 결정한다.
Overview
비디오를 이미지의 단순한 시퀀스로 취급하면 놓치는 것이 있다. 물이 끓는 것인지 식는 것인지, 문이 열리는 것인지 닫히는 것인지 — 이 정보는 단일 프레임에 없고 시간의 흐름에 있다. 비디오 이해의 핵심 도전은 이 시간적 의존성(temporal dependency)을 효율적으로 모델링하면서 동시에 메모리와 연산의 벽(memory and compute wall)을 극복하는 것이다.
비디오의 메모리 비용은 압도적이다. 1초짜리 30fps HD 비디오는 이미지 30장이다. 실제 액션 인식 모델이 주로 사용하는 16-32 프레임 클립은 이미지 배치보다 16-32배 더 많은 메모리를 소비한다. 이 제약이 비디오 모델 설계의 모든 결정을 지배한다 — 몇 프레임을 쓸 것인가, 해상도를 얼마나 낮출 것인가, 시간과 공간을 분리할 것인가.
2021년 VideoMAE(Masked Autoencoder for Video)는 이 분야의 패러다임을 바꾸었다. 이미지에서 MAE가 효과적이었듯, 비디오에서도 극단적 마스킹(90% 이상)을 통한 자기지도학습이 강력한 시공간 표현을 만들 수 있음을 보였다. 현재 비디오 foundation model(VideoMAE V2, InternVideo2)은 이 방향에서 발전하고 있다.
- 비디오 데이터의 메모리/연산 비용이 이미지 대비 얼마나 더 큰지 정량적으로 계산할 수 있다
- 3D CNN과 2D+Temporal 아키텍처의 trade-off를 설명할 수 있다
- VideoMAE의 masked autoencoding이 비디오에서 효과적인 이유를 이해한다
- 주어진 비디오 태스크에 맞는 프레임 샘플링 전략을 선택할 수 있다
Sections
비디오 텐서와 메모리 벽
비디오 데이터의 기본 형태는 (N, T, C, H, W) 또는 (N, C, T, H, W)다. 여기서 T는 프레임 수다. PyTorch의 video 처리 라이브러리들은 주로 (N, C, T, H, W) 형태를 사용하고, 일부는 (N, T, C, H, W)를 사용한다. 혼동하지 않도록 주의가 필요하다.
실제 숫자를 보자. float32 기준:
- 이미지 배치 32장 (3×224×224): 37 MB
- 비디오 배치 32클립 ×16프레임 (3×224×224): 602 MB
- 비디오 배치 32클립 ×32프레임 (3×384×384): 7.2 GB
마지막 케이스는 A100 80GB GPU에서 단일 forward pass에 전체 GPU 메모리의 9%를 차지한다. Gradient, optimizer state까지 고려하면 batch size를 4-8로 제한해야 한다.
이 제약에서 비롯된 실용적 전략들:
- Sparse sampling: 16-32 프레임을 균등 샘플링 (TSN)
- Short clip training: 2초 클립으로 훈련, 추론시 여러 클립 앙상블
- Reduced resolution: 224 → 112 px (4배 메모리 절약)
- Mixed precision: float16으로 2배 절약 (gradient scaler 필요)
광학 흐름: 운동의 명시적 표현
광학 흐름(Optical Flow)은 연속된 두 프레임 사이에서 각 픽셀의 이동 벡터를 계산한다. 결과는 (H, W, 2) 형태의 벡터 필드다 — 각 픽셀에 x 방향과 y 방향 이동량이 할당된다.
Dense Optical Flow 알고리즘(Farnebäck, RLOF)은 전통적 컴퓨터 비전 방법이고, 딥러닝 기반(FlowNet, RAFT, PWC-Net)은 더 정확하지만 느리다.
비디오 이해에서 광학 흐름의 역할:
두 스트림 모델(Two-stream Networks, Simonyan 2014)은 RGB 프레임과 광학 흐름을 별도 스트림으로 처리해 결합했다. RGB는 외관(appearance), 광학 흐름은 운동(motion)을 담당한다. ActionNet, I3D의 성능 향상에 핵심적이었다.
현재 트렌드: VideoMAE, TimeSformer 같은 대규모 사전학습 모델은 optical flow 없이도 RGB만으로 temporal motion을 학습한다. 추가 연산 비용(optical flow 계산은 실시간 처리에서 병목)과 성능 개선 없이 comparable한 결과를 낸다. 새 시스템 설계 시 optical flow는 특수한 경우(low-level motion estimation, 제한된 사전학습 데이터 환경)가 아니면 생략하는 추세다.
3D CNN vs 2D+Temporal 아키텍처
시간축을 모델에 통합하는 두 가지 주요 전략이 있다.
3D Convolution(C3D, I3D, SlowFast): 합성곱 커널이 공간(H,W)뿐 아니라 시간(T) 차원도 포함한다. 예: 3×3×3 커널. 장점: 시공간 패턴을 동시에 학습. 단점: 파라미터 수와 연산량이 2D 대비 크게 증가.
2D+Temporal(TSM, TimeSformer): 2D 합성곱 또는 Spatial Attention으로 공간 처리, Temporal Shift 또는 Temporal Attention으로 시간 처리를 분리한다.
| 아키텍처 | 시간 처리 방식 | 연산 비용 | 정확도 | 특성 |
|---|---|---|---|---|
| C3D | 3D Conv | 매우 높음 | 중간 | 단순, 초기 방법 |
| I3D | 3D Conv (Inception 기반) | 높음 | 높음 | Two-stream과 결합 |
| TSM | Temporal Shift | 낮음 | 중간-높음 | 2D 모델 수정, 효율적 |
| TimeSformer | Divided Space-Time Attention | 중간 | 높음 | ViT 기반 |
| VideoMAE | Tube masking + Transformer | 중간 | 최고 | 사전학습 강력 |
**TSM(Temporal Shift Module)**은 특히 실용적이다. 기존 2D ResNet에 shift 연산만 추가해 시간적 정보 교환을 가능하게 한다. 추가 파라미터 없이 3D CNN에 근접한 성능을 낸다. 엣지 디바이스나 실시간 처리가 필요할 때 유용하다.
VideoMAE와 비디오 Foundation Models
VideoMAE(2022)는 MAE 아이디어를 비디오로 확장했다. 핵심 통찰: 비디오는 이미지보다 시공간 중복이 훨씬 높아서, 90-95% 마스킹을 해도 복원 가능하다. 이 극단적 마스킹이 모델이 진짜 시공간 이해를 학습하도록 강제한다.
Tube Masking: 같은 공간 위치의 여러 시간 프레임을 함께 마스킹한다. 공간적 중복을 제거해 모델이 시간적 추론에 집중하도록 강제한다.
VideoMAE가 학습한 표현은 few-shot 환경에서 특히 강력하다. Something-Something V2(미묘한 시간적 액션) 벤치마크에서 기존 supervised 모델을 능가했다.
현재 비디오 Foundation Model 생태계:
- VideoMAE V2: 100만 시간 비디오 사전학습. 범용 액션 인식
- InternVideo2: 멀티스테이지 학습. 비디오-텍스트 정렬 포함
- Qwen-VL, GPT-4V: 멀티모달 LLM의 비디오 이해 능력 통합
AI 엔지니어 관점에서: 새 비디오 이해 태스크가 주어지면 VideoMAE V2나 InternVideo2를 linear probe로 먼저 평가하고, 성능이 부족할 때만 full fine-tuning을 고려하라.
이미지 모델로 비디오를 이해하려는 것은 영화를 스크린샷으로만 이해하려는 것과 같다. 단 한 장의 스크린샷만 봐도 배우의 얼굴, 장소, 색감을 알 수 있다. 하지만 그 장면이 코믹한지 비극적인지, 그 문이 열리고 있는지 닫히고 있는지는 알 수 없다. 연속된 프레임의 흐름이 있어야 비로소 '이야기'를 이해할 수 있다.
3D CNN은 단편 영화 학습법이다. 짧은 클립(2-3초)을 통째로 보고 시공간 패턴을 학습한다. 세밀한 운동 패턴은 잘 포착하지만, 비용이 비싸다. TSM은 메모지 끼워넣기와 같다. 각 프레임 사진에 '이전 프레임에서 이것이 여기 있었다'는 메모지를 끼워 넣어 시간 정보를 전달한다. 추가 비용 없이 시간적 이해를 가능하게 한다.
VideoMAE는 극단적 스피드 리딩 훈련과 같다. 영화의 95%를 가리고 나머지 5%에서 전체 내용을 복원하도록 훈련한다. 처음에는 불가능해 보이지만, 충분히 훈련하면 영화의 맥락과 패턴을 깊게 이해하게 된다. 이 과정에서 얻는 표현이 실제 비디오 이해 태스크에서 강력하게 작동한다.
PyTorch로 비디오 클립을 로드하고 프레임 샘플링 전략을 구현해보자. 균등 샘플링, 랜덤 샘플링, 그리고 KeyFrame 샘플링의 차이를 이해하는 것이 비디오 파이프라인 설계의 시작이다.
import torch
import numpy as np
from typing import Literal
def sample_frames(
total_frames: int,
num_frames: int,
strategy: Literal["uniform", "random", "dense"] = "uniform",
clip_duration: int = 1 # dense 샘플링 시 연속 클립 길이
) -> np.ndarray:
"""
비디오에서 프레임 인덱스를 샘플링한다.
strategy:
- uniform: 전체 비디오에서 균등 간격 (TSN, CLIP 스타일)
- random: 균등 구간에서 랜덤 (훈련시 augmentation)
- dense: 연속 클립 (3D CNN, VideoMAE 스타일)
"""
if strategy == "uniform":
# 전체 비디오를 num_frames 구간으로 나눠 각 중앙 프레임 선택
indices = np.linspace(0, total_frames - 1, num_frames)
return indices.astype(int)
elif strategy == "random":
# 각 구간 내 랜덤 위치 선택 (훈련시 temporal augmentation)
segment_size = total_frames / num_frames
indices = [
int(i * segment_size + np.random.uniform(0, segment_size))
for i in range(num_frames)
]
return np.clip(indices, 0, total_frames - 1)
elif strategy == "dense":
# 랜덤 시작점에서 연속 프레임 (3D CNN / VideoMAE 방식)
max_start = total_frames - num_frames * clip_duration
start = np.random.randint(0, max(1, max_start))
return np.arange(start, start + num_frames * clip_duration, clip_duration)
# 30fps × 30초 = 900프레임 비디오에서 16프레임 샘플링
total = 900
print("Uniform:", sample_frames(total, 16, "uniform")[:8], "...")
print("Random: ", sample_frames(total, 16, "random")[:8], "...")
print("Dense: ", sample_frames(total, 16, "dense", clip_duration=2)[:8], "...") 세 전략의 차이를 이해하면 어떤 모델과 태스크에 어떤 전략이 맞는지 파악할 수 있다. Uniform은 긴 비디오에서 전체 맥락을 잡는 데 좋다(예: 요리 비디오 분류). Random은 훈련 시 temporal augmentation 역할을 한다 — 모델이 특정 시간대에 과적합하지 않도록. Dense는 짧은 시간 안의 세밀한 운동 패턴이 중요한 경우에 적합하다(예: 손동작 인식). VideoMAE 같은 self-supervised 모델은 Dense 방식의 tube를 마스킹한다.
✅ 시니어가 보는 것
- 비디오 데이터 메모리 비용을 즉시 계산하고 배치 크기와 GPU 요구사항을 추정하는 능력
- 태스크 특성(fine-grained motion vs. long-term activity)에 맞는 프레임 샘플링 전략 선택
- 3D CNN vs TSM vs VideoMAE 중 배포 환경(엣지/서버)에 맞는 선택과 근거
- VideoMAE linear probe로 표현 품질을 빠르게 검증하는 워크플로 이해
⚠️ 레드 플래그
- 비디오 전체를 frame-by-frame 이미지 모델로 처리하고 평균 pooling — temporal dependency 완전 무시
- 모든 비디오 태스크에 VideoMAE full fine-tuning 제안 — 비용 대비 효과 고려 없음
- optical flow를 항상 추가해야 한다고 주장 — 현재 VideoMAE/TimeSformer가 optical flow 없이도 competitive
🎤 예상 인터뷰 질문
- 30fps 720p 비디오 10초 클립 배치 16개를 float32로 GPU에 올리면 메모리가 얼마나 필요합니까?
- Something-Something 데이터셋(미묘한 손동작)과 Kinetics 데이터셋(일반 액션)에 대해 각각 어떤 frame sampling 전략을 쓰겠습니까?
- 실시간(30fps) 비디오 감시 시스템에서 3D CNN 대신 TSM을 선택하는 이유를 설명해보세요.
Key Takeaways
비디오 = 이미지의 T배 메모리
T=16 프레임은 이미지 배치 대비 16배 메모리가 필요하다. 이 수치가 모든 설계 결정의 출발점이다.
Temporal modeling의 두 패러다임
3D Conv(시공간 동시 처리)와 2D+Temporal(분리 처리) — 비용-정확도 트레이드오프가 다르다.
TSM은 실용적 선택
2D ResNet에 shift 연산만 추가, 파라미터 증가 없이 temporal modeling 가능 — 엣지/실시간 환경의 기본값.
VideoMAE = 비디오의 MAE
90%+ 마스킹으로 강력한 시공간 표현 학습. 현재 비디오 foundation model의 핵심 사전학습 방법이다.
Optical flow는 선택사항
대규모 사전학습 모델 시대에 optical flow의 성능 기여가 줄었다. 실시간 시스템에서는 오히려 병목이 된다.
프레임 샘플링 전략이 중요하다
Uniform, Random, Dense — 태스크 특성에 따라 선택이 달라지며, 이것이 성능을 크게 좌우한다.