비디오-언어 모델(Video-Language Models): 시간 토큰(Temporal Tokens)과 그라운딩(Grounding)
비디오는 사진을 쌓아 놓은 것이 아닙니다. 5초짜리 클립에도 이미지 모델(image model)이 표현할 수 없는 인과적 순서, 동작 동사, 사건 발생 시간이 들어 있습니다. Video-LLaMA(Zhang et al., 2023년 6월)는 오디오-비주얼 그라운딩(audio-visual grounding)을 갖춘 최초의 공개 비디오 LLM(video-LLM)을 내놓았습니다. VideoChat과 Video-LLaVA는 이 패턴을 더 확장했습니다. 2025년에는 Qwen2.5-VL의 TMRoPE가 최전선 독점 모델(frontier proprietary models)과의 격차를 좁혔습니다. 각 시스템은 시간 토큰을 서로 다르게 풀었습니다. Video-LLaMA는 클립마다 Q-former를 쓰고, Video-LLaVA 계열은 프레임별 concat-pool을 쓰며, Qwen2.5-VL은 토큰마다 TMRoPE를 적용합니다. 이 lesson에서는 이러한 패턴을 읽고, 균등 샘플러(uniform sampler)와 동적 FPS(dynamic-FPS) 프레임 샘플러를 만든 뒤, 시간적 그라운딩(temporal grounding) 과제에서 평가합니다.
유형: Build
언어: Python (표준 라이브러리, 프레임 샘플러 + 시간적 그라운딩 평가기)
선수 지식: Phase 12 · 08 (LLaVA-OneVision)
예상 시간: 약 180분
학습 목표
- 시간적 위치 인코딩(temporal positional encoding)이 비전 인코더(vision encoder)와 독립적으로 비디오 VLM 성능을 바꾸는 이유를 설명합니다.
- 균등 샘플링, 동적 FPS, 이벤트 기반(event-driven) 프레임 샘플링을 초당 토큰 수(tokens-per-second)와 그라운딩 정확도 관점에서 비교합니다.
- 클립별 Q-former(Video-LLaMA), 프레임별 풀링(pooled-per-frame, Video-LLaVA), 토큰별 M-RoPE(Qwen2.5-VL) 설계를 설명합니다.
- 네 가지 비디오 벤치마크인 VideoMME, TempCompass, EgoSchema, Video-MMMU의 이름과 역할을 말할 수 있습니다.
문제
30 FPS의 1분짜리 비디오는 1,800프레임입니다. 프레임마다 196개의 비주얼 토큰(visual tokens)을 만든다고 가정하면, 예를 들어 224 해상도의 ViT-B에서는 총 352,000토큰이 됩니다. 이는 2024년대 LLM 문맥(context) 크기보다 큽니다.
이 문제를 줄이는 전략은 크게 세 가지입니다.
- 콘텐츠에 따라 1-8 FPS 정도로 프레임을 서브샘플링(subsample)합니다.
- 각 프레임의 패치 토큰(patch tokens)을 3x3 또는 4x4 양선형 풀링(bilinear pool)으로 강하게 압축합니다.
- 16프레임 클립을 받아 64토큰을 출력하는 Q-former로 압축합니다.
각 전략의 손실은 다릅니다. 서브샘플링은 시간적 세부 정보(temporal detail)를 잃습니다. 풀링은 공간적 세부 정보(spatial detail)를 잃습니다. Q-former는 둘을 조금씩 잃지만 토큰을 크게 아낍니다.
다른 축은 시간적 위치 인코딩입니다. 모델은 5번 프레임이 6번 프레임보다 먼저 왔다는 사실을 어떻게 알까요? 선택지는 Video-LLaMA의 단순한 1차원 시간 RoPE(1D temporal RoPE), Video-LLaVA의 학습된 시간 임베딩(learned temporal embeddings), Qwen2.5-VL의 완전한 3차원 TMRoPE가 있습니다.
개념
Video-LLaMA(2023)는 최초의 공개 비디오 LLM이었습니다. 구조는 다음과 같습니다.
- 2 FPS로 16프레임 클립을 사용합니다. 즉 한 클립은 8초입니다.
- 프레임별 ViT 특징(features) -> 16프레임 전체에 대해 교차 어텐션(cross-attention)을 수행하는 Video Q-former -> 32개의 학습된 쿼리(learned queries) -> LLM으로 이어집니다.
- 병렬 오디오 분기도 있습니다. 파형(waveform) -> ImageBind 오디오 인코더 -> Audio Q-former -> 32개 쿼리 -> LLM으로 이어집니다.
강점은 오디오와 비주얼을 함께 추론(audio-visual joint reasoning)할 수 있다는 점입니다. 약점은 클립 길이가 고정되어 있고, 임의 시점에 대한 시간 그라운딩을 처리하기 어렵다는 점입니다.
VideoChat과 Video-LLaVA
VideoChat은 Video-LLaMA의 아이디어를 유지하되 오디오를 제거하고 구조를 단순화했습니다. Video-LLaVA(Lin et al., 2023)는 이미지와 비디오 프레임 모두에 대해 하나의 비주얼 인코더를 학습했습니다. 이 방식은 "투영 전 정렬(alignment before projection)"이라고 부르며, 이미지와 비디오를 하나의 통합 표현(unified representation)으로 다루게 해줍니다. 두 모델 모두 동결된 CLIP 인코더(frozen CLIP encoder) + MLP + LLM 구조입니다.
둘 다 장편 비디오(long video)를 처리하지는 못합니다. 두 시스템은 기본적으로 8-16프레임 시스템입니다.
Qwen2.5-VL과 TMRoPE
Qwen2.5-VL은 TMRoPE(Temporal-Modality Rotary Position Embedding)를 도입했습니다. 각 패치 토큰은 (t, h, w) 위치를 가집니다. 여기서 t는 프레임 인덱스가 아니라 실제 타임스탬프(actual timestamp)입니다.
단순 시간 임베딩과의 핵심 차이는 다음과 같습니다.
- 인덱스가 아니라 절대 시간(absolute time)을 봅니다. 모델은 "15번 프레임에서"가 아니라 "4.2초 시점에"라는 정보를 봅니다.
- 클립 단위가 아니라 토큰 단위 회전(per-token rotation)을 합니다. 각 비주얼 토큰이 자신의 타임스탬프에 따라 독립적으로 회전합니다.
- 동적 FPS와 호환됩니다. 어떤 구간에서는 2 FPS로, 다른 구간에서는 4 FPS로 샘플링하더라도 TMRoPE는 그 불균등한 간격을 자연스럽게 처리합니다.
TMRoPE는 "고양이가 몇 초에 점프했는가?" 같은 질문을 가능하게 합니다. 모델은 "4.2초 시점"이라고 답할 수 있습니다. Video-LLaMA는 "클립 초반" 정도로만 말할 수 있었습니다.
프레임 샘플링 전략
균등 샘플링(uniform sampling)은 전체 길이에 걸쳐 N개의 프레임을 고르게 뽑습니다. 단순하지만 움직임이 가장 큰 순간(motion peaks)을 놓칠 수 있습니다.
동적 FPS(dynamic FPS)는 움직임 강도(motion intensity)에 따라 적응적으로 샘플링합니다. 옵티컬 플로(optical flow)나 프레임 차분(frame differencing)을 이용해 움직임이 큰 구간을 더 촘촘히 뽑습니다. Qwen2.5-VL은 이 방식으로 학습합니다.
이벤트 기반(event-driven) 샘플링은 가벼운 검출기(lightweight detector)를 먼저 실행한 뒤, 동작이 일어나는 구간을 더 많이 샘플링합니다. VideoAgent에서 쓰이는 방식입니다.
키프레임 + 문맥(keyframe + context)은 장면 전환(shot boundaries)과 그 주변 몇 프레임을 함께 뽑습니다. 영화적 콘텐츠(cinematic content)에 적합합니다.
프레임별 풀링
1 FPS, 프레임당 576토큰으로 5분짜리 클립을 처리하면 172,800토큰이 됩니다. Qwen2.5-VL-72B의 128k 문맥으로도 감당하기 어렵거나 매우 비쌉니다.
3x3 양선형 풀링은 프레임당 토큰 수를 64개로 줄입니다. 그러면 5분 비디오가 19,200토큰으로 줄어듭니다. 대부분의 과제에서 좋은 절충점입니다.
에이전트 워크플로(agent workflows)처럼 공간적 세부 정보가 덜 중요한 경우에는 더 강하게 풀링할 수 있습니다. 예를 들어 6x6 풀링은 프레임당 16토큰까지 줄입니다.
네 가지 비디오 벤치마크
- VideoMME: 짧은 비디오, 중간 길이 비디오, 긴 비디오를 모두 포함하는 종합 비디오 이해 벤치마크입니다.
- TempCompass: "이전(before)" / "이후(after)" 질문처럼 세밀한 시간 추론(fine-grained temporal reasoning)을 평가합니다.
- EgoSchema: 긴 시간 범위(long-horizon)의 1인칭 비디오(first-person video)를 평가합니다.
- Video-MMMU: 여러 학문 분야를 포함하는 멀티모달 비디오 질문(multimodal multi-discipline video questions)을 평가합니다.
완전한 비디오 VLM 평가는 네 벤치마크를 모두 다룹니다. 각 벤치마크는 서로 다른 축을 압박합니다. TempCompass는 순서(ordering)가 핵심이고, EgoSchema는 3분 이상 추론이 핵심이며, VideoMME는 다양한 길이를 포괄합니다.
그라운딩 출력 형식
시간적 그라운딩의 출력 형식은 다음과 같습니다.
- 자유 텍스트(free text): "고양이는 4초쯤에 점프합니다." 파싱은 쉽지만 부정확합니다.
- 구조화 JSON(structured JSON):
{"event": "jump", "start": 4.1, "end": 4.3}. Qwen2.5-VL은 이런 형식으로 학습합니다.
- 토큰 기반(token-based): 답변 안에 특수
<time>4.1</time> 토큰을 섞어 넣습니다. Qwen2.5-VL의 내부 형식입니다.
다운스트림(downstream)에서 쓰기에는 토큰 기반이 가장 정확합니다. 다만 Qwen2.5-VL의 JSON 출력 형식은 바로 파싱할 수 있습니다.
2026년 기준 권장 방식
2026년에 비디오 VLM을 만든다면 다음 구성이 기본 선택지입니다.
- 인코더: M-RoPE 또는 TMRoPE를 갖춘 SigLIP 2(Qwen2.5-VL 계열)
- 프레임 샘플링: 최대 프레임 수 제한(max-frame cap)을 둔 동적 FPS. 움직임에 따라 1-4 FPS를 사용합니다.
- 프레임별 풀링: 3x3 양선형 풀링
- 출력: 시간과 이벤트 필드를 포함한 구조화 JSON
- 벤치마크: 일반 평가는 VideoMME + TempCompass, 긴 시간 범위 평가는 EgoSchema
사용해보기
code/main.py에는 다음이 포함되어 있습니다.
- 균등 프레임 샘플러와 동적 FPS 프레임 샘플러
- 장난감 수준의 시간적 그라운딩 평가기. 시간
T에 있는 정답(ground truth) 이벤트와 모델 출력을 받아 허용 오차(tolerance) 기준으로 정확도를 계산합니다.
- Video-LLaMA(16프레임, Q-former), Video-LLaVA(8프레임, MLP), Qwen2.5-VL(동적 FPS + TMRoPE)의 비교
산출물 만들기
이 lesson은 outputs/skill-video-vlm-frame-planner.md를 만듭니다. 비디오 과제(모니터링, 동작 인식, 시간적 그라운딩, 요약)가 주어지면 프레임 샘플러, 풀링 계수, 출력 형식, 예상 정확도 등급을 고릅니다.
연습문제
-
3분짜리 요리 시연 영상에는 균등 FPS와 동적 FPS 중 무엇을 고르겠습니까? 토큰 수 계산과 함께 정당화합니다.
-
TMRoPE는 단순한 시간 임베딩 테이블이 할 수 없는 무엇을 구체적으로 추가합니까?
-
VLM이 학습해서 출력할 수 있는 시간적 그라운딩용 JSON 스키마를 작성합니다. 오류 사례(error cases)도 포함합니다.
-
Video-LLaVA 논문의 Section 3, "Alignment Before Projection"을 읽습니다. 이미지 인코더와 비디오 인코더를 따로 학습하는 것보다 왜 더 나은지 설명합니다.
-
VideoMME 리더보드를 기준으로, 2026년 현재 최상위 공개 모델과 최상위 독점 모델 사이의 격차는 얼마입니까? 그 격차 중 어느 정도가 시간 인코딩 때문이고, 어느 정도가 기반 LLM 규모 때문입니까?
핵심 용어
| 용어 | 흔한 설명 | 실제 의미 |
|---|
| 시간적 그라운딩(Temporal grounding) | "시간 위치가 붙은 답변" | VLM이 어떤 이벤트가 언제 일어나는지 구체적인 타임스탬프 범위로 출력하는 능력 |
| TMRoPE(Temporal-Modality Rotary Position Embedding) | "시간-멀티모달 RoPE" | Qwen2.5-VL에서 쓰는 절대 타임스탬프 기반 3차원 회전 위치 표현 |
| 동적 FPS(Dynamic FPS) | "움직임 인식 샘플링" | 움직임이 큰 구간에서는 더 많은 프레임을, 정적인 구간에서는 더 적은 프레임을 샘플링하는 방식 |
| 프레임 풀링(Frame pooling) | "프레임별 공간 압축" | LLM에 넣기 전에 양선형 보간으로 프레임당 패치 수를 줄이는 방법 |
| Video Q-former | "클립 압축기" | N개 프레임을 K개의 학습된 쿼리로 매핑하는 교차 어텐션 병목 구조 |
| VideoMME | "비디오 벤치마크" | 2,500개 이상의 샘플을 포함하는 짧은/중간/긴 비디오 종합 벤치마크 |
더 읽을거리