김재현 | 이성연 | 임보라 | 정유석 | 이창재 |
---|---|---|---|---|
Team Member | Team Member | Team Leader | Team Member | Team Member |
비고 | AWS Server | Google Colab | Kaggle Notebook |
---|---|---|---|
GPU | A10G | T4 | P100 |
RAM | 16GB | 13~52GB | 13GB |
Storage | 250GB | 166GB | 73GB |
NFL(The National Football League) & AWS에서 주최한 미식축구 관련 대회미식축구(National Football League, NFL)는 미국에서 가장 인기 있는 프로페셔널 리그 중 하나 미식축구 경기는 공을 가지고 상대편 골대까지 전진하며 점수를 얻는 것이 목적 총 32개의 팀으로 구성되어 있으며, 미국과 세계 각지에서 매년 매우 인기 있는 경기들을 개최 매년 2월 초에 열리는 NFL의 결승전인 슈퍼볼은 단일 스포츠 이벤트로서는 세계 최대 규모의 흥행을 자랑
VIDEO 및 플레이어 Tracking Data를 사용하여 선수 부상 감시 및 완화 프로그램을 만들기 위한 목적
1️⃣ 첫번째 대회는 헬멧 충돌 탐지(Impact Detection) - 헬멧 중 어떤 것이 충돌을 일으키고 있는가?
2️⃣ 두번째 대회는 헬멧 배정(Helmet Assignment) - 충돌하는 헬멧을 쓰고 있는 선수는 누구인가?
3️⃣ 여기에 이어 열린 3번째 대회 선수 접촉 탐지(Player Contact Detection) - 경기 중에 누가 접촉을 했는가?
NFL 영상 | Train | Test |
---|---|---|
갯수 | 720개 | 6개 |
- 1280x720 해상도
- 60fps (Frame Per Second)
- Video 당 약 5~12초 정도의 길이
두 개의 메인 뷰는 Sideline 및 Endzone에서 촬영 → 비디오 쌍은 시간 프레임별로 일치
영상 모두 59.94HZ의 프레임 속도 (초당 약 60개의 프레임(정확히는 59.94개)으로 구성)
1️⃣ 데이터 재구성
- 한 선수의 정보만 기록된 기존 정보에서 두 선수의 정보를 모두 고려 (8 * 2)
- 'step'을 기준으로 PLAYER 1과 PLAYER 2의 위치(X, Y 좌표), 이동 속도, 거리, 가속도, 선수 방향, 선수가 바라보는 방향 추가
- 한 팀당 선수는 11명 / 총 22명의 선수들 사이의 모든 경우의 수 기록
- 두 선수의 거리, nfl_player_id_1의 그라운드 충돌 여부 추가
2️⃣ 데이터 필터링
- 거리 2야드 이하인 Feature만 선택 (2야드 = 약 1.8미터)
- 서로 가까운 선수들만 포함하여 접촉 가능성이 높은 데이터에 집중함으로써 더 정확한 접촉 감지 모델을 학습
- 접촉 가능성이 낮은 데이터를 제거함으로써, 모델이 불필요한 노이즈에 영향을 받지 않고 접촉 감지에 집중
- 학습 데이터 크기가 줄어들어 모델 학습 시간이 단축
3️⃣ 파생변수 추가
- 헬멧 Bounding Box 정보로 클러스터링을 이용하여 데이터 feature 증강
- 데이터 간의 차를 이용하여 feature 증강
- 데이터 간의 곱을 이용하여 feature 증강
4️⃣ 결측치 처리
- 선수가 땅에 부딪힐 경우 결측치를 '0'으로 채움
- Pycaret 을 사용하여 모델선정 XGboost, LGBM
- Optuna frame work 를 사용하여 모델의 최적의 파라미터 값 찾기
- 'game_play' 영상데이터를 frame 단위로 구분한 시계열 데이터이므로 Group K-fold 교차 검증 수행
-
Video 영상 파일을 이미 파일로 변환 -> 변환 후 이미지 총 372,506 장
⇒ 2.5D 모델로 학습(연산량을 낮추고, 학습시간을 낮춘다) 시간정보를 반영하였기 때문에 각 픽셀의 공간적 정보를 유지함으로써 양질의 데이터 -
Feature Selection
- 거리 2야드 이하인 Feature 만 선택
- 데이터프레임에 새로운 열 'frame' 추가
- NFL Video 보다 Tracking Data의 Frame 의 길이가 김
- 두 Dataset 을 ball snap 이 발생하는 시점에 정보를 활용하여 맵핑
- 결측치 처리
- 헬멧 정보를 가져와 PlayerID에 따라 그룹화 → 각 프레임별로 BBox 계산
- 누락된 프레임의 경우, 데이터의 양방향으로 선형 보간
- 주변 정보를 충분히 고려하기 위해 window 값을 24로 설정 (약 0.4초)
- 누락된 Frame 정보가 인접한 frame 정보를 바탕으로 적절하게 생성되어 품질 개선
- Image Transform
- 잘라낸 부분 이미지는 다음 단계에서 모델에 input으로 사용
⇒ 이미지에서 선수끼리 충돌하는 영역에 집중 가능
- Data Transformation
-
Geometric Transformations, Color Transformations, Blur, Noise, Crop and Pad, Optical Distortion, Grid Distortion 등 다양한 기법들을 고려해보았으나
-
📊 최종데이터 시각화
- 멀티모달
- Stacking
- Hard Voting
- Soft Voting
- Attempts
- 멀티모달을 사용해 봄으로써 데이터를 다룰 수 있는 관점이 확대
- 3D영상 데이터의 딥러닝 기술과 정형데이터의 머신러닝 기술을 앙상블하여 모델 핸들링에 대한 시각을 넓힘
- 미식축구에 대한 이해가 부족해서 어려운 대회였지만, 대회를 참여하며 미식축구에 대한 지식을 쌓을 수 있는 좋은 기회
- Score를 다른 사람들과 비교하며 향상시킬 수 있는 점에서 몰입감 상승
- 이번 대회를 통해 배운 최신 기술과 경험들을 더욱 발전시켜 앞으로의 프로젝트에 적용 가능