diffusion이 큰 화제가 되면서 (된지는 좀 됐죠? ^^), motion 생성에도 쓰이기 시작했는데요! 이후에 계속 나온 motion generation 분야에서 기초가 되기도하고, 또는 테스트 비교 대상이 되는 MDM 논문을 소개해봅니다. 이 논문의 가장 큰 포인트는 노이즈를 예측하는 것이 아닌 점에 있는데, 이런 핵심 아이디어가 MDM의 시작이 아닐까 생각해봅니다 ㅎㅎ
https://arxiv.org/pdf/2209.14916.pdf
https://guytevet.github.io/mdm-page/
https://github.com/GuyTevet/motion-diffusion-model
https://replicate.com/daanelson/motion_diffusion_model
Introduction
모션 생성은 many-to-many 매핑 문제로 봐야합니다. 논문의 예를 인용하자면, "kick"은 축구의 발차기를 의미할 수도 있지만, 카라테의 발차기가 될 수 도 있기 때문이죠(위 그림 참조). 하지만, text-to-motion 연구들의 대부분은 Auto-Encoder또는 VAE를 사용하기 때문에, 학습된 분포 속에서 one-to-one 매핑 또는 정규 분포로 제한되죠. 이런 문제를 저자들은 target distribution으로 부터 자유로운 diffusion model을 이용하여 해결하였습니다.
단, diffusion에게도 단점은 있습니다. 일단 리소스가 많이들어가고, 제어도 어렵기 때문이죠. 저자들은 이 어려움에도 불구하고 아래와 같은 특징을 가진 최대한 효율적이고 정교한 모델을 개발합니다.
UNet이 아닌 transformer 기반의 backbone 사용
ligthweight(비교적 가볍고), temporal & non-spatial의 특징을 가진 모션 데이터에 적합
Geometric loss를 이용하여, 속도 조절과 발 미끄러짐을 제어.
다양한 형태의 conditioned 생성 가능 (다양한 기능 지원)
text-to-motion, action-to-motion, unconditioned motion generation
classifier-free manner를 이용한 다양성과 정확성의 밸런싱
위와 같은 특징으로, HumanML3D와 KIT에서 SOTA성능을 달성했고, 심지어 정성평가에서 42%의 심사자들이 MDM의 결과물을 더 선호했다고 합니다.
Motion Diffusion Model
모델의 목표: 조건 c c c 에 따라 길이 N N N 의 인간 모션 x 1 : N x_{1:N} x 1 : N 을 생성. (조건이 없는 경우도 포함)
x 1 : N = x i i = 1 N x_{1:N} = {x_i}_{i=1}^{N} x 1 : N = x i i = 1 N : generated pose sequence
x i ∈ R J × D x_i \in \mathbb{R}^{J \times D} x i ∈ R J × D , J J J : joint개수, D D D : dimension of joint representation.
pose 표현 방식: location / ratation / (location, roation)
Framework
Diffusion은 Markov noisiong process에 따라 모델링 된 것.
q ( x 1 : N t ∣ x 1 : N t − 1 ) = N ( α t x 1 : N t − 1 , ( 1 − α t ) I ) q(x_{1:N}^{t} | x_{1:N}^{t-1}) = \mathcal{N} \left( \sqrt{\alpha_t} x_{1:N}^{t-1}, (1 - \alpha_t) I \right) q ( x 1 : N t ∣ x 1 : N t − 1 ) = N ( α t x 1 : N t − 1 , ( 1 − α t ) I )
{ x t 1 : N } t = 0 T \{x^{1:N}_t\}_{t=0}^{T} { x t 1 : N } t = 0 T : difffusion 과정에서 t = 0 t=0 t = 0 부터 t = T t=T t = T 까지 변하는 모든 x t 1 : N x_t^{1:N} x t 1 : N 들의 모음.
x t 1 : N x_t^{1:N} x t 1 : N : 시간 t t t 에서의 모션 시퀀스(전체 프레임)
α t ∈ ( 0 , 1 ) \alpha_t \in (0,1) α t ∈ ( 0 , 1 ) : 고정된 하이퍼파라미터
위 수식에서, α t \alpha_t α t 가 아주 작으면 x 1 : N T x_{1:N}^{T} x 1 : N T 는 정규분포 N ( 0 , I ) \mathcal{N}(0, I) N ( 0 , I ) 에 가까워지고, 이후부터는 노이즈 단계 t t t 스텝에서의 전체 시퀀스를 x t x_t x t 로
모션 생성에 있어서는 p ( x 0 ∣ c ) p(x_0 | c) p ( x 0 ∣ c ) 를 reverse diffusion process로 모델링하며, 이는 노이즈가 많은 x T x_T x T 를 점진적으로 깨끗한 데이터로 변환하는 과정.
기존 diffusion 처럼, 역방향 과정에서 노이즈를 예측하는 것이 아닌 signal 자체를 예측하는 방식. x 0 ^ = G ( x t , t , c ) \hat{x_0}=G(x_t,t,c) x 0 ^ = G ( x t , t , c )
손실함수 L s i m p l e L_{simple} L s i m p l e
L simple = E x 0 ∼ q ( x 0 ∣ c ) , t ∼ [ 1 , T ] [ ∥ x 0 − G ( x t , t , c ) ∥ 2 2 ] L_{\text{simple}} = \mathbb{E}_{x_0 \sim q(x_0 | c), t \sim [1, T]} \left[ \| x_0 - G(x_t, t, c) \|^2_2 \right] L simple = E x 0 ∼ q ( x 0 ∣ c ) , t ∼ [ 1 , T ] [ ∥ x 0 − G ( x t , t , c ) ∥ 2 2 ]
Geometric Losses
전체 Loss
L = L simple + λ pos L pos + λ vel L vel + λ foot L foot L = L_{\text{simple}} + \lambda_{\text{pos}} L_{\text{pos}} + \lambda_{\text{vel}} L_{\text{vel}} + \lambda_{\text{foot}} L_{\text{foot}} L = L simple + λ pos L pos + λ vel L vel + λ foot L foot
L pos = 1 N ∑ i = 1 N ∥ F K ( x i 0 ) − F K ( x ^ i 0 ) ∥ 2 2 L_{\text{pos}} = \frac{1}{N} \sum_{i=1}^{N} \| FK(x_i^0) - FK(\hat{x}_i^0) \|_2^2 L pos = N 1 ∑ i = 1 N ∥ F K ( x i 0 ) − F K ( x ^ i 0 ) ∥ 2 2
예측된 관절 위치가 원본과 잘 align 되도록
F K ( ⋅ ) FK(\cdot) F K ( ⋅ ) : rotation을 positiondm로 변환하는 forward kinematic function
L foot = 1 N − 1 ∑ i = 1 N − 1 ∥ ( F K ( x ^ i + 1 0 ) − F K ( x ^ i 0 ) ) ⋅ f i ∥ 2 2 L_{\text{foot}} = \frac{1}{N - 1} \sum_{i=1}^{N-1} \| (FK(\hat{x}_{i+1}^0) - FK(\hat{x}_i^0)) \cdot f_i \|_2^2 L foot = N − 1 1 ∑ i = 1 N − 1 ∥ ( F K ( x ^ i + 1 0 ) − F K ( x ^ i 0 ) ) ⋅ f i ∥ 2 2
발이 지면에 닿았을 때 속도를 0으로 만들어 발 미끄러짐(foot-sliding) 현상을 완화
L vel = 1 N − 1 ∑ i = 1 N − 1 ∥ ( x i + 1 0 − x i 0 ) − ( x ^ i + 1 0 − x ^ i 0 ) ∥ 2 2 L_{\text{vel}} = \frac{1}{N - 1} \sum_{i=1}^{N-1} \| (x_{i+1}^0 - x_i^0) - (\hat{x}_{i+1}^0 - \hat{x}_i^0) \|_2^2 L vel = N − 1 1 ∑ i = 1 N − 1 ∥ ( x i + 1 0 − x i 0 ) − ( x ^ i + 1 0 − x ^ i 0 ) ∥ 2 2
Model
Sampling
각 시간 스텝 t t t 마다, 모델은 깨끗한 모션 샘플 x ^ 0 = G ( x t , t , c ) \hat{x}_0 = G(x_t, t, c) x ^ 0 = G ( x t , t , c ) 를 예측한 후, 다시 노이즈를 추가하여 x t − 1 x_{t-1} x t − 1 로 변환(t = T t=T t = T 부터 시작하여 x 0 x_0 x 0 에 도달할 때까지 반복)
모델 G G G 는 classifier-free guidance를 활용하여, conditional과 unconditioned 분포를 동시에 학습
샘플의 10%에 대해 c = ∅ c = \emptyset c = ∅ (조건이 없음)으로 설정하여 G ( x t , t , ∅ ) G(x_t, t, \emptyset) G ( x t , t , ∅ ) 가 p ( x 0 ) p(x_0) p ( x 0 ) 를 근사하도록 학습
그 후, 샘플링 시에는 두 가지 방식을 interpolation 또는 extrapolation하여 다양성과 정확성 간의 균형을 조정
G s ( x t , t , c ) = G ( x t , t , ∅ ) + s ⋅ ( G ( x t , t , c ) − G ( x t , t , ∅ ) ) G_s(x_t, t, c) = G(x_t, t, \emptyset) + s \cdot (G(x_t, t, c) - G(x_t, t, \emptyset)) G s ( x t , t , c ) = G ( x t , t , ∅ ) + s ⋅ ( G ( x t , t , c ) − G ( x t , t , ∅ ) )
Editing
연구자들은 시간적인 면에서 특정 부분의 모션을 보간하는 기능과 신체 일부만을 편집하는 기능 추가
편집은 학습과정 없이 샘플링중에 이뤄짐.
모션 시퀀스의 일부가 주어졌을 때, 각 iteration 마다 모델이 예측한 x ^ 0 \hat{x}_0 x ^ 0 를 원본 모션의 일부로 덮어쓴다. -> 보간 효과
Experiments
T = 1000 T=1000 T = 1 0 0 0 의 노이즈 스텝과 코사인 노이즈 스케줄로 학습
NVIDIA GeForce RTX 2080 Ti GPU 한 대로 3일 학습
KIT와 HumanML3D에서 사용한 평가지표 사용 (Guo et al.)
R-precision
Multimodal-Dist
FID: 생성된 모션 분포와 GT 모션 분포의 연관성
Diversity: 생성된 모션분포의 다양성
MultiModality: 하나의 프로폼트에서 생성된 모션들의 평균 분산
Data
HumanML3D: AMASS 와 HumanAct12에 텍스트, 루트 속도, 관절 위치, 관절 속도, 관절 회전, 발접촉 정보 추가
KIT