상태: 초안 (2026-10-13), 일부 실측. 논문 수치는 원문을 열어 조건과 함께 확인했습니다(AdaSpot 의 학회는 공식 저장소 표기로 확인). 직접 해 본 것은 노트북 CPU 의 numpy 예제(
code/10_map_delta.py)입니다. TT Score 의 이벤트 실측은 TT Score 모델 해부 5편과 2026-10-13 연구 원장에 「채택」으로 기록된 값입니다(진행 중 연구, 저장소 밖). 이 편의 PES 모델을 탁구 영상에 돌려 본 적은 없습니다(미실측). 2026-10-15 덧붙임: AdaSpot(테니스 small)과 E2E-Spot(테니스, RegNet-Y 200MF) 공개 가중치의 속도를 8GB급 GPU 에서 재 6절에 붙였습니다. 탁구 정확도는 다시 학습해야 의미가 있어 여전히 미실측입니다. 시리즈 「비전 모델 읽기 2」 10편. 앞 편: 작고 빠른 공 추적. 영상 모델 기초는 6편에 있습니다.
목차
1. 직관: 「무엇」이 아니라 「언제」
6편의 영상 모델은 클립에 라벨 하나를 붙였습니다. 「이 2초는 탁구 치기」. 그런데 점수를 매기려면 다른 질문이 필요합니다. 공이 리시버 쪽 테이블에 닿은 것은 정확히 몇 번째 프레임인가.
이렇게 「한 순간에 일어나는 사건의 정확한 프레임」을 찾는 일을 정밀 이벤트 찾기(Precise Event Spotting, PES) 라고 부릅니다. 축구의 「골」이나 「코너킥」처럼 1–5초 오차를 허용하는 행동 찾기(action spotting)와 달리, PES 는 1–2프레임 안을 요구합니다. 테니스의 바운드·타구, 피겨스케이팅의 점프 착지, 다이빙의 입수가 대표 과제입니다.
두 가지가 어렵습니다.
- 극단적인 불균형. 이벤트 프레임은 전체의 3% 도 안 됩니다(E2E-Spot 논문). 9편의 공 화소 문제를 시간 축에서 다시 만난 셈입니다.
- 이웃 프레임이 거의 같다. 바운드 프레임과 그 앞뒤 프레임은 화면이 거의 같습니다. 「바로 이 프레임」을 고르려면 아주 작은 차이를 봐야 합니다.
2. 어떻게 학습시키나
E2E-Spot(ECCV 2022): 프레임마다 분류를 끝까지
E2E-Spot 의 구조는 의도적으로 단순합니다.
- 가벼운 2D 그림 망(RegNet-Y 200MF, ImageNet 으로 초기화)에 6편의 시간 밀기(GSM) 를 끼워, 프레임마다 특징을 뽑으며 이웃 프레임 정보를 섞습니다.
- 그 위에 양방향 GRU 한 층을 얹어 클립 전체의 맥락을 봅니다.
- 프레임마다 (K+1)종 분류를 합니다. K 는 이벤트 종류(예: 가까운 쪽 바운드, 먼 쪽 타구 …), +1 은 「아무 일 없음」입니다. 손실은 소프트맥스 교차 엔트로피입니다.
학습 방식의 핵심은 이름 그대로 끝까지(end-to-end) 입니다. 미리 뽑아 둔 고정 특징 위에 머리만 학습하는 대신, 100프레임 클립(224×224)을 통째로 넣어 그림 망까지 함께 학습합니다. 불균형은 이벤트 클래스의 손실에 5배 가중을 주어 다룹니다. 자르기·색 흔들기·mixup 증강을 쓰고, 시험 때는 클립을 반씩 겹쳐 돌려 평균합니다(논문).
고정 특징 위에 머리만 학습한 방식보다 δ=1 에서 4–11 mAP 앞섰습니다(논문). 사전학습 특징은 「무엇」에 맞춰져 있어, 프레임 하나의 미세한 차이를 담지 못한다는 뜻으로 읽힙니다.
T-DEED(CVPRW 2024): 「몇 프레임 떨어져 있나」를 따로 맞힌다
프레임마다 분류만 하면, 이벤트 바로 옆 프레임도 「거의 이벤트」처럼 보여 확률이 퍼집니다. T-DEED 는 두 갈래를 냅니다.
- 분류 갈래: E2E-Spot 처럼 프레임마다 (C+1)종 분류(양성 가중 교차 엔트로피).
- 변위 갈래: 이벤트 둘레 반경 안의 프레임마다 「진짜 이벤트까지 몇 프레임 떨어져 있나」를 회귀(제곱 오차).
시험 때는 분류로 대략의 자리를 찾고 변위로 정확한 프레임을 고칩니다. 이벤트 둘레 프레임을 그냥 「양성」으로 넓혀 주는 라벨 넓히기(label dilation)보다 이 변위 갈래가 낫다고 보고했습니다(논문). 망은 인코더-디코더 구조로, 시간 해상도를 줄였다 다시 키우며 여러 시간 크기의 맥락을 섞습니다.
AdaSpot(CVPR 2026): 해상도를 쓸 곳에만
테니스·탁구에서 사건의 주인공은 작은 공입니다. 224px 로 줄인 화면에서는 공이 거의 사라집니다. 그렇다고 모든 프레임을 고해상도로 보면 비쌉니다. AdaSpot 은 두 갈래를 둡니다.
- 저해상도 갈래: 화면 전체를 낮은 해상도로 봅니다.
- 관심 영역 고르기: 저해상도 특징의 채널 평균으로 「돋보이는 곳」 지도를 만들고, 시공간으로 부드럽게 한 뒤, 중요도를 충분히 담는 가장 작은 사각형을 골라 원본에서 112×112 로 잘라 냅니다. 이 고르기는 학습하지 않습니다. 관심 영역 라벨이 따로 필요 없습니다.
- 고해상도 갈래: 잘라 낸 작은 영역만 원래 해상도로 봅니다.
손실은 가중 교차 엔트로피(이벤트 가중 5)이고, 두 갈래 각각에도 보조 GRU 머리를 달아 손실을 더합니다(각 ⅓). 이 보조 손실이 없으면 학습이 불안정했다고 적었습니다(논문).
3. 평가: mAP@δ
PES 의 채점은 이렇습니다.
- 예측(프레임, 종류, 확신)을 확신이 높은 순으로 세웁니다.
- 같은 종류의 정답과 프레임 차이가 δ 이하면 맞음입니다. 정답 하나에 예측 하나만 짝짓습니다.
- 정밀도-재현율 곡선 아래 넓이가 AP, 종류별 평균이 mAP 입니다.
δ=1 은 「정답 프레임이나 바로 옆 프레임」입니다. 60fps 면 ±17ms, 25fps 면 ±40ms 라서, 같은 δ 라도 프레임률에 따라 실제 시간 허용이 다릅니다.
직접 해 보기
code/10_map_delta.py 에 이 채점을 구현하고, 이벤트 400개(놓침 5%, 엉뚱한 곳 가짜 5%)에 대해 시각 오차가 다른 세 「모델」을 만들어 채점했습니다(code/10_map_delta.out.txt). 행마다 놓침·가짜를 따로 무작위로 뽑았으니 같은 행 안에서 비교하세요.
| 시각 오차(표준편차) | δ=0 | δ=1 | δ=2 | δ=4 |
|---|---|---|---|---|
| 0.3프레임 | 0.759 | 0.914 | 0.914 | 0.914 |
| 0.7프레임 | 0.317 | 0.905 | 0.944 | 0.948 |
| 2.0프레임 | 0.039 | 0.339 | 0.667 | 0.928 |
같은 모델(2.0프레임)이 δ 에 따라 0.04 에서 0.93 까지 받습니다. mAP 숫자는 δ 없이 읽을 수 없습니다. 그리고 δ=0(정확히 그 프레임)은 시각 오차가 0.7프레임만 돼도 0.3 대로 떨어집니다. 논문들이 δ=0 을 따로 보고하기 시작한 이유입니다(아래 AdaSpot 표).
중복 예측도 실험했습니다. 이벤트마다 ±1–2프레임에 덜 확신하는 예측을 2개씩 더 냈습니다.
중복 그대로 δ=0: 0.294 δ=1: 0.654 δ=2: 0.739
NMS(±2) 뒤 δ=0: 0.208 δ=1: 0.690 δ=2: 0.875
중복은 「정답 없는 예측」으로 세어져 정밀도를 깎습니다. ±2프레임 안의 중복을 지우는 NMS 로 δ=2 가 0.739 에서 0.875 로 회복됐습니다. 반대로 δ=0 은 오히려 떨어졌습니다. NMS 가 남긴 「가장 확신하는」 예측이 정확히 그 프레임이 아닐 때가 있기 때문입니다. 후처리도 δ 에 따라 득실이 갈립니다.
4. 논문 수치
| 모델 | 데이터 | δ=0 | δ=1 | δ=2 | 조건(논문) |
|---|---|---|---|---|---|
| E2E-Spot | 테니스 | — | 96.1 | 97.7 | 200MF. 테니스 3,345클립·이벤트 33,791개, 6종(가까운 쪽/먼 쪽 × 서브·타구·바운드) |
| E2E-Spot | 피겨(FS-Comp) · 다이빙 · 체조 | — | 81.0 · 68.4 · 47.9 | 93.5 · 85.3 · 65.2 | 같은 모델 |
| T-DEED | 피겨(FS-Comp) · 다이빙 | — | 85.15 · 71.48 | 91.70 · 87.62 | 200MF. 800MF 다이빙 73.23 · 88.88 |
| AdaSpot | 테니스 | 74.02 | 97.36 | 97.79 | RegNetY-400MF, 1,063만 파라미터, 56.78 GFLOPs, 시드 3개 평균 |
| AdaSpot | F3Set(테니스 세밀 이벤트) | 55.38 | 69.37 | 69.94 | 같음 |
| E2E-Spot + MFS | 탁구(TTA) | 36.43 | 69.50 | 78.12 | 휴대 촬영 39경기, 30fps 720p, 이벤트 4,878개 8종 |
몇 가지 주의할 점입니다.
- AdaSpot 논문의 비교표는 다른 방법들도 같은 후처리(SNMS)로 다시 돌린 값이라, E2E-Spot 테니스 δ=1 이 97.01 로 원 논문(96.1)과 다릅니다. 표를 섞을 때는 출처를 맞춰야 합니다.
- 테니스 δ=1 은 이미 97% 근처에서 포화했습니다. 차이는 δ=0 에서 납니다(AdaSpot 74.02).
- 탁구는 훨씬 어렵습니다. 휴대 촬영 탁구(TTA)에서 δ=1 이 69.50 으로, 같은 계열 모델의 테니스 수치보다 25점 넘게 낮습니다. 공이 작고, 사건이 촘촘하며(100프레임당 7.73개), 카메라가 흔들립니다. F3Set 의 탁구 부분은 랠리 42개뿐이라 학습 데이터도 적습니다(논문).
5. 한계
- 클립 단위 = 지연. 양방향 GRU 와 겹친 클립 평균은 미래 프레임을 봅니다. 실시간으로 쓰려면 클립 끝까지 기다려야 하므로 1–2초 지연이 생깁니다(추정). 랠리가 끝난 뒤의 재확인에 더 맞습니다.
- 종목 사이의 거리. 공개 가중치는 테니스·피겨 등이고 탁구 가중치는 없습니다. 탁구로 다시 학습해야 하며, 공개 탁구 데이터는 대부분 비상업 조건입니다.
- 영상 언어 모델로는 대신 못 한다. F3Set 논문은 GPT-4V 가 종목과 점수판은 알아봤지만 타구 방향과 프레임 사이의 시간 관계를 잡지 못해 비교에서 뺐다고 적었습니다(12편).
6. 우리 프로젝트와의 연결
- 우리 엔진은 화소가 아니라 궤적을 본다. TT Score 는 공 검출(9편)로 얻은 궤적에서 규칙으로 바운드를 냅니다(TT Score 모델 해부 5편). 남은 오류의 큰 몫은 놓친 바운드가 아니라 가짜 바운드(타구를 바운드로 읽은 것 등)입니다.
- 학습형 바운드 판별기는 이 편의 축소판이다. 궤적 특징 9개의 지난 16프레임을 보는 1D 합성곱(파라미터 약 1.8만)으로 바운드·타구·네트 확률을 프레임마다 냅니다. 학습은 이 편의 생각을 그대로 씁니다. 바운드 프레임 1, 바로 옆 프레임 0.5 인 부드러운 라벨, 라벨이 달린 구간 안에서만 세는 가중 BCE, 그리고 30fps 사본을 섞은 학습. 이 모델로 규칙 바운드를 거르는 판을 실제 배포 스트리밍 경로에 넣었을 때, OpenTTGames 시험 7경기 깨끗한 영상에서 바운드 F1(±2프레임)이 0.801 에서 0.830 으로, 열화 11조건 627랠리의 랠리 승자 정확도가 +4.9%p(95% 구간 +2.9…+7.2) 올랐습니다. 이 판은 채택돼 2026-10-14 부터 실시간·녹화본 작업자 모두에서 켜져 있습니다(연구 원장 기준, 진행 중 연구 — 원장은 아직 저장소 밖).
- 앞보기 0 의 함정. 초기 실험에서 앞보기가 0 인 모델로 바운드 봉우리를 직접 고르게 했더니 무너졌습니다. 봉우리를 고르려면 다음 프레임의 확률이 필요한데, 앞을 못 보는 모델의 확률은 바운드 1–2프레임 앞으로 퍼졌기 때문입니다. 그래서 학습 모델은 규칙이 낸 바운드를 거르는(veto) 역할로만 씁니다. 위 mAP 실험의 「δ=0 은 시각 오차에 극도로 민감하다」와 같은 이야기입니다.
- 녹화본 교사 후보. AdaSpot 은 코드와 테니스 가중치가 MIT 로 공개돼 있어, 탁구로 다시 학습하면 4편의 「녹화본 교사」 후보가 됩니다. 속도는 2026-10-15 에 쟀습니다(8GB급 GPU, 무작위 입력, 예열 뒤 중앙값). 테니스 small 판(RegNet-Y 200MF 두 갈래, 추론용 758만 파라미터)은 100프레임 클립(고해상 갈래 448×796)을 bf16 으로 85.9ms, 프레임당 0.86ms 에 처리했고 GPU 메모리는 최대 1.4GB 였습니다. 같은 카드에서 E2E-Spot(RegNet-Y 200MF + GRU, 445만 파라미터, 224×224)은 fp16 29.2ms, 프레임당 0.29ms 였습니다. 녹화본을 다시 보는 교사로 쓰기에는 둘 다 충분히 빠릅니다. 탁구로 다시 학습한 정확도는 미실측입니다(탁구 정답 데이터로 학습이 먼저).
티티 한마디. 「바운드 찾기 97점!」이라는 말을 들으면 먼저 「δ 가 몇이에요?」라고 물어보세요. 같은 모델이 δ=0 에서는 4점, δ=4 에서는 93점을 받을 수도 있어요. 제가 직접 채점해 봤어요.
참고 문헌
- Hong et al., Spotting Temporally Precise, Fine-Grained Events in Video(E2E-Spot), ECCV 2022. https://arxiv.org/abs/2207.10213
- Xarles et al., T-DEED: Temporal-Discriminability Enhancer Encoder-Decoder for Precise Event Spotting in Sports Videos, CVPR 2024 Workshops. https://arxiv.org/abs/2404.05392
- Xarles et al., AdaSpot: Spend Resolution Where It Matters for Precise Event Spotting, CVPR 2026(저장소 표기). https://arxiv.org/abs/2602.22073
- Xu et al., Multi-Focus Temporal Shifting for Precise Event Spotting in Sports Videos(TTA 탁구 데이터), arXiv 2025. https://arxiv.org/abs/2507.07381
- Liu et al., F³Set: Towards Analyzing Fast, Frequent, and Fine-grained Events from Videos, ICLR 2025. https://arxiv.org/abs/2504.08222
- Sudhakaran et al., Gate-Shift Networks for Video Action Recognition, CVPR 2020. https://arxiv.org/abs/1912.00381
- 우리 측정: 2026-10-13 연구 원장의 채택 기록(진행 중 연구, 저장소 밖). 예제 코드와 출력:
code/10_map_delta.py,code/10_map_delta.out.txt