재가 좋아하는 Real Virtual Human 연구소에서 새로운 논문 UniMotion: Unifying 3D Human Motion Synthesis and Understanding을 발표했습니다. 이미 많은 분야에서 사용하고 있는 Diffusion모델을 Motion쪽에도 적용하였습니다. 물론, 벌써부터 Text to Motion은 많이 연구되어오긴했는데, 아직은 뭔가 엉성한? 느낌이 없지 않아 있고, artifact들이 있었습니다. 그런데 이번에 소개할 논문은 그런 느낌을 최소화하는 방향과 동시에, 프레임 단위의 동작과 전체적인 동작이 잘 어우러지게 조작할 수 있도록 해주었습니다.
모델의 원리도 중요하지만, 데이터를 어떻게 사용했는지와 같은 디테일적인 면도 정말 필요하게 느껴졌는데, 그 내용은 supplementary Material을 통해서 알 수 있었습니다. 그 부분에서 연구자들이 얼마나 많은 시행착오를 했는지 알 수 있었습니다. 👏
https://arxiv.org/pdf/2409.15904
https://coral79.github.io/uni-motion/
https://github.com/Coral79/Unimotion
: 생성 모델은 global한 목적을 인지하고 있는 동시에 local한 부수 task까지 수행하며, 어떤 행동이 언제 일어나는지 인지하고 있어야 한다. 하지만, 대부분의 연구들은 계층적인 조작이 어렵거나, 동작이 어설프고, frame별로 동작이 어려운 경우가 많다. 본 논문은 Unimotion을 제안하여, flexible한 동시에 frame level motion에 대한 이해가 가능하도록 하였다.
모델의 input은 전체적인(global), 세부적인(local) 모션에 대한 설명이나, 모션 시퀀스, 또는 일부, 심지어 없을 수 있다. 이에 따른 모델의 output은 세부적인 포즈 설명이나 모션 시퀀스가 될 수 있다. 이러한 flexibility는 Frame-Level Text-to-Motion, Sequence-Level Text-to-Motion and Motion-to-Text를 한번에 할 수 있음을 나타낸다. 더불어, frame-level로 모션을 만들수 있기도 하고, 모션 description을 만들 수 있다.
이 모델은 기본적으로 transformer 구조를 가지고 있다. 또한 UniDiffuser 방법론처럼, 각각의 다른 diffusion time variables을 이용하여, text와 pose를 같이 diffuse함으로써 개선하였다.
학습에 사용한 BABEL(frame-level)과 HumanML3D(sequence-level)의 공통 데이터는 8,829 시퀀스로, HumanML3D 전체의 30.25%밖에 되자 않았습니다.
(모델 구현에 대한 세부정보)
1. repeat:
2. 샘플링: x₀, y₀, c ~ q(x₀, y₀, c)
3. 확률적으로 c를 비움 (10% 확률)
4. t 값을 Uniform(1, 2, ..., T) 에서 무작위 선택
5. 정규분포에서 노이즈 샘플링: εˣ, εʸ ~ 𝒩(0, I)
6. 노이즈 추가:
xₜ = √ᾱₜ * x₀ + √(1 - ᾱₜ) * εˣ
yₜ = √ᾱₜ * y₀ + √(1 - ᾱₜ) * εʸ
7. 모델을 학습하기 위한 그래디언트 스텝 수행:
∇θ|ℓθ(xₜ, yₜ, t, c) - [x₀, y₀]|²
8. until (수렴할 때까지 반복)
1. 샘플링: xₜ⁰ ~ 𝒩(0, I)
2. 조건 설정: c = ⌀ (또는 사용자가 지정)
3. for t = T, ..., 1 do:
4. 정규분포에서 노이즈 샘플링: εₜˣ ~ 𝒩(0, I)
5. 업데이트 공식:
xₜ₋₁⁰ = εθ(√ᾱₜ * xₜ⁰ + √(1 - ᾱₜ) * εₜˣ, y₀, t, c)
6. end for
7. return x₀
# Algorithm 3: Joint Sampling of x₀, y₀
1. 샘플링: xₜ⁰, yₜ⁰ ~ 𝒩(0, I)
2. 조건 설정: c = ⌀ (또는 사용자가 지정)
3. for t = T, ..., 1 do:
4. 정규분포에서 노이즈 샘플링: εₜˣ, εₜʸ ~ 𝒩(0, I)
5. 업데이트 공식:
xₜ₋₁⁰ = εθ(√ᾱₜ * xₜ⁰ + √(1 - ᾱₜ) * εₜˣ, t, c)
yₜ₋₁⁰ = εθ(√ᾱₜ * yₜ⁰ + √(1 - ᾱₜ) * εₜʸ, t, c)
6. end for
7. return x₀, y₀