얼레벌레

논문리뷰) Bailando: 3D Dance Generation by Actor-Critic GPT with Choreographic Memory 본문

AI/DL

논문리뷰) Bailando: 3D Dance Generation by Actor-Critic GPT with Choreographic Memory

낭낭이 2024. 1. 16. 16:37

 

https://github.com/lisiyao21/Bailando

 

Abstract

  • choreographic 규범에 의한 pose에 적용되는 공간적 제약이 있는데, 3D pose sequence로부터 의미 있는 동작만을 코드북으로 quantize하는 choreographic memory를 도입한다.
  • 서로 다른 음악장르와 시간적으로 일치해야 한다. → diverse motion tempos and music beats사이에 alignment는 actor-critic-based reinforcement learning을 이용한다.

1. Introduction

dance generation on given music은 두가지 challenges가 존재

1) Spatial constraint

2) Temporal coherency with music

대부분의 연구들은 위의 두가지를 다루기 위해 음악의 고차원의 연속된 공간에 3D joint sequence로 직접적으로 매핑하는 단일 네트워크를 구성하는데, target domain에 대한 명확한 제약이 존재하지 않아 stable하지 않고 자칫하다가는 nonstandard한 포즈를 생성하기 쉬움

spatial constraint를 다루기 위해, dance unit의 실제 dancing clips를 수집하는 연구도 있는데, manual한 노력이 너무 많이 필요할 뿐더러 different rhythms에 양립하지 못하고 고정된 길이와 속도로 인해 다른 종류의 음악에 재사용할 수 없다는 문제점이 존재한다.

Bailando

 

1) choreographic memory라 불리는 유한한 quantized dancing unit dictionary를 도입하여 비지도방식으로 3D joint sequence를 encode/quantize하기 위해 VQ-VAE를 활용

  • choreography memory가 나타낼 수 있는 범위를 증가시키기 위해선, 3D pose를 compositional upper and lower half bodies로 나눈다.
  • 각각의 half bodies에 VQ-VAE를 학습한다.

2) choreographic memory와 cross-conditional causal attention을 통합한 actor-critic GPT를 사용해 정확한 temporal synchronization(beat-alignment)

 

2. Related Work

 

3. Our Approach

finite codebook으로 기본적인 댄스동작들을 encode/quantize하고 VQ-VAEs를 upper&lower half bodies에 각각 학습시켜 upper-and-lower pose code pairs로 나타낸다. 이후 motion GPT에 actor critic learning을 도입하여 motion tempo와 music beat사이 alignment를 이룬다.

 

3.1 3D Pose VQ-VAE with Choreographic Memory

unsupervised 방식으로 댄스 positions를 codebook에 요약하는데, 여기서 개별적인 포즈코드를 만들고 이를 다시 dancing sequence로 재구성할 때 3D pose VQ-VAE를 사용한다. codebook에서 temporal feature e와 가장 가까운 element를 지정(argmin부분)하고 이를 quantize하여 dance movement P_hat을 재구성한다.

한정된 dance data로 훈련할 때 더 많은 범위의 motion을 표현하고자 lower과 upper body에 각각의 3D pose VQ-VAE를 훈련함으로써 learned codebook이 cover할 수 있는 동작 범위가 더 커질 수 있도록 한다.

input P가 root joint(hips)를 기준으로 normalize되어 들어와 global shift of joints에 의해 발생하는 encoding confusion을 막는다.

Pose Decoder이 아니라 Global Velocity Decoder을 개별적으로 끼워넣어(D_V) 전반적인 동작의 방향을 인지하도록 한다 → 이가 후에 upper와 lower body의 방향이 엇갈린다든지..하는 걸 막아준다. 근데 데모보면 차이점을 잘 못 느끼겠음

 

3.2. Cross-Conditional Motion GPT

주어진 음악과 존재하는 movement에 대해 future action을 위한 적절한 코드를 codebook으로부터 reframe하는 것이 dance generation의 task이다. Bailando는 upper/lower body를 나눠서 진행했기 때문에 미래 action에 대한 예측은 각각에 가장 상호적인 정보를 전달할 수 있는 cross-conditional motion GPT를 사용한다. → cross-conditioned attention을 사용함으로써 부자연스러운 동작 생성을 막고 mutual information을 담은 동작을 생성할 수 있다.

구조를 보면, 코드북을 만들기 이전에 T’ x C에 각각 upper, lower pose code를 임베딩하고 그거에 music feature을 합쳐서 (3 x T’) x C인 텐서를 얻는다. 이를 f_s(12개의 연속적인 transformer layer)에 넣고 말단엔 linear transform+softmax layer을 넣어서 action probability가 normalize될 수 있게 한다.

 

3.3  Actor-Critic Learning

 

4. Experiments

Dataset AIST++ dataset사용. 992개의 60fps 3D pose sequence in SMPL format(SMPL : Skinned Multi-Person Linear model)(952개는 train, 40개는 eval)

 

Implementation Details

  • codebook size N = 512
  • temporal downsampling rate d of encoders = 8
  • ... 이외는 yaml파일 뜯어보거나 논문 읽으면 된당 ..

Evaluation Metrics

  • the quality of generated dances → FID를 이용해 측정
  • the diversity of motions → the average feature distance of generated movements
  • the alignment between the rhythms of music and generated movements → the average temporal distance between each music beat and its closest dance beat as the Beat Align Score

4.1. Comparison to Existing Methods

Li et al., DanceNet, DanceRevolution, FACT와 비교를 진행한다.

kinetic feature은 motion velocity에 의해 정의되어 모션이 역동적으로 움직일수록 큰 값이 나오고, geometric feature은 choreography의 quality에 의해 정의된다. Bailando는 실제와 같은 모션을 만들뿐만 아니라 actor-critic GPT를 이용해 뛰어난 dance movement 성능을 보인다.

 

4.2. Ablation Studies

VQ-VAE와 motion GPT에 ablation study를 진행 - up-lower half body separation/global velocity prediction branch/velocity and acceleration loss

  • upper-lower half body로 나누지 않으면 choreographic memory가 다룰 수 있는 포즈의 범위가 제한되므로 필수적임

Motion GPT

  • cross-conditional attention layer을 도입하면 half bodies사이 interaction 정보를 전달할 수 있기 때문에 upper-lower body사이에 부조화를 개선할 수 있다.
  • actor-critic finetuning을 통해 마지막으로, music beat와 dance tempo사이에 consistency!

4.3. Interpretability of Choreographic Memory

  • 비지도학습으로 pose VQ-VAE를 통해 codebook에 dancing units를 요약하는 것이 목적
  • 특정 pose_(n-1)에서 pose_n으로, smooth transition을 이루어 이전의 연구같이 black box가 아닌 choreography process가 interpretable하다.

5. Discussion and Conclusion

  • spatial 제약 → encoding과 quantizing dancing-style poses의 choreographic memory 이용
  • temporal coherency with tempos and beats → actor-critic motion GPT
  • 결국 우리 모델이 짱이당…

 

최신 모델이라고 생각했는데 이미 인용이 많이 된 모델 코드가 꽤나 복잡하다(내기준)

모델을 훈련하고 evaluation까지 돌려보려 그랬는데, 모델이 꽤나 크다..

train dataset에서 하나가 빈 파일인데 용량순으로 해서 빈용량인걸 지워야 코드가 돌아간다. 이외엔 pytorch버전이 안맞는지 yaml.load()가 제대로 안 돌아가서 full_load()로 고쳐주거나 아예 pytorch 버전을 바꿔서 진행했고, funtional.py의 552-559에 float64 type을 astype(np.float32)로 수정하여 돌려야 그나마 메모리를 덜 잡아먹는다.

아직 코드를 전부 뜯어보진 않았는데 baseline으로 잡고 다른 아이디어를 내보았더니 최신논문으로 다 있어서 의욕이 뚝뚝 ㅠㅠ

Comments