TT Lab
요금제

한국어

시작하기
블로그

블로그

영상 모델: 3D 합성곱, 두 갈래(SlowFast), 주의(TimeSformer) — 그리고 영상에서 가리고 맞히기(VideoMAE)

상태: 초안 (2026-10-13). 논문 수치는 원문을 열어 조건과 함께 확인했습니다. 직접 해 본 것은 노트북 CPU 의 numpy 예제(code/06_video_cost.py, 1초 미만)입니다. 이 편의 영상 모델을 탁구 영상에 돌려 본 적은 없습니다(미실측). 시리즈 「비전 모델 읽기 2」 6편. 앞 편: 광류와 RAFT. 2D 합성곱과 ViT 는 비전 모델 읽기 1을 보세요.

목차

1. 직관: 사진 한 장으로는 모르는 것

정지 사진 한 장으로 「라켓을 든 선수」는 알 수 있지만, 그 선수가 치는 중인지, 치고 난 뒤인지, 치려고 준비하는 중인지는 모릅니다. 「문을 여는 중」과 「문을 닫는 중」은 사진 한 장으로는 같은 장면입니다. 영상 모델은 이 차이, 곧 시간 순서에 담긴 정보를 배우려고 합니다.

방법은 크게 세 갈래입니다.

시간을 다루는 세 방식 ① 3D 합성곱 C3D · I3D 필터가 가로·세로·시간을 함께 훑는다(3×3×3) I3D: 2D 필터를 시간으로 N번 복사 ÷ N 으로 출발 → 멈춘 영상에서 2D 와 같은 답 값싼 변형: TSM(채널 일부를 앞뒤 프레임으로 밀기) ② 두 갈래 Two-stream · SlowFast 느린 길: 프레임 드문드문, 채널 많음 빠른 길: 프레임 8배 촘촘, 채널 ⅛ 느린 길 = 모양, 빠른 길 = 움직임(계산은 약 20%) ③ 주의(attention) TimeSformer · ViViT a) 시간: 같은 자리의 다른 프레임과 비교 (프레임 4장의 같은 칸) b) 공간: 같은 프레임의 다른 자리와 비교 (한 프레임 안의 이웃 칸) 한 블록에서 a → b 순서. 한꺼번에보다 훨씬 싸다
그림: 3D 합성곱, 두 갈래, 시간·공간 주의
  1. 3D 합성곱: 필터를 가로·세로에 더해 시간 방향으로도 늘린다.
  2. 두 갈래: 모양을 보는 길과 움직임을 보는 길을 나눈다.
  3. 주의(attention): 토큰들이 시간과 공간을 넘나들며 서로를 참고한다.

어느 쪽이든 학습은 대부분 지도 학습입니다. 「이 클립은 ‘탁구 치기’」 같은 영상 단위 라벨로 분류를 학습합니다. 대표 데이터셋은 Kinetics(약 24만 개 학습 영상, 400종 행동)입니다. 마지막 절의 VideoMAE 만 라벨 없이 사전학습합니다.

2. 3D 합성곱: C3D 와 I3D

C3D: 시간도 3칸

C3D(2015)는 합성곱 필터를 3×3 에서 3×3×3 으로 늘렸습니다. 16프레임 × 112×112 클립을 넣고, 시간 깊이를 1·3·5·7 로 바꿔 본 끝에 3이 가장 좋았습니다(논문, 다만 좁은 범위에서만 비교했다고 스스로 적었습니다). 스포츠 영상 110만 개(Sports-1M, 487종)로 처음부터 지도 학습했습니다.

I3D: 그림 모델을 부풀려 출발하기

3D 합성곱의 약점은 처음부터 배워야 한다는 점입니다. 그림에는 ImageNet 으로 잘 배운 가중치가 있는데 영상에는 그만한 출발점이 없었습니다. I3D(2017)는 2D 가중치를 3D 로 바꾸는 간단한 요령을 냈습니다.

2D 필터를 시간 방향으로 N번 복사하고, N 으로 나눈다.

이렇게 만든 3D 필터는 같은 프레임만 반복되는 「지루한 영상」에서 원래 2D 필터와 정확히 같은 답을 냅니다. 그림 모델이 알던 것을 그대로 물려받은 채로 출발하고, 움직임은 학습하면서 배웁니다.

값싼 대안: 채널 밀기(TSM)

3D 합성곱은 파라미터와 계산이 3배로 늡니다. TSM(2019)은 2D 합성곱망을 그대로 두고, 특징 채널의 ⅛ 을 한 프레임 앞으로, ⅛ 을 한 프레임 뒤로 밀기만 합니다. 곱셈이 하나도 늘지 않는데, 이웃 프레임의 정보가 섞여 들어옵니다. 뒤로만 미는(과거 프레임만 쓰는) 판을 따로 두어 실시간 스트리밍에도 쓸 수 있게 했습니다(논문). 10편의 E2E-Spot 이 쓰는 GSM 은 이 밀기를 「무엇을 얼마나 밀지」까지 학습하게 만든 변형입니다.

3. 두 갈래: Two-stream 과 SlowFast

Two-stream(2014) 은 그림 한 장을 보는 길(공간 흐름)과, 5편의 광류를 10장 쌓아 보는 길(시간 흐름)을 따로 학습해 마지막에 점수를 평균합니다. 시간 흐름 하나만으로도 공간 흐름보다 정확했습니다(UCF-101 83.7% 대 73.0%, 논문). 움직임이 행동 인식에 그만큼 중요하다는 뜻이지만, 광류를 미리 계산해 두어야 해서 느립니다.

SlowFast(2019) 는 광류 없이 두 갈래를 만듭니다.

영장류 시각계에서 모양을 보는 세포와 움직임을 보는 세포가 따로 있다는 관찰에서 착안했다고 적었습니다. 무엇보다 ImageNet 사전학습 없이 처음부터 Kinetics 만으로 학습했습니다. 사전학습을 해도 차이는 ±0.3%p 였습니다(논문).

4. 주의: TimeSformer

ViT 를 영상에 쓰면 토큰이 「프레임 수 × 프레임당 조각 수」만큼 생깁니다. 8프레임 × 196조각이면 1,568개입니다. 모든 토큰이 모든 토큰을 보는 한꺼번에(joint) 주의는 토큰 수의 제곱만큼 비쌉니다.

TimeSformer(2021)는 한 블록 안에서 주의를 둘로 나눕니다(divided).

  1. 시간 주의: 각 조각이 같은 자리의 다른 프레임 조각들만 봅니다.
  2. 공간 주의: 그 결과를 가지고, 각 조각이 같은 프레임의 다른 조각들만 봅니다.

이렇게 나누면 계산이 크게 줄고, 정확도는 오히려 조금 올랐습니다(아래 표). ImageNet 으로 사전학습한 ViT 에서 출발해 영상 라벨로 미세조정합니다.

5. 직접 해 보기

code/06_video_cost.py 의 출력입니다(code/06_video_cost.out.txt).

I3D 부풀리기. 12×12 그림 하나를 5번 반복한 「지루한 영상」에, 3×3 필터를 3번 복사하고 3으로 나눈 3×3×3 필터를 걸었습니다.

멈춘 영상에서 3D 출력과 2D 출력의 최대 차이: 1.33e-15
움직이는 영상에서는 차이가 생긴다(평균 절댓값 1.644) — 이 차이를 학습이 키워 움직임 필터가 된다

차이 10⁻¹⁵ 는 부동소수점 반올림 오차뿐이라는 뜻입니다. 정확히 같습니다.

주의 계산량. 한 층에서 토큰 짝을 비교하는 횟수를 셌습니다(16×16 조각, 224 해상도면 프레임당 196조각).

입력 토큰 한꺼번에 시간·공간 나눠서 배수
8프레임 1,568 2.5M 0.32M 7.7배
16프레임 3,136 9.8M 0.66M 14.8배
96프레임 18,816 354.0M 5.49M 64.4배

프레임이 늘수록 차이가 커집니다. TimeSformer-L 이 96프레임을 볼 수 있는 것은 이 나누기 덕분입니다.

6. 어떻게 학습시키나: 라벨 없이, 영상에서 가리고 맞히기

VideoMAE: 90% 를, 튜브로

3편의 MAE 를 영상으로 옮긴 것이 VideoMAE(2022)입니다. 차이는 두 가지입니다.

튜브로 가리는 이유를 직접 재 봤습니다. 16프레임 × 196조각에서, 가린 조각의 바로 앞이나 뒤 프레임 같은 자리가 보이는 비율입니다.

가림 75% · 프레임마다 따로        : 0.415
가림 90% · 프레임마다 따로        : 0.180
가림 95% · 프레임마다 따로        : 0.092
가림 75–95% · 튜브(모든 프레임 같은 자리): 0.000
옆 프레임 같은 자리를 그대로 베낀 오차 0.0120  (아무것도 모르고 0 으로 채우면 1.0009)

프레임마다 따로 가리면 90% 를 가려도 18% 의 조각은 옆 프레임에서 같은 자리를 베끼기만 하면 거의 완벽하게(오차 0.012, 모르고 채우면 1.0) 맞힐 수 있습니다. 모델은 「베끼기」라는 쉬운 길을 배우고, 움직임이나 구조는 배우지 않게 됩니다. 튜브로 가리면 이 길이 원천 봉쇄됩니다.

손실은 MAE 와 같습니다. 가린 큐브의 (정규화한) 화소를 제곱 오차로 맞힙니다. 인코더는 보이는 약 10% 의 토큰만 처리합니다.

V-JEPA: 화소 대신 특징을 맞히기

V-JEPA(2024)는 가린 부분의 화소 대신, 느리게 따라오는 교사 인코더(2편의 EMA 교사)가 그 부분에 대해 내는 특징을 맞히게 합니다(L1 손실). 화소의 사소한 세부를 맞히는 데 힘을 쓰지 말자는 생각입니다(3편의 한계와 이어집니다). 사전학습된 그림 모델도, 글도, 오답도, 화소 복원도 쓰지 않았습니다(논문).

7. 논문 수치

Kinetics-400 의 top-1 정확도입니다. 「view」는 시험 때 한 영상에서 자르는 클립 수 × 공간 자르기 수입니다.

모델 정확도 조건(논문)
I3D(그림 + 광류 두 갈래) 71.6 → 74.2 ImageNet 부풀리기 없이 → 있게. 학습 입력 64프레임 224px
TSM(ResNet-50) 74.1 8프레임, 10클립. 2D 기준(TSN) 70.6
SlowFast 16×8 R101+NL 79.8 사전학습 없음, 30 view, view 당 234 GFLOPs
TimeSformer / -L 78.0 / 80.7 ImageNet-21K 사전학습, 8×224² / 96×224², 3 view. 계산량 0.59 / 7.14 TFLOPs
VideoMAE ViT-L / ViT-H 85.2 / 86.6 라벨 없이 1,600에폭 사전학습 후 미세조정, 16프레임, 5×3 view. 320px·32프레임 ViT-H 는 87.4
V-JEPA ViT-H/16 82.0 인코더를 얼리고 주의 탐침만 학습(미세조정 아님)

TimeSformer 의 주의 방식 비교(ImageNet-21K 사전학습)는 이렇습니다(논문).

주의 방식 Kinetics-400 Something-Something v2
공간만(시간 무시) 76.9 36.6
한꺼번에 77.4 58.5
시간·공간 나눠서 78.0 59.5

Kinetics 에서는 시간을 무시해도 76.9% 라는 점을 눈여겨보세요. Kinetics 의 많은 행동은 장면(수영장, 탁구대)만 봐도 맞힙니다. 반면 Something-Something 은 「무언가를 왼쪽에서 오른쪽으로 민다」처럼 움직임 자체가 답이라, 시간을 무시하면 36.6% 로 무너집니다. 탁구 판정은 분명 뒤쪽에 가깝습니다.

학습 비용도 다릅니다. ImageNet-1K 사전학습 조건에서 Kinetics 학습에 TimeSformer 416 GPU 시간, SlowFast R50 3,840시간, I3D 1,440시간이 들었습니다(데이터센터급 GPU 기준, TimeSformer 논문).

VideoMAE 의 데이터 효율. 같은 ViT-B 를 각 데이터셋의 학습 영상만으로 사전학습했을 때입니다(논문).

데이터셋(학습 영상 수) 처음부터 지도 학습 대조 학습(MoCo v3) VideoMAE
UCF101(9.5천) 51.4 81.7 91.3
HMDB51(3.5천) 18.0 39.2 62.6
Something-Something v2 32.6 54.2 69.6

영상이 몇천 개뿐인 작은 데이터셋에서 차이가 가장 큽니다(UCF101·HMDB51 실험은 75% 가리기로 사전학습했습니다). 또 Something-Something 영상 4.2만 개로 사전학습한 쪽(68.7)이 Kinetics 24만 개로 사전학습한 쪽(68.5)보다 Something-Something 에서 나았습니다. 논문은 이것을 「사전학습 데이터는 양보다 시험할 영역과 닮은 정도가 중요하다」는 근거로 들었습니다.

8. 한계

9. 우리 프로젝트와의 연결

티티 한마디. 「치기 전」과 「친 후」는 사진 한 장으로는 똑같아요. 그런데 프레임을 따로따로 가리고 맞히라고 하면, 모델은 옆 프레임을 베끼는 꾀부터 배워요. 튜브로 가리는 건 그 꾀를 막는 장치예요.

참고 문헌

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다