상태: 초안 (2026-10-13). 논문 수치는 원문을 열어 조건과 함께 확인했습니다. 직접 해 본 것은 노트북 CPU 의 numpy 예제(
code/06_video_cost.py, 1초 미만)입니다. 이 편의 영상 모델을 탁구 영상에 돌려 본 적은 없습니다(미실측). 시리즈 「비전 모델 읽기 2」 6편. 앞 편: 광류와 RAFT. 2D 합성곱과 ViT 는 비전 모델 읽기 1을 보세요.
목차
- 1. 직관: 사진 한 장으로는 모르는 것
- 2. 3D 합성곱: C3D 와 I3D
- 3. 두 갈래: Two-stream 과 SlowFast
- 4. 주의: TimeSformer
- 5. 직접 해 보기
- 6. 어떻게 학습시키나: 라벨 없이, 영상에서 가리고 맞히기
- 7. 논문 수치
- 8. 한계
- 9. 우리 프로젝트와의 연결
- 참고 문헌
1. 직관: 사진 한 장으로는 모르는 것
정지 사진 한 장으로 「라켓을 든 선수」는 알 수 있지만, 그 선수가 치는 중인지, 치고 난 뒤인지, 치려고 준비하는 중인지는 모릅니다. 「문을 여는 중」과 「문을 닫는 중」은 사진 한 장으로는 같은 장면입니다. 영상 모델은 이 차이, 곧 시간 순서에 담긴 정보를 배우려고 합니다.
방법은 크게 세 갈래입니다.
- 3D 합성곱: 필터를 가로·세로에 더해 시간 방향으로도 늘린다.
- 두 갈래: 모양을 보는 길과 움직임을 보는 길을 나눈다.
- 주의(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) 는 광류 없이 두 갈래를 만듭니다.
- 느린 길: 프레임을 드문드문(예: 16프레임마다 하나) 보되 채널을 많이 써서 무엇이 있나를 봅니다.
- 빠른 길: 프레임을 8배 촘촘히(α=8) 보되 채널을 ⅛(β=1/8)로 줄여 어떻게 움직이나를 봅니다. 계산은 전체의 약 20% 입니다.
- 빠른 길의 특징을 여러 층에서 느린 길로 흘려 보냅니다(옆 연결).
영장류 시각계에서 모양을 보는 세포와 움직임을 보는 세포가 따로 있다는 관찰에서 착안했다고 적었습니다. 무엇보다 ImageNet 사전학습 없이 처음부터 Kinetics 만으로 학습했습니다. 사전학습을 해도 차이는 ±0.3%p 였습니다(논문).
4. 주의: TimeSformer
ViT 를 영상에 쓰면 토큰이 「프레임 수 × 프레임당 조각 수」만큼 생깁니다. 8프레임 × 196조각이면 1,568개입니다. 모든 토큰이 모든 토큰을 보는 한꺼번에(joint) 주의는 토큰 수의 제곱만큼 비쌉니다.
TimeSformer(2021)는 한 블록 안에서 주의를 둘로 나눕니다(divided).
- 시간 주의: 각 조각이 같은 자리의 다른 프레임 조각들만 봅니다.
- 공간 주의: 그 결과를 가지고, 각 조각이 같은 프레임의 다른 조각들만 봅니다.
이렇게 나누면 계산이 크게 줄고, 정확도는 오히려 조금 올랐습니다(아래 표). 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)입니다. 차이는 두 가지입니다.
- 더 많이 가린다. 그림은 75%, 영상은 90%(95% 도 괜찮았습니다). 이웃 프레임이 거의 같아서 영상은 그림보다 훨씬 중복이 많습니다.
- 튜브로 가린다. 어느 자리를 가리면 모든 프레임에서 같은 자리를 가립니다. 2프레임 × 16×16 화소 덩어리(큐브)를 토큰 하나로 씁니다.
튜브로 가리는 이유를 직접 재 봤습니다. 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. 한계
- 분류는 「언제」를 말하지 않는다. 이 편의 모델들은 클립 전체에 라벨 하나를 붙입니다. 「이 2초 안에 타구가 있다」는 알아도 「몇 번째 프레임」은 모릅니다. 프레임 단위의 시각은 10편의 정밀 이벤트 찾기가 다룹니다.
- 양방향은 실시간이 아니다. 3D 합성곱과 주의는 보통 클립의 과거와 미래를 함께 봅니다. 실시간에서는 미래가 없으므로 TSM 의 단방향 판처럼 인과적으로 바꾸거나, 짧은 지연(앞보기)을 감수해야 합니다.
- 작은 물체는 해상도에서 사라진다. 224px 로 줄인 프레임에서 탁구공은 1화소도 안 될 수 있습니다.
9. 우리 프로젝트와의 연결
- 우리 공 검출기는 ① 의 아주 단순한 형태다. BlurBall·WASB 는 연속 3프레임을 채널로 쌓아(9채널) 2D 합성곱망에 넣습니다(TT Score 모델 해부 2편). 시간을 첫 층에서 한 번 섞는 「이른 결합」입니다. 9편에서 가림을 다루는 TOTNet 은 여기에 3D 합성곱을 더합니다.
- 우리 학습형 바운드 판별기는 화소가 아니라 궤적에 시간 합성곱을 건다. 공 좌표·속도 같은 9개 특징의 시계열에 1D 합성곱을 쓰므로 계산이 아주 작습니다(4편, 2026-10-13 연구 원장 기준 진행 중 연구).
- 영상 단위 행동 인식은 코칭 쪽 후보. 「포핸드 드라이브인가 블록인가」 같은 스트로크 분류는 이 편의 모델이 맞는 문제입니다. 지금 코칭은 자세(관절) 기반이고, 영상 모델은 시험하지 않았습니다(미실측).
티티 한마디. 「치기 전」과 「친 후」는 사진 한 장으로는 똑같아요. 그런데 프레임을 따로따로 가리고 맞히라고 하면, 모델은 옆 프레임을 베끼는 꾀부터 배워요. 튜브로 가리는 건 그 꾀를 막는 장치예요.
참고 문헌
- Tran et al., Learning Spatiotemporal Features with 3D Convolutional Networks(C3D), ICCV 2015. https://arxiv.org/abs/1412.0767
- Simonyan & Zisserman, Two-Stream Convolutional Networks for Action Recognition in Videos, NeurIPS 2014. https://arxiv.org/abs/1406.2199
- Carreira & Zisserman, Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset(I3D), CVPR 2017. https://arxiv.org/abs/1705.07750
- Lin, Gan, Han, TSM: Temporal Shift Module for Efficient Video Understanding, ICCV 2019. https://arxiv.org/abs/1811.08383
- Sudhakaran et al., Gate-Shift Networks for Video Action Recognition(GSM), CVPR 2020. https://arxiv.org/abs/1912.00381
- Feichtenhofer et al., SlowFast Networks for Video Recognition, ICCV 2019. https://arxiv.org/abs/1812.03982
- Bertasius, Wang, Torresani, Is Space-Time Attention All You Need for Video Understanding?(TimeSformer), ICML 2021. https://arxiv.org/abs/2102.05095
- Tong et al., VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training, NeurIPS 2022. https://arxiv.org/abs/2203.12602
- Bardes et al., Revisiting Feature Prediction for Learning Visual Representations from Video(V-JEPA), TMLR 2024. https://arxiv.org/abs/2404.08471
- 예제 코드와 출력:
code/06_video_cost.py,code/06_video_cost.out.txt