AI Golf: Golf Swing Analysis Tool for Self-Training (Review)

aarchiiive·2023년 2월 1일
0

Abstract

Main challange는 일반 골프 유저와 프로의 자세를 비교하는 것이고, unsupervised learning(비지도 학습)을 사용하였다.

  • 다른 Golf pose estimation과 조금 상이한 점은 motion discrepancy detector라는 자체적인 알고리즘을 도입하여 시간에 따른 프레임의 sequence를 syncronize한다.
  • 그 후 latent space에 있는 motion과 학습된 모델의 motion을 서로 비교하는 과정을 거친다.
  • 특이한 점은 two input motions….? (뒤에서 살펴보기)

Introduction

Unsupervised learning

  • 프로들의 motion을 학습시켰을 때 domain-specific(특정 분야에 한정된)한 모델이 되지 않기 위해서 unsupervised learning을 사용하였다.
  • 그러므로 본 논문에서 제시한 neural networks는 다른 스포츠에도 적용이 가능하다.

How to get fine-grained informations?

💡 golf swing motion → fine-grained information

논문에서 개발한 시스템은 세개의 모듈로 구성되어 있다.

1) motion synchronizer
2) motion discrepancy detector
3) motion manipulator

1)은 두개의 input motions를 synchronize하고, 2)에서는 각 프레임 별로 불일치 정도를 계산한다. 마지막으로 3)에서는 일반 유저의 학습(모델 학습이 아닌 자세 교정을 위한 학습)을 위해 intermediate motions(중간과정의 모션들)을 만든다.

Datasets

출처가 구체적으로 명시되어 있진 않으나 existing databases와 raw video data, 3D pose data, phase(단계별 자세)가 들어있는 labels(keypoints 아님)을 사용하였다. 정확도를 구하기 위해서 raw video, video without backround, 3D human pose 총 3개의 타입의 input을 사용한다.

현재까지의 내용으로 미루어 보았을 때 일반 유저와 프로의 motion이 two input images/motions임을 추측할 수 있다.


Sports training for skill acquisition

시각적으로 보이는 모션과 공을 치는 소리와 같은 audio feedback을 이용해서 스윙 자세를 분석하는 연구가 있었는데, 이러한 연구들에서는 이상적인 자세가 아니면 분석에 사용하기 어렵다. 이상적인 자세는 스포츠마다 다르기 때문에 일반화하기 어렵다는 단점도 있다. 또한 synchronization 과정을 거치지 않은 일반 유저의 motion는 특정 프로의 자세의 싱크와 비슷하거나 아예 맞지 않을 수 있으므로 step-by-step으로 유저에게 자세를 가르치기 힘들다는 점이 있다.

Video and motion alignment

Speech-to-lip과 같은 상황에서 time alignment가 필요한 경우 사용하는 알고리즘이 존재한다. 예전의 방식은 dynamic time wraping(DTW)이고 최근 몇년간 발표된 논문에서 unsupervised learning을 이용해 alignment를 성공적으로 구현한 사례가 다수 존재했다. 본 논문에서는 ‘Temporal cycle-consistency learning’의 loss를 참고하여 신경망의 loss를 구현하였다.

GitHub - June01/tcc_Temporal_Cycle_Consistency_Loss.pytorch: This is the pytorch version of tcc loss, used in paper 'Temporal Cycle-Consistency Learning'.

Discrepancy detection

비교적 최근에 알려진 방법들 중 첫번째는 abonormal events들을 labeling해서 모델을 학습시키는 것이고, 두번째는 normal behaviors를 unsupervised learning을 이용해 학습하는 것이다.

[References]
1. 3D human motion analysis to detect abnormal events on stairs
2. Exploiting simple hierarchies for unsupervised human behavior analysis

하지만 위의 연구에서는 fine-grained differences를 찾아내기 어렵고 video와 3D pose(two input motions)를 input으로 사용해야 하기 때문에 두 가지 조건을 충족시키는 discrepancy detector를 구현했다.

[References]
1. Deformation based abnormal motion detection using 3D skeletons
2. Graph-based motion prediction for abnormal action detection

GitHub - LukasHedegaard/continual-skeletons: Official codebase for "Online Skeleton-based Action Recognition with Continual Spatio-Temporal Graph Convolutional Networks"

GitHub - kennymckormick/pyskl: A toolbox for skeleton-based action recognition.


Methods

Overview

먼저 두 가지의 motion(X1, X2)으로 사용하고 이를 latent space에 넣은 후 2개의 vectors(L1, L2)를 얻는다. 그리고 MS(Motion synchronizer)에서는 이 두 벡터의 timing을 match시킨다. 이때 Euclidean distance를 사용하여 2개의 latent vectors(V1, V2)를 얻는다. MDD(Motion discrepancy detector)에서 이 두 벡터의 거리 간의 차를 이용하여 D12를 얻고 MM(Motion manipulator)에서 V1, V2, Vinter를 종합하여 key frame에서 큰 차이가 있는 부분을 알아낸다. 마지막으로 intermediate human poses를 복원하여 output vector Y를 완성한다.

Motion synchronization

  • V-TCC : video input을 사용하고 일반적인 CNN(eg. ResNet50)을 사용한다.
  • S-TCC : skeleton input을 사용하고 fc layer만을 이용해서 간단하게 구현한다. input layer(3x16) → output layer(1x48)
  • SA-TCC : skeleton input을 사용하고 self-attention 알고리즘을 사용한다.

Self-attention block

SA-TCC 부분에서 skeleton attention을 알아내는 부분이다. key points를 squeeze(1x48)하고 q(x), k(x), v(x)에 각각 넣는다. 공부 필요….

GitHub - heykeetae/Self-Attention-GAN: Pytorch implementation of Self-Attention Generative Adversarial Networks (SAGAN)

Discrepancy detection

Synchronization이 완료되면 위와 같은 식을 이용해서 distance vector를 구한다. Figure 3에서와 같이 key frame이 눈에 띄게 불일치 하는 점이 나타난다.

Motion manipulation

fully connected layer로 이루어진 간단한 decoder로 구현하였고 loss는 Mean squared error를 사용하였다.


Datasets

  • GolfDB를 사용하였고 남성/여성 프로 선수의 3D video와 영상을 사용하였다.
  • video without backround의 경우 Mask R-CNN을 사용하였으나 YOLO를 사용해도 무방해보인다.
profile
Post Anything

0개의 댓글