
새로운 영상 없이, 클라우드 학습 없이 하이라이트 탐지 성능을 0.56에서 0.86으로 끌어올린 방법
요약
SportZone이 실제 스마트폰 영상에서 하이라이트 탐지 성능을 0.56에서 0.86으로 개선한 과정을 다룹니다. 데이터 미세 조정 대신 파이프라인 단계별 정밀한 분석을 통해 병목 구간을 찾아내고 문제를 해결했습니다.
핵심 포인트
- YouTube 데이터와 실제 스마트폰 영상 간의 도메인 격차 확인
- 단순한 탐지기 미세 조정(Fine-tuning)이 해결책이 아님을 증명
- 파이프라인 단계별(탐지, 추적, 포즈, 충격) 누수 분석의 중요성
- 데이터 수집 및 학습 비용을 줄이는 체계적인 디버깅 접근법
SportZone은 부모가 유소년 경기를 촬영한 휴대폰 영상을 하이라이트 릴로 변환합니다. 어려운 점은 결정적인 순간을 찾는 것입니다. 실제 영상에서는 그 순간의 거의 절반을 놓치고 있었습니다. 추측이 아닌, 일주일간의 측정을 통해 이를 어떻게 해결했는지 소개합니다.
01 문제점
실제 휴대폰 영상에서 모델이 절반은 보지 못했습니다
우리의 분류기(classifier)는 선별된 YouTube 클립에서 0.82의 점수를 기록했습니다. 자신감을 가지고 처음으로 부모가 직접 촬영한 실제 스마트폰 영상에 적용해 보았습니다. 가장 중요한 수치인 '결정적인 순간을 포착했는가?'에 대한 결과는 0.56이었습니다. 하이라이트의 44%를 놓치고 있었던 것입니다. 하이라이트의 절반을 놓치는 하이라이트 도구는 도구가 아닙니다.
선별된 데이터와 실제 데이터 사이의 격차를 극복하는 것이 핵심입니다. 그래서 우리가 가장 먼저 만든 것은 해결책이 아니라, 실제 도메인(domain)에서 정직하게 측정할 수 있는 방법이었습니다.
02 잘못된 방향
우리는 뻔한 원인에 도박을 걸었습니다. 그리고 패배했습니다.
"박스(boxes)가 타이트해 보이니, 탐지기(detector)가 사람을 놓치고 있는 게 분명해." 합리적인 생각이었습니다. 그래서 우리는 비용이 많이 드는 작업을 수행했습니다. 약 9,100장의 상업용 라이선스 스포츠 이미지를 수집하고, 클라우드 GPU에서 탐지기를 미세 조정(fine-tuning)하여 0.716이라는 양호한 mAP를 달성한 뒤 다시 시스템에 연결했습니다.
수 시간 동안의 데이터 정리(data-wrangling)와 학습은 아무런 성과를 가져다주지 않았습니다. 좌절스러웠지만, 이 실패가 바로 단서였습니다. 더 나은 탐지기가 아무것도 바꾸지 못한다면, 탐지(detection)는 병목 현상(bottleneck)이 아니었던 것입니다. 단지 아직 증거가 없었을 뿐입니다.
03 모든 것을 바꾼 측정
우리는 실패에 대해 논쟁하는 대신 실패를 분해했습니다
우리는 놓친 모든 순간을 가져와 파이프라인(pipeline)의 어느 단계에서 누수가 발생하는지 태깅했습니다: 탐지(detection) → 추적(tracking) → 포즈(pose) → 충격(impact). 하나의 스크립트, 주관 배제. 이 분석 결과가 논쟁을 종결시켰습니다:
탐지(Detection)는 15%였습니다. 진짜 누수(leak) — 55% — 는 다운스트림(downstream)에 있었습니다. 사람은 발견되어 추적(tracking)되었지만, 포즈(pose) 신호가 너무 약해서 우리의 운동학(kinematics) 모델이 충격(impact)을 감지하지 못했습니다. 우리는 잘못된 길을 닦고 있었습니다. 교훈: 투자하기 전에 분해(decompose)하십시오.
04 실제 병목 현상(BOTTLENECK) 해결
더 날카로운 포즈 신호가 우리가 갇혀 있던 한계를 돌파했습니다
이제 올바른 목표를 겨냥하게 되자, 해결책은 저렴했고 순수 소프트웨어 방식이었습니다: 포즈 크롭(pose crop) 해상도를 높이고 (256 → 384), 모델 정밀도(precision)를 높이며 (복잡도 1 → 2), 비대칭 크롭 편향(asymmetric crop bias)으로 다리를 잘라내는 것을 중단했습니다. 데이터도 필요 없고, GPU도 필요 없습니다. 이것은 단순히 동작 지점(operating point)을 옮기는 것이 아니라, 진정으로 더 깨끗한 신호를 만드는 것이었으며, 순수하게 임계값 튜닝(threshold-tuning)만으로는 결코 깨뜨릴 수 없었던 F1 점수 0.54의 천장을 돌파했습니다.
05 함정(THE TRAP)
개선 사항이 처음에는 퇴보(regression)처럼 보였습니다
우리는 네 가지 개선 사항을 동시에 적용했고, 재현율(recall)이 떨어졌습니다: 0.769 → 0.692. 유혹적인 방법은 숫자가 다시 좋아 보일 때까지 탐지 임계값(detection threshold)을 낮추는 것이었습니다. 그랬다면 결함을 찾아내는 대신 실제 결함을 임시방편으로 덮어버렸을 것입니다. 그래서 우리는 하나씩 깔끔하게 제거하며 성능을 확인하는 어블레이션(ablation) 테스트를 수행했습니다.
이것은 탐지기 우회(detector detour) 사례와 같은 교훈이지만, 한 단계 더 깊은 내용입니다: 당신에게 거짓말을 하는 숫자가 낮은 숫자보다 더 위험합니다. 어블레이션(Ablation)은 그 둘을 구별하는 방법입니다.
06 결과(THE RESULT)
0.56 → 0.86, 그리고 취약했던 스포츠 종목들도 성과를 거두었습니다
● Shipping note Precision(정밀도)은 0.51에 머물러 있습니다 — 몇 개의 추가적인 오탐(false highlights)이 발생합니다. 하이라이트 릴(highlight reel) 제작을 위한 적절한 트레이드오프(trade-off)를 고려하자면, 목표를 놓치는 것보다 더 많이 잡아내는 것이 낫습니다. 베타 테스트 이후에 이를 더 강화할 예정입니다.
07우리가 팔에 문신으로 새길 것들
낭비된 GPU 시간으로 얻은 세 가지 교훈
i.
투자하기 전에 분해(Decompose)하십시오. 우리는 문제의 15%에 불과했던 병목 현상을 해결하려고 클라우드 미세 조정(fine-tune) 비용을 낭비했습니다. 단 한 번의 오후 시간만 할애해 실패 원인을 분석(failure breakdown)했더라면 일주일 전체의 방향을 바로잡을 수 있었을 것입니다.
ii.
한 번에 하나의 변경 사항만 제거 실험(Ablation)하십시오. 네 가지 수정 사항을 동시에 적용했을 때는 전체적인 이득 속에 숨겨진 퇴보(regression)를 찾아낼 수 없었습니다. 격리(Isolation)를 통해 단 한 번의 과정으로 단 하나의 원인을 찾아낼 수 있었습니다.
iii.
너무 쉽게 회복되는 숫자를 불신하십시오. 임계값(threshold)을 낮추는 방식은 비디오 모드(video-mode) 버그를 은폐했을 것입니다. 편리한 해결책과 올바른 해결책은 거의 같은 동작이 아닙니다.
승리하는 설정 — 새로운 데이터 없이, 오직 소프트웨어만으로
z_threshold: 2.0 # 영향력 민감도 (impact sensitivity)
video_mode: false # 문제의 원인이었던 단 하나의 플래그
crop_size: 384 # 더 선명한 포즈 신호 (pose signal)
model_complexity: 2 # 포즈 정밀도 (pose precision)
bottom_bias: 0.15 # 다리가 잘리는 현상 방지
tcn_rescue: on # 분류기(classifier)가 약한 후보군을 구제
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기


