상태: 초안 (2026-10-13). 논문 수치는 원문을 열어 조건과 함께 확인했습니다(Uplifting 의 학회는 CVF 공개 논문집으로 확인: WACV 2026, 7440–7449쪽 — 2026-10-15). 직접 해 본 것은 노트북 CPU 의 numpy 예제(
code/11_spin_physics.py, 30초 안팎)입니다. 이 편의 방법을 우리 영상에 돌려 본 적은 없습니다(미실측). 시리즈 「비전 모델 읽기 2」 11편. 탁구대 모서리와 호모그래피는 TT Score 모델 해부 3편, 3D 극값 규칙 계획은 5편에 있습니다.
목차
- 1. 직관: 2D 에서 사라진 한 차원
- 2. 물리 모델로 맞추기: TT3D
- 3. 합성 데이터로 학습한 변환기: Uplifting Table Tennis
- 4. 먼저 3D 로 올리고, 그다음 사건을 나눈다: TT4D
- 5. 직접 해 보기: 회전은 얼마나 휘게 하고, 거꾸로 맞힐 수 있나
- 6. 논문 수치
- 7. 물리 모델 대 학습 모델
- 8. 한계
- 9. 우리 프로젝트와의 연결
- 참고 문헌
1. 직관: 2D 에서 사라진 한 차원
카메라는 3D 세계를 2D 화면에 눌러 담습니다. 그 과정에서 깊이가 사라집니다. 화면의 한 점은 카메라에서 뻗어 나간 직선(시선) 위의 어디든 될 수 있습니다. 공 하나의 2D 위치만으로는 그 공이 카메라에서 2m 떨어져 있는지 4m 떨어져 있는지 모릅니다.
그런데 탁구에는 단서가 많습니다.
- 탁구대의 크기가 정해져 있습니다(2.74m × 1.525m). 모서리 네 개가 보이면 카메라가 어디서 어떤 각도로 찍고 있는지 계산할 수 있습니다.
- 바운드하는 순간 공은 탁구대 위에 있습니다. 그 순간의 시선과 탁구대 평면이 만나는 점이 공의 3D 위치입니다.
- 공은 물리 법칙을 따릅니다. 바운드와 바운드 사이의 궤적은 중력, 공기 저항, 회전이 만드는 힘(마그누스 힘)으로 거의 정해집니다.
마지막 단서가 회전까지 알려 줍니다. 윗회전이 걸린 공은 더 빨리 떨어지고, 아랫회전은 더 떠서 갑니다. 궤적의 휘어짐을 보면 회전을 역산할 수 있습니다.
2. 물리 모델로 맞추기: TT3D
TT3D(CVPR 2025 워크숍)는 학습을 최소화하고 물리에 기댑니다.
- 카메라 보정: 탁구대 분할 모델(작은 U-Net++, 라벨 1,200장, 다이스 손실)이 탁구대 영역을 찾고, 그 모서리 네 개로 카메라의 위치·방향과 초점 거리를 함께 구합니다(PnP 와 초점 거리 탐색을 번갈아). 칼만 필터로 시간에 따라 부드럽게 합니다. 모서리 오차는 2.39 ± 1.47 화소였습니다(그림 40장, 논문).
- 바운드의 3D 위치: 바운드 순간의 시선과 탁구대 평면의 교점입니다. 바운드 시각은 2D 궤적에 조각별 2차 곡선을 맞추고 BlurBall(9편)이 낸 번짐 각도를 더해 찾습니다.
- 속도와 회전: 바운드 직전의 속도(3개)와 회전(3개)을 미지수로 두고, 그 값으로 비행 식을 적분해 화면에 다시 투영한 위치가 관측된 2D 위치와 가장 가깝도록 최적화합니다(재투영 오차 최소화).
비행 식은 이렇습니다(논문, 기호만 바꿈).
m · dv/dt = −k_D · |v| · v + k_M · (ω × v) + m · g
m = 2.7g, k_D = 3.8 × 10⁻⁴, k_M = 4.86 × 10⁻⁶, 공 반지름 2cm
첫 항이 공기 저항, 둘째 항이 마그누스 힘, 셋째가 중력입니다. 바운드는 반발 계수 0.85, 마찰 계수 0.3 의 식으로, 공이 탁구대에서 미끄러지는지 구르는지를 나눠 계산합니다. (논문은 k_D 를 + 부호로 적었는데, 공기 저항이 운동을 거스르는 방향이 되려면 부호 규약을 맞춰야 합니다. TT4D 부록은 같은 k_D 를 − 로 적었고, k_M 은 3 × 10⁻⁶ 으로 TT3D 와 다르게 적었습니다. 예제는 TT3D 값을 − 부호로 썼습니다.)
3. 합성 데이터로 학습한 변환기: Uplifting Table Tennis
물리 맞추기는 정확하지만 느리고, 관측이 빠지거나 잡음이 크면 최적화가 엉뚱한 곳에 빠질 수 있습니다. Kienzle 외의 두 논문은 다른 길을 갑니다. 2D 점 열을 받아 3D 점 열과 회전을 바로 내는 트랜스포머를 학습합니다.
문제는 정답입니다. 실제 영상에는 공의 3D 위치도, 회전도 정답이 없습니다. 그래서 정답을 시뮬레이터로 만듭니다.
- 물리 시뮬레이터(MuJoCo)로 탁구 궤적을 대량으로 만듭니다. 2025년 판은 5만 개, 2026년 판(Uplifting)은 14만 개(2D 점 약 470만 개)입니다. 3D 위치와 회전이 모두 알려진 「공짜 정답」입니다.
- 이 3D 궤적을 가상의 카메라로 2D 에 투영해 입력을 만듭니다.
- 학습은 3D 궤적의 제곱 오차 + 초기 회전의 제곱 오차입니다(2025년 판, 논문).
합성에서 실제로 넘어가는 다리는 증강입니다. 실제 검출기는 공을 놓치고 프레임률도 제각각이니, 학습 때 점을 5% 무작위로 빼고 프레임률을 20–60fps 사이에서 뽑았습니다. 갑자기 궤적이 끊기는 경우, 번짐, 흐림도 흉내 냈습니다. 그리고 트랜스포머의 위치 인코딩에 토큰 순번이 아니라 실제 시각(2ms 단위로 반올림)을 써서, 프레임이 빠지거나 간격이 달라도 시간 관계를 알게 했습니다(논문).
앞단의 2D 검출기는 실제 영상으로 학습합니다. 공은 연속 3프레임을, 탁구대는 13개 기준점을 히트맵(제곱 오차, σ=6화소)으로 찾고, 공 검출기는 BlurBall 데이터 5만 프레임으로 먼저 학습한 뒤 1080p 탁구 영상(TTHQ)으로 미세조정했습니다. 다른 구조의 보조 검출기와 결과가 다르면 그 검출을 버립니다(논문).
4. 먼저 3D 로 올리고, 그다음 사건을 나눈다: TT4D
TT4D(ACM MM 2026)는 순서를 뒤집습니다. 지금까지는 2D 궤적에서 바운드·타구를 먼저 찾고 그 사이를 3D 로 올렸다면, TT4D 는 랠리 전체를 먼저 3D 로 올린 뒤 사건을 나눕니다.
- 바운드 = 높이 z 의 극소점.
- 타구 = 탁구대 길이 방향 x 의 극값(공이 방향을 바꾼 곳). 타구 사이 0.2초 이상, 탁구대 끝에서 0.3m 이상 같은 간단한 조건을 더합니다.
2D 화면에서 바운드와 타구는 둘 다 「V 자 꺾임」이라 헷갈리지만, 3D 에서는 「바닥에 닿음」과 「방향 바뀜」으로 정의 자체가 다릅니다. 학습은 합성 궤적 약 300만 점으로 했고, 가려진 프레임은 학습 때 가리고 보간 토큰으로 채웠습니다. 모델은 160만 파라미터로 작습니다(논문).
5. 직접 해 보기: 회전은 얼마나 휘게 하고, 거꾸로 맞힐 수 있나
code/11_spin_physics.py 는 위 비행 식을 1ms 간격으로 적분합니다(code/11_spin_physics.out.txt).
회전이 바꾸는 낙하 지점. 자기 쪽 끝 30cm 높이에서 초속 7.05m(살짝 위로 6.5°)로 친 공입니다.
아랫회전 50rps: x = 2.68m, 비행 463ms
회전 없음 : x = 2.09m, 비행 348ms
윗회전 50rps : x = 1.74m, 비행 284ms
참고: 공기가 없다면 x = 2.39m. 탁구대 길이는 2.74m
초당 50바퀴의 회전 하나로 처음 닿는 곳이 1.74m 에서 2.68m 까지, 거의 1m 바뀝니다. 비행 시간도 284ms 와 463ms 로 크게 다릅니다. 회전 없는 공도 공기 저항 때문에 진공에서보다 30cm 짧게 떨어집니다. 공이 가벼워서(2.7g) 공기의 영향이 큽니다.
거꾸로 맞히기. 윗회전 50rps 공의 첫 바운드 전 비행 구간을 60fps·30fps 로 관측하고 3D 위치에 잡음을 섞은 뒤, 초기 속도 3개와 회전 1개를 가우스–뉴턴 최소제곱으로 맞혔습니다(30번 반복). TT3D 의 방법을 아주 단순하게 줄인 판입니다. 회전축은 옆축 하나로 묶었습니다.
| 관측 | 3D 위치 잡음 | 추정 중앙값 | 오차 절댓값 중앙 | 윗/아랫회전 맞힘 |
|---|---|---|---|---|
| 60fps(17점) | 1cm | 50.5rps | 6.2rps | 100% |
| 60fps(17점) | 3cm | 49.1rps | 26.3rps | 97% |
| 30fps(9점) | 1cm | 50.9rps | 6.0rps | 100% |
| 30fps(9점) | 3cm | 41.7rps | 22.2rps | 87% |
위치 잡음이 1cm 면 회전의 방향은 늘 맞고 크기도 ±6rps 안팎입니다. 3cm 가 되면 크기는 거의 못 믿을 수준이고, 30fps 에서는 방향까지 13% 틀립니다. 회전은 궤적의 미세한 휘어짐에 숨어 있어서, 위치 오차 몇 cm 가 그 신호를 덮습니다. 실제로는 3D 위치가 아니라 2D 위치만 관측되니 더 어렵습니다. 그래서 논문들은 회전을 「몇 rps」로 회귀하기보다 윗회전/아랫회전 분류로 평가합니다(아래 표).
6. 논문 수치
| 방법 | 수치(논문) | 조건 |
|---|---|---|
| TT3D | 3D 평균 오차: 옆면 8.9cm(잡음 시 12.4) · 비스듬히 14.5(17.1) · 뒤쪽 22.3(29.8). 성공률 옆면 97.3% | 정답은 200Hz 다중 카메라 3D 추적(동호회 경기, 주황 공). 2D 입력은 25fps 로 모사, 궤적 130개, 위치 잡음 2px·번짐 각도 6°. 회전 정답은 없어 회전 정확도는 평가하지 않음 |
| Kienzle 외 2025 | 실제 궤적 50개 회전 분류 정확도 92.0%, F1 0.917 | 국제 대회 6경기 2560×1440 50Hz. 합성 5만 궤적으로만 학습 |
| Uplifting Table Tennis | TTST(완벽한 입력) 정확도 97.1%, 재투영 3.43px. 프레임률 절반 + 검출 10% 누락에서도 97.1%·5.75px(이전 판은 67.7%로 무너짐). 전체 파이프라인 TTHQ 57궤적 회전 정확도 89.5% | 합성 14만 궤적으로만 학습한 뒷단 + 실제 영상으로 학습한 앞단 |
| TT4D | 바운드 F1 0.92, 타구 F1 0.83(±2프레임). TTST 회전 매크로 F1 1.000(깨끗), 0.941(프레임 절반 + 누락) | 사건 F1 의 데이터셋은 본문에서 분명하지 않음. 146시간·4만 6천여 경기 분량의 데이터셋을 제안. 2026-10-15 기준 미공개(arXiv v2 는 「공개할 것」이라고만 적음. 원문 단위는 games 이지만 5게임 3선승이라 사실상 한 경기) |
| TT4D 대 TT3D | 옆면 한 구간 3D 오차 TT4D 15.04cm, TT3D 29.86cm | TT4D 가 만든 다른 벤치마크(덜 거른 데이터, 잡음 포함). 위 TT3D 의 8.9cm 와 같은 줄에 놓으면 안 된다 |
마지막 줄은 인용할 때 특히 조심해야 합니다. TT3D 자신의 벤치마크에서는 8.9cm, TT4D 의 벤치마크에서는 같은 TT3D 가 29.86cm 입니다. 벤치마크가 다르면 같은 방법도 세 배 넘게 다른 숫자를 받습니다.
7. 물리 모델 대 학습 모델
| 물리 모델로 맞추기(TT3D) | 합성 데이터로 학습(Uplifting · TT4D) | |
|---|---|---|
| 학습 데이터 | 거의 없음(탁구대 분할만) | 합성 궤적 수만–수백만 개 |
| 정답의 출처 | 식 그 자체 | 시뮬레이터(같은 물리, 다른 사용법) |
| 빠진 관측·바뀐 fps | 최적화가 흔들릴 수 있음 | 증강으로 미리 배움(절반 fps + 10% 누락에서도 버팀) |
| 속도 | 랠리마다 최적화 | 한 번의 순전파(TT4D 는 초당 500점 이상, 데스크톱급 GPU) |
| 설명 가능성 | 식의 각 항을 들여다볼 수 있음 | 블랙박스에 가까움 |
| 틀리는 곳 | 식이 현실과 다른 곳(공 상태, 바닥 마찰) | 시뮬레이터가 현실과 다른 곳(합성-실제 간극) |
두 길은 생각보다 가깝습니다. 학습 모델의 「정답」도 결국 물리 시뮬레이터에서 나오기 때문입니다. 차이는 물리를 시험 때 매번 푸느냐(최적화), 학습 때 한 번 몸에 익히느냐(증강된 합성 데이터) 입니다.
8. 한계
- 고정 카메라 가정. 세 방법 모두 카메라가 랠리 동안 움직이지 않는다고 봅니다. 손에 든 휴대폰은 흔들립니다(TT3D 는 칼만 필터로 보정을 부드럽게 하지만, 큰 움직임은 별개).
- 실제 3D 정답이 드물다. TT3D 의 다중 카메라 정답이 예외적이고, 나머지는 재투영 오차나 회전 분류로 간접 평가합니다.
- 라이선스. Uplifting 코드는 GPL-3.0, TT3D 저장소에는 라이선스 파일이 없고, TT4D 는 아직 공개 전입니다(조사 보고). 우리는 GPL 코드를 가져오지 않고 방법만 구현한다는 원칙입니다.
9. 우리 프로젝트와의 연결
- 지금 엔진은 2D 와 탁구대 평면까지. TT Score 는 탁구대 모서리 네 개로 호모그래피를 구해 공의 2D 위치를 탁구대 평면 좌표로 옮기고, 2D 궤적의 꺾임으로 바운드를 냅니다(TT Score 모델 해부 3편·5편). 남은 오류의 큰 몫이 「타구를 바운드로 읽은 가짜」인데, 이것이 바로 2D 에서 둘이 같은 V 자로 보이기 때문입니다.
- TT4D 식 3D 극값 규칙을 검토 중. 3D 로 올리면 바운드(z 극소)와 타구(x 극값)의 정의가 갈립니다. 5편에 적은 계획이고 아직 실험하지 않았습니다(미실측).
- 옆면 촬영이 가장 유리하다. TT3D 의 결과에서 옆면이 8.9cm 로 가장 정확했고, 뒤쪽은 22.3cm 였습니다. 우리가 권하는 촬영 위치(탁구대 옆, 삼각대)와 맞습니다.
- 회전은 「덤」으로. 예제에서 보듯 회전 크기는 위치 잡음에 아주 약합니다. 점수 판정에는 필요 없고, 코칭에서 「윗회전이었나」 정도의 분류로 쓰는 것이 현실적입니다(추정).
티티 한마디. 초당 50바퀴 도는 공은 같은 힘으로 쳐도 1m 가까이 다른 곳에 떨어져요. 그런데 거꾸로, 궤적에서 회전을 읽어 내려면 공 위치를 1cm 안으로 알아야 했어요. 휘는 건 크게, 읽는 건 어렵게. 회전이 그래요.
참고 문헌
- Gossard et al., TT3D: Table Tennis 3D Reconstruction, CVPR 2025 Workshops(CVSports). https://arxiv.org/abs/2504.10035
- Kienzle et al., Towards Ball Spin and Trajectory Analysis in Table Tennis Broadcast Videos via Physically Grounded Synthetic-to-Real Transfer, CVPR 2025 Workshops. https://arxiv.org/abs/2504.19863
- Kienzle et al., Uplifting Table Tennis: A Robust, Real-World Application for 3D Trajectory and Spin Estimation, WACV 2026, pp. 7440–7449(CVF 공개 논문집). https://arxiv.org/abs/2511.20250
- Rahmanian et al., TT4D: A Pipeline and Dataset for Table Tennis 4D Reconstruction From Monocular Videos, ACM MM 2026. https://arxiv.org/abs/2605.01234
- 예제 코드와 출력:
code/11_spin_physics.py,code/11_spin_physics.out.txt