[NBA Vision] 00. Project Overview

4 minute read

Published:

In this post, a brief overview of NBA Vision Project is shown.

Project Overview

❓선행연구?

1. Data Pipeline

  • Data Collection : nba_api 이용하여 Stephen Curry 24/25 시즌 모든 슛 시도 PBP 영상 확보
    • 1K, 10GB (10MB per video)
      • ❓로컬에서 수집?
      • ❓1K 이면 충분?
  • Data Labeling
    • game_id, event_id, shot_result 등 저장

      • ❓dataframe 저장, csv 저장, SQL 저장 성능 차이
      • ❓메타데이터를 얼마나 labeling 할 것인지
  • Event-based temporal alignment
    • cv2 (이미지와 영상을 처리하는 라이브러리), pytesseract (이미지에서 문자를 인식(OCR) 하는 라이브러리) 이용
    • Data Collection 단계에서 extract_player_shots_all_games 함수가 반환한 특정 선수의 모든 슛 시도 기록 dataframe에 저장된 슛 시도 시각과 event_id를 이용하여 해당 event_id 이름의 PBP 영상에서 스코어보드의 시간대가 슛 시도 시각과 일치하는 부분 영상 crop
      • ❓frame 기준 정해야 함. (PBP 영상은 60fps, 앞 뒤 60fps 총 2초)
      • ❓정확히 슛 모션 지점 포착이 어려운데 해결법. 이를 위한 또 다른 model 학습?
      • ❓7.8MB 영상 기준 로컬에서 2분 40초 소요. 시간 단축법.
  • Pose Estimation
    • 각 video마다, pose_seq $\in \mathbb R^{T \times J \times D}$ 정보 저장.
      • $T$ : frame 수, $J$ : 추적하는 관절 개수, $D$ : 각 관절마다 D차원 벡터로 표현 ($D=3$ 인 경우, ($x, y, conf$) 로 구성. $conf$는 모델이 keypoint를 얼마나 확신하는 정도)
      • pose_seq[t, j] = [x, y, conf]
      • ❓특정 슈터만 추적 방법, 영상에서 가려진 관절 결측치 처리, 정규화
    • 구체적 방법 To Do

2. Visual Appearance-Based Shot Success Prediction

  • pose 없이 순수 영상 정보로 성공 확률 예측 : $P(makevideo)$ model 학습
    • Model : CNN(ResNet), ViT, video encoder model → temporal pooling → MLP

      • video clip
           ↓
        frame encoder (ResNet)
           ↓
        frame features (T x D)
           ↓
        temporal pooling
           ↓
        video feature (D)
           ↓
        MLP
           ↓
        sigmoid
           ↓
        P(make)
        
      • fame encoder : 각 프레임 이미지를 feature vector로 바꾸는 모델. 각 이미지 프레임에 대해 $feature_t \in R^D$ ($D=$ 512 또는 768). 모든 프레임을 encoder에 넣으면 $T \times D$ matrix가 나옴.

      • temporal pooling : MLP는 하나의 벡터만 입력받으므로, 위에서 얻은 matrix의 시간축을 하나로 압축하여 벡터화함. 가장 단순한 방법은 mean pooing. 그 결과 $video_feature \in R^D$ 가 됨.

      • MLP와, sigmoid를 거쳐 최종 확률 계산.
    • Loss : Binary Cross Entropy, $L=−ylogp−(1−y)log(1−p)$

      • BCE가 이론적으로 타당한 이유 아래 정리.
    • Evaluation : accuracy, AUC, calibration

3. Pose Dynamics-Based Shot Success Prediction

  • pose 데이터를 기반으로 슛폼 자체의 영향만 측정. $P(make∣pose_sequence)$ model 학습

    • Model : Temporal Transformer, LSTM, ST-GCN

      • pose sequence
        ↓
        embedding
        ↓
        temporal transformer
        ↓
        CLS token
        ↓
        MLP
        ↓
        P(make)
        
      • Pose Estimation 에서 $T=30, J=17$ 이라 하면 데이터는 다음과 같다.

      • pose_1 = 51차원
        pose_2 = 51차원
        ...
        pose_30 = 51차원
        
      • Temporal Transformer : Transformer를 시간 sequence에 적용한 것이다. 즉, [pose_1, pose_2, ..., pose_T] 을 transformer 입력으로 넣는다. 그러면 self-attention에 의해 각 프레임이 다른 프레임을 참고하게 된다. 앞에 CLS 토큰을 붙여 output CLS 토큰이 전체 sequence를 요약하게 하고, 여기에 MLP → sigmoid를 적용하여 확률을 예측한다. 때문에 transformer에는 decoder part없이 encoder만 존재한다.

      • 51차원의 pose sequence vector를 transformer가 선호하는 128차원의 벡터로 변환하는 embedding layer가 중간에 존재한다. (학습중에 임베딩 벡터도 변한다.)
    • Loss, Evaluation 동일

4. Multimodal Fusion of Visual and Pose Representations

  • $P(make∣video,pose)$
    • Model : Late-Fushion(Multimodal Fusion), Cross-Attention Fusion
      • …
    • Loss, Evaluation 동일

5. Cross-Player Generalization of Shot Form Models

Vast.ai

miss 성공 비율

video clip

feed back

  1. pose estimation하여 관절 정보를 이용하는 것 불필요할 것 같다. 그런 정보가 필요하다면 vision model에서 이며 학습될 것이다. 그리고, 관절 정보를 transformer에 이용하기 위해 벡터 차원 늘리는 과정에서 오히려 부정확해질 것이다.
  2. (정확히 슈팅 직전까지만 crop 되지 않거나, crop 구간이 부정확할 수 있는 문제에 대해) 데이터 수를 늘리면 그 중에 슈팅 직전에 정확히 끊기는 영상도 많아질 것이므로 모델이 잘 학습할 것이므로 괜찮을 것이다.
  3. (한 선수 데이터만으로 테스트하고 여러 선수로 일반화하려는 전략에 대해) 그것보다 차라리 애초에 많은 선수들의 데이터로 학습하는 게 좋을 것 같다. (그렇게 하게 되면 같은 자세라도 어떤 선수들에게는 좋은 자세이고 어떤 선수들에게는 나쁜 자세일텐데 문제가 되지 않냐는 질문에 대해) 모델이 선수들의 신장, 윙스팬 등의 정보를 알아서 학습할 것이므로, 괜찮다.
  4. 앞쪽을 tight하게 (슛 직전 다른 선수들 패스 등) 자르는 걸 추천한다. (가능하다면) 다른 선수들이 고려되지 않도록 슈터만 확대하여 crop하는 걸 추천한다. 이를 위해서 또 다른 딥러닝 모델을 사용하거나 잘 안된다면 학습할 필요성이 있는데 작업이 너무 복잡해질 수 있다.
  5. google colab은 추천하지 않고, vast.ai를 추천한다.

어떤 모델(이미 학습된거, supervised 등등), GPU 학습, 연구비용,

선행연구, SQL 사용여부.

❗️BCE의 타당성

image-20260316164411232

image-20260316164425283

image-20260316164448817

image-20260316164510410

image-20260316164531283

image-20260316164553211

Leave a Comment