SOMA: SMPL, MHR, Anny 등, 인체 모델을 표현하는 방식을 하나로 잇는 바디 레이어 (feat. NVIDIA)

SOMA 소개

3D 인체를 다루는 연구자라면 한 번쯤 이런 상황을 겪어보셨을 것입니다. 어린이까지 표현할 수 있는 모델로 캐릭터의 체형을 잡아 두었는데, 정작 쓰려는 모션 캡쳐 데이터셋은 전혀 다른 모델을 기준으로 만들어져 있어서, 둘을 잇는 변환 코드를 처음부터 새로 짜야 했던 경험 말입니다. 체형 하나를 바꾸려다 파이프라인 전체를 다시 손대게 되는 이 답답함은, 인체 모델들이 서로 호환되지 않는다는 근본적인 문제에서 비롯됩니다.

이번에 소개할 SOMA 는 NVIDIA DAIR 랩이 공개한 연구로, SMPL, SMPL-X, MHR, Anny처럼 서로 다른 인체 파라메트릭 모델(Parametric Human Body Model)들을 하나의 공통 표현으로 잇는 통합 바디 레이어(Unified Body Layer) 를 제안합니다. 기존 모델을 대체하는 것이 아니라, 각 모델이 만들어 낸 체형을 단일한 표준 메시와 골격으로 사상(mapping)하여, 어떤 체형이든 하나의 애니메이션 파이프라인으로 구동할 수 있게 만드는 것이 핵심입니다.

왜 인체 모델들은 서로 호환되지 않는가

인체 파라메트릭 모델은 컴퓨터 비전, 컴퓨터 그래픽스, 그리고 피지컬 AI(Physical AI)의 근간을 이루는 기술입니다. 사람의 체형과 자세를 소수의 파라미터로 표현하고, 이를 통해 3D 재구성, 애니메이션, 시뮬레이션을 대규모로 수행할 수 있게 해줍니다. 가장 널리 쓰이는 계열은 SMPL 로, 선형 블렌드 스키닝(Linear Blend Skinning, LBS)과 학습된 보정 블렌드 형상을 결합한 6{,}890 개 정점 메시로 사실상의 표준이 되었습니다. 이후 SMPL-X 는 손과 얼굴 표현을 추가했고, MHR 은 뼈 길이(bone length)를 명시적으로 모델링해 사람마다 다른 골격 비율을 더 정확히 담아냈으며, Anny 는 3D 스캔 대신 인체 측정치(anthropometric measurements)로부터 형상 공간을 구성해 영유아부터 노인까지 나이대를 아우르는 체형을 표현합니다.

문제는 이렇게 모델이 다양해지면서 오히려 파편화(fragmentation) 가 심각해졌다는 점입니다. 각 모델은 고유한 메시 토폴로지(mesh topology), 관절 계층(joint hierarchy), 단위 규약(unit convention), 그리고 파라미터 공간을 정의합니다. 그래서 예를 들어 Anny의 나이대 조절 기능과 SMPL 기반 모션 데이터를 함께 쓰려는 연구자는 모델 쌍마다 별도의 토폴로지 변환 파이프라인, 독립적인 골격 피팅 루틴, 그리고 좌표계 변환 코드를 각각 구현해야 합니다.

여기서 결정적인 한계가 드러납니다. M 개의 모델을 순진하게 연결하려면 모델 쌍마다 어댑터가 필요하므로 O(M^2) 개의 어댑터를 만들어야 합니다. 이 비용 때문에 실무에서는 프로젝트 초반에 모델 하나를 선택해 묶여버리고(early model commitment), 다른 모델들이 가진 상호 보완적인 장점을 포기하게 됩니다. 지금까지 연구자가 체형 모델과 자세 파라미터를 자유롭게 조합할 수 있는 통합 인터페이스는 존재하지 않았습니다.

SOMA의 발상: 표준 토폴로지를 축(pivot)으로 삼기

SOMA의 발상 전환은 단순하면서도 강력합니다. 모든 모델을 직접 서로 연결하는 대신, 하나의 표준(canonical) 인체 토폴로지와 리그(rig) 를 중앙 허브로 두고, 각 모델을 이 허브에만 연결하는 것입니다. 이렇게 하면 O(M^2) 의 쌍별 어댑터 문제가 O(M) 개의 단일 백엔드 커넥터로 줄어듭니다. 각 커넥터는 한 번만 구현하면 추론 시점(inference time)에 자유롭게 조합할 수 있습니다.

위 그림처럼 SOMA는 체형(identity)과 자세(pose)를 세 개의 추상화 레이어를 거쳐 분리합니다. 이러한 체형-자세 분리(Identity-Pose Decoupling) 덕분에, SOMA 규약에 맞는 자세 파라미터를 출력하는 자세 추정기나 생성 모델 하나만 있으면 SMPL, MHR, Anny 등 어떤 체형이든 재학습 없이 구동할 수 있습니다. 논문이 제시하는 네 가지 핵심 기여는 다음과 같습니다.

  1. 표준 토폴로지를 통한 체형-자세 분리(SOMALayer): 어떤 모델의 정지 자세(rest-shape) 출력이든 표준 SOMA 메시와 리그로 사상하여, 체형 표현과 운동학적(kinematic) 파라미터를 명시적으로 분리합니다.
  2. 메시 토폴로지 추상화(Mesh Topology Abstraction): 초기화 시점에 각 모델과 SOMA 메시 사이의 3D 무게중심 좌표(barycentric coordinate) 대응 관계를 미리 계산해 둡니다. 런타임에는 신경망 순전파도, 반복적 솔버도 필요 없습니다.
  3. 골격 추상화(Skeletal Abstraction): 공유된 메시 대응 관계를 활용해, 어떤 체형에든 표준 골격을 정확히 피팅하는 백엔드 독립적 알고리즘입니다. 반복적 최적화나 모델별 학습 없이 단일 해석적(analytical) 순전파로 처리합니다.
  4. 자세 추상화(Pose Abstraction): 어떤 모델의 자세가 적용된 정점(posed vertices)으로부터 SOMA 골격의 회전을 역으로 복원합니다. 이를 통해 SMPL, MHR 등의 모션 데이터를 별도의 리타겟팅 없이 SOMA 규약으로 직접 변환할 수 있습니다.

무엇보다 SOMA의 전체 순전파는 종단간(end-to-end) 미분 가능(differentiable)하며 NVIDIA Warp로 GPU 가속됩니다. 즉, 대규모 최적화나 머신러닝 학습 파이프라인 안에 미분 가능한 레이어로 그대로 끼워 넣을 수 있습니다.

SOMA는 어떻게 동작하는가

SOMA의 핵심 런타임 구성 요소는 SOMALayer 로, 어떤 백엔드의 체형 파라미터든 자세 파라미터와 함께 입력받아, 미터(meter) 단위의 자세가 적용된 메시 정점과 관절 위치를 출력합니다. 앞서 본 파이프라인 그림을 따라, 각 단계를 차례로 살펴보겠습니다.

신원 모델 제공자 (Identity Model Provider)

첫 단계는 사용자가 선택한 백엔드의 체형 파라미터 \beta_s 를 받아, 그 백엔드의 고유 토폴로지로 정지 자세 메시를 생성하는 것입니다. SOMA는 다섯 개의 백엔드를 교체 가능한(interchangeable) 형태로 통합하며, 각각의 장점이 뚜렷합니다.

  • SOMA-Shape: SOMA 자체의 형상 공간으로, K=128 개의 주성분 분석(PCA) 성분을 사용합니다. 9{,}326 개의 SizeUSA 인체 스캔과 303 개의 Triplegangers 포토그래메트리 스캔, 그리고 GarmentMeasurements PCA 모델에서 증류(distill)한 샘플을 40/40/20 비율로 섞어 증분 PCA(incremental PCA)로 학습했습니다.
  • SMPL / SMPL-X: PCA 블렌드 형상으로 체형을 표현하며(SMPL은 10 개, SMPL-X는 300 개 성분), 연구 분야에서 가장 널리 채택된 표준입니다.
  • MHR: PCA 체형 계수와 명시적 뼈 길이 배율(bone-length scale)을 결합해, 체표면 형상과 골격 비율을 세밀하게 조절합니다.
  • Anny: 성별, 나이, 근육, 체중, 키, 비율의 여섯 가지 인체 측정 표현형(phenotype)으로 체형을 조절합니다. 다섯 백엔드 중 유일하게 18 세 미만을 표현할 수 있어, 나이대가 다양하거나 아동을 포함하는 응용에 자연스러운 선택지입니다.
  • GarmentMeasurements: 15 개의 PCA 성분으로 체형을 표현하며, 의류 모델링 분야에서 자주 채택됩니다.

메시 토폴로지 추상화 (Mesh Topology Abstraction)

다섯 모델은 정점 수도, 메시 구조도 제각각입니다. 이들을 하나의 SOMA 표준 메시로 옮기는 것이 두 번째 레이어의 역할입니다. 핵심 아이디어는 초기화 시점에 고정된 3D 무게중심 좌표 대응을 미리 계산해 두고, 런타임에는 가벼운 gather 연산으로만 적용 하는 것입니다.

구체적으로, SOMA 메시의 각 정점 \mathbf{v}_i^h 에 대해 원본 메시에서 가장 가까운 삼각형을 찾고, 그 삼각형을 사면체(tetrahedron)로 확장한 뒤 무게중심 좌표 \mathbf{b} \in \mathbb{R}^43 \times 3 선형 시스템으로 구합니다. 삼각형을 사면체로 들어 올리는(tetrahedral lifting) 이유는, 표면에서 살짝 벗어난 질의점(query point)도 특이(degenerate) 상황 없이 처리하기 위함입니다. 2D 무게중심 투영과 달리, 3D 사면체 보간은 명확한 표면 대응이 없는 영역에서도 부피를 보존합니다. 예를 들어 발가락이 개별적으로 있는 모델과 없는 모델을 잇는 경우가 여기에 해당합니다.

이 사전 계산은 초기화 때 한 번만 실행되며, 그 결과인 면 인덱스 배열과 좌표 배열은 고정 버퍼로 저장됩니다. 런타임에는 각 SOMA 정점을 대응 사면체 정점들의 가중 합으로 복원하기만 하면 됩니다.

\mathbf{v}_i^h(\beta) = \sum_{k=0}^{3} B_{ik} \cdot \tilde{V}_s(\beta)[\mathbf{F}^{\text{tet}}_{\mathbf{f}_i, k}]

이 연산의 비용은 원본 모델의 정점 수 N_s 와 무관합니다. 즉, 정점이 아무리 많은 모델이라도 추가 비용 없이 SOMA 토폴로지로 옮길 수 있습니다.

골격 추상화 (Skeletal Abstraction)

모든 원본 메시가 공통 토폴로지를 공유하게 되면, 이제 이들을 구동할 단일 골격 구조가 필요합니다. 연구팀은 SkeletonTransfer 라는 백엔드 독립적 알고리즘을 제안합니다. 공유된 메시 대응만으로 어떤 체형에든 표준 골격을 정확히 피팅하며, SOMA에서는 J=77 개 관절 리그를 사상합니다. 그런데 관절을 새 체형에 맞추는 일이 왜 어려울까요? 관절 위치뿐 아니라 각 관절의 방향(orientation)까지 정해야 하고, 원본 모델마다 기준 자세가 다르기 때문입니다(예: T-포즈 대 A-포즈). SkeletonTransfer는 이를 두 개의 해석적 단계로 나눕니다.

1단계: RBF 기반 관절 위치 회귀. 각 관절마다 표준 바인드 포즈(bind pose) 메시로부터 방사 기저 함수(Radial Basis Function, RBF) 회귀기를 미리 만들어 둡니다. 이 회귀기는 해당 관절이나 그 부모 관절에 0이 아닌 스키닝 가중치(skinning weight)를 갖는 정점들만 사용합니다. 런타임에는 새 체형의 정점 위치로부터 관절 위치를 단일 선형 연산으로 예측합니다. 모든 관절 위치는 미리 조립된 희소 행렬(sparse matrix) \mathbf{W}_{\text{RBF}} \in \mathbb{R}^{J \times N_h} 를 통해 한 번의 희소 행렬 곱으로 병렬 계산됩니다.

2단계: Kabsch 정렬을 통한 관절 회전 피팅. 관절 위치만으로는 골격이 완전히 정의되지 않습니다. 각 관절에는 지역 좌표계를 정하는 방향도 필요하기 때문입니다. 연구팀은 두 단계의 Kabsch 정렬로 회전을 복원합니다. 먼저 가중 직교 프로크루스테스(weighted orthogonal Procrustes) 문제를 풀어 초기 전역 회전 R_k^{\text{init}} \in SO(3) 를 추정합니다. 이는 교차 공분산 행렬의 특이값 분해(Singular Value Decomposition, SVD)로 계산됩니다.

R_k^{\text{init}} = \operatorname*{arg\,min}_{R \in SO(3)} \sum_{\mathbf{v} \in \mathcal{V}_k} \| R(\mathbf{v}^{\text{bind}} - \mathbf{j}_k^{\text{bind}}) - (\mathbf{v}(\beta) - \mathbf{j}_k(\beta)) \|^2

그다음 자식 관절 방향으로 뼈 벡터를 맞추는 정렬 회전 R_k^{\text{align}} 을 추가로 계산합니다. 자식이 하나인 대부분의 관절에서는 두 벡터 사이의 최단호(shortest-arc) 회전으로 간단히 풀리고, 자식이 여럿인 경우에만 프로크루스테스 문제를 다시 풉니다. 이 두 경로 모두 NVIDIA Warp 커스텀 커널로 완전히 벡터화되어, 순차적 관절 루프 없이 대규모 병렬 GPU 실행이 가능합니다.

애니메이션 레이어와 통합 포즈 보정 (Animation Layer)

체형에 맞춘 관절 변환과 정지 자세가 준비되면, 애니메이션 레이어가 표준 선형 블렌드 스키닝(LBS)과 보정(correctives)을 적용해 최종 메시를 만듭니다. 입력 자세 파라미터(축-각 또는 회전 행렬)로 순방향 운동학(Forward Kinematics)을 계산해 전역 관절 변환을 구한 뒤, 스키닝 가중치로 정점을 변형합니다.

여기서 SOMA의 실용적인 강점 하나가 드러납니다. 표준 LBS는 팔꿈치, 어깨, 무릎처럼 큰 회전이 일어나는 관절에서 잘 알려진 아티팩트(artifact)를 만듭니다. MHR처럼 자체 보정을 제공하는 모델도 있지만, Anny나 GarmentMeasurements는 그렇지 못합니다. SOMA는 앞선 추상화 레이어들이 만들어 둔 공유 표준 토폴로지 위에서 동작하는 단일 통합 보정 모델 을 제공합니다. 이 하나의 모델이 모든 백엔드에 적용된다는 점이 핵심입니다.

보정값은 경량 MLP 네트워크가 예측하며, 스키닝 전에 정지 자세에 더해집니다.

V_h^{\mathrm{corr}}(\beta, \theta) = V_h(\beta) + f_{\mathrm{MLP}}(\theta)

이 MLP는 관절 회전을 6D 표현으로 입력받아, MHR에서 영감을 받은 2단계 구조로 정점별 변위(displacement)를 예측합니다. 학습 데이터는 약 80{,}000 개의 MHR 자세 메시를 무게중심 보간과 자세 역변환을 통해 SOMA 토폴로지로 옮겨 증류한 것입니다. 이렇게 대규모 증류가 실용적으로 가능해진 것 자체가 SOMA의 통합 토폴로지와 자세 추상화가 만들어 낸 결과입니다.

자세 추상화: 자세가 적용된 메시에서 자세를 되찾기 (Pose Abstraction)

지금까지는 체형과 자세를 입력받아 메시를 만드는 순방향 경로였습니다. 그런데 실무에서는 그 반대, 즉 이미 자세가 적용된 메시로부터 SOMA 자세 파라미터를 복원 하는 연산이 똑같이 중요합니다. 연구팀은 이를 자세 추상화 라 부릅니다. 토폴로지 추상화가 여러 체형을 하나의 체형 표현으로, 골격 추상화가 골격을 통일했듯이, 자세 추상화는 여러 모델의 자세 데이터를 단일 SOMA 골격 규약으로 통일합니다. 이 덕분에 AMASS 나 SAM 3D Body 같은 대규모 모션 데이터셋을 별도 리타겟팅 없이 SOMA에서 곧바로 쓸 수 있게 됩니다.

핵심 난제는 자세 역변환(pose inversion) 입니다. 자세가 적용된 정점 위치에서 관절별 회전을 되찾는, 순방향 운동학과 LBS의 역연산이죠. SOMA는 이를 여러 단계로 풀어냅니다.

먼저 입력 메시가 SOMA 토폴로지가 아니면, 순방향과 동일한 무게중심 변환으로 SOMA 토폴로지에 먼저 사상합니다. 이후 앞서 본 Kabsch 기반 골격 피팅으로 각 관절의 초기 회전을 추정합니다. 이 초기화만으로도 이미 꽤 괜찮은 근사이며, 대략적인 자세만 필요할 때는 그 자체로 빠른 솔버가 됩니다. 그다음 부모에서 자식 순서로 관절 회전을 단계별로 정제(refine)하는 반복적 역-LBS(inverse-LBS)를 수행합니다.

Newton-Schulz 직교화로 어깨 튐(shoulder popping) 없애기

여기서 논문의 흥미로운 기술적 통찰이 등장합니다. 표준 Kabsch 알고리즘은 SVD로 최근접 회전 행렬을 구하는데, 쇄골(clavicle)처럼 관절에 기여하는 점 구름(point cloud)이 거의 한 평면에 놓이는(near-coplanar) 경우, 가장 작은 특이값 \sigma_3 가 0에 가까워지면서 대응하는 특이 벡터가 불안정해집니다. 그 결과 프레임 사이의 미세한 입력 변화가 특이 벡터의 부호를 뒤집어, 180^\circ 의 불연속적인 회전 점프, 이른바 "어깨 튐(shoulder popping)" 을 일으킵니다.

이를 피하기 위해 연구팀은 SVD 대신 Newton-Schulz 직교화(orthogonalization) 를 사용합니다. 이는 고정점 반복(fixed-point iteration)으로 행렬 H 의 극분해 인자(polar factor)를 계산합니다.

R_{i+1} = \tfrac{1}{2} R_i (3I - R_i^T R_i), \quad R_0 = H / \|H\|_{\infty}

이 반복은 특이 벡터를 분해했다 재조립하는 것이 아니라 현재 추정값에서 회전을 연속적으로 정제하기 때문에, 근사-특이(near-degenerate) 공분산 행렬에서 발생하는 부호 뒤집힘 불연속성에 애초에 면역입니다. 실제로 어깨 영역의 프레임 간 오차 진동은 SVD의 1.6 mm/frame에서 0.8 mm/frame으로, 시간적 안정성이 2\times 개선되었습니다.

마지막으로, 더 높은 정확도가 필요한 응용을 위해 선택적 오토그래드(autograd) 정제 단계도 제공합니다. 관절 회전을 연속 6D 벡터로 두고 전체 순방향 운동학과 LBS 계산을 역전파하며 Adam으로 최적화합니다. 다만 이 단계는 반드시 해석적 결과로 웜스타트(warm-start) 해야 합니다. FK와 LBS 목적함수는 매우 비볼록(non-convex)해서, 바인드 포즈에서 순진하게 최적화를 시작하면 팔다리 위치가 완전히 틀린 지역 최소값(local minimum)에 빠져버립니다. 해석적 솔버 단독으로는 NVIDIA RTX 5000 Ada GPU에서 약 1{,}200 FPS를 달성하고, 오토그래드 경로는 100 스텝 기준 16 ~ 18 FPS로 동작하여, 속도와 정확도 사이에서 필요에 맞는 지점을 고를 수 있습니다.

실험 결과

연구팀은 SOMA를 토폴로지 추상화 충실도, 자세 역변환 정확도, 런타임 성능, 모델 간 형상 공간 비교의 네 가지 축으로 평가했습니다.

토폴로지 추상화 충실도

토폴로지 변환은 파이프라인의 첫 단계이므로, 여기서 생긴 오차는 이후 모든 작업으로 전파됩니다. 각 백엔드에 대해 100 개의 다양한 체형에서, SOMA 정점과 원본 메시 표면 사이의 최근접점 L_2 거리를 측정했습니다.

백엔드 원본 정점 수 평균 (mm) P95 (mm)
SMPL 6{,}890 0.12 0.71
SMPL-X 10{,}475 0.06 0.45
Anny 13{,}718 0.01 0.01
MHR \sim 18{,}000 0.40 1.49

SMPL과 SMPL-X는 밀리미터 이하의 평균 오차(0.12 mm, 0.06 mm)를 달성했고, Anny는 특히 깔끔한 등록(registration) 덕분에 거의 0에 가까운 0.01 mm를 기록했습니다. MHR은 더 조밀하고 복잡한 지오메트리 탓에 평균 0.40 mm로 조금 높지만 여전히 1 mm를 크게 밑돌며, 모든 P95 오차가 1.5 mm 아래에 머뭅니다. 무게중심 보간이 일회성 메시 등록 이상의 왜곡을 사실상 더하지 않는다는 뜻입니다.

자세 역변환 정확도

자세가 적용된 메시는 서로 다른 인체 모델을 잇는 공통 인터페이스이므로, 메시에서 관절 각도로의 역변환이 자세 추상화의 핵심 연산입니다. 전체 AMASS 데이터셋(344 명, 2{,}265 개 모션, 40.3 시간, 19.8 M 프레임)에서 원본 SMPL-X 메시와 복원된 회전으로 만든 SOMA 재구성 사이의 정점별 L_2 오차를 측정했습니다.

방법 평균 (mm) 중앙값 (mm) FPS
골격 전이만 16.5 13.9 17{,}393
해석적(Analytical) 5.3 3.2 882
오토그래드 FK (초기화 없음) 501.8 479.4 79
오토그래드 FK (초기화 있음) 4.1 2.1 78

결과가 초기화의 중요성을 극적으로 보여줍니다. 골격 전이 초기화만으로도 17{,}393 FPS라는 압도적 속도로 16.5 mm의 대략적 자세를 얻고, Newton-Schulz 기반 해석적 솔버가 이를 5.3 mm까지 정제합니다. 오토그래드 FK 솔버는 4.1 mm로 가장 정확하지만, 오직 골격 전이 결과로 웜스타트했을 때만 그렇습니다. 초기화 없이 바인드 포즈에서 시작하면 100 번의 Adam 반복으로도 수렴에 실패해 501.8 mm라는 완전히 잘못된 결과에 머뭅니다.

두 솔버는 상호 보완적입니다. 해석적 경로는 빠르고 전체 정점에 걸쳐 거의 최적의 L_2 오차를 냅니다. 반면 오토그래드 경로는 손, 발, 머리 같은 말단(extremity)에 정점별 손실 가중치를 줄 수 있어, 솔버가 어디에 집중할지를 명시적으로 제어합니다. SAM 3D Body 200 프레임(MHR 백엔드)에서 부위별 오차를 보면, 오토그래드 정제가 손 오차를 57\% (4.7 \to 2.0 mm), 발 오차를 29\% (8.2 \to 5.8 mm), 머리 오차를 30\% (6.9 \to 4.8 mm) 줄였습니다. 대신 정점이 많아 오차를 흡수할 여유가 있는 몸통으로 오차를 재분배하는 방식입니다.

런타임 성능

SOMA는 대규모 파운데이션 모델 학습 루프에 직접 들어가기 때문에, 순전파가 고도로 최적화되어야 합니다. NVIDIA A100 80GB GPU(Warp 경로)와 32코어 AMD EPYC 7763 CPU(PyTorch 경로)에서 측정한 결과, 골격 피팅 단계(RBF 회귀와 Kabsch)는 배치 크기와 무관하게 GPU에서 1.5 ms 미만으로 처리됩니다. Warp GPU 경로는 배치 크기 128 에서 초당 7{,}000 개가 넘는 메시를 생성했습니다. SMPL이나 MHR 백엔드로 토폴로지 추상화 단계를 추가해도 GPU에서 약 0.3 ~ 0.8 ms의 지연만 더해지며, 이는 전체 파이프라인 비용에 비하면 무시할 수준입니다.

모델 간 형상 공간 비교

SOMA의 추상화 레이어가 주는 또 다른 이점은 원칙에 입각한 모델 간 비교 입니다. 각 모델이 고유한 토폴로지와 기준 자세, 변형 파라미터를 정의하기 때문에, 보통은 이런 비교 자체가 불가능합니다. 연구팀은 어떤 모델의 PCA 학습 데이터와도 겹치지 않는 독립 촬영 파이프라인의 33 개 홀드아웃(held-out) 스캔에 대해, 네 가지 PCA 형상 모델을 동일한 SOMA 파이프라인으로 평가했습니다.

모델 성분 수 K 평균 (mm) P95 (mm)
SMPL 10 14.11 30.49
GarmentMeasurements 15 11.81 24.18
SOMA-Shape (제안) 128 5.82 13.60
SMPL-X 300 5.45 12.97

SMPL의 10 개 성분은 대략적인 체형 비율만 잡아내 14 mm의 평균 잔차를 남깁니다. 주목할 점은 SOMA-Shape가 128 개 성분으로 5.82 mm를 달성해, 300 개 성분을 쓰는 SMPL-X의 5.45 mm에 근접했다는 것입니다. 절반도 안 되는 파라미터로 비슷한 표현력을 보인 셈입니다. 위 그림에서 파란색(낮은 오차)이 몸 전체를 덮는 SOMA-Shape와 SMPL-X에 비해, SMPL과 GarmentMeasurements는 붉은 잔차가 넓게 퍼져 있는 것을 확인할 수 있습니다.

위 그림은 동일한 골격 자세로 여러 백엔드의 다양한 체형을 구동한 모습입니다. 서로 완전히 다른 생성 모델에서 나온 체형들이 같은 자세 해석을 공유하는, 체형-자세 분리의 플러그 앤 플레이(plug-and-play) 특성을 잘 보여줍니다.

SOMA 설치 및 사용 방법

SOMA-X는 Apache-2.0 라이선스로 공개되어 있으며, PyPI에서 py-soma-x 패키지로 손쉽게 설치할 수 있습니다. 자산(asset)은 첫 사용 시 Hugging Face에서 자동으로 내려받아 캐시됩니다.

pip install py-soma-x

# 선택적 백엔드 지원
pip install "py-soma-x[smpl]"   # SMPL / SMPL-X 지원
pip install "py-soma-x[anny]"   # Anny 지원

기본 사용법은 SOMALayer 를 초기화하고 자세와 체형 파라미터를 넘기는 것으로 충분합니다.

import torch
from soma import SOMALayer

# 레이어 초기화 (자산은 Hugging Face에서 자동 다운로드)
soma = SOMALayer(
    identity_model_type="mhr",  # "soma", "smpl", "smplx", "anny", "garment" 도 가능
    device="cuda"
)

# 순전파
# poses: (B, num_joints, 3)
# identity: (B, num_coeffs)
output = soma(poses, identity, scale_params=scale_params)
vertices = output["vertices"]

기본 체형 모델은 MHR이며, identity_model_type 인자만 바꾸면 다른 백엔드로 즉시 전환됩니다. SMPL / SMPL-X 모델 파일은 별도 라이선스가 적용되므로 공식 사이트에서 직접 내려받아 경로를 지정해야 합니다. 더 자세한 개발자 설치와 데모 실행 방법은 공식 문서 를 참고하시기 바랍니다.

한계점 및 향후 전망

논문은 SOMA의 한계도 솔직하게 밝힙니다. 첫째, 토폴로지 변환 품질은 원본 모델의 표준 메시 품질과 SOMA wrap 등록의 품질에 의존합니다. 등록이 부실하거나 정점 밀도가 극단적으로 비대칭인 모델은 변환 정확도가 떨어질 수 있습니다. 둘째, 자세 의존 보정을 적용해도 표준 LBS는 팔꿈치를 심하게 굽히거나 어깨를 90^\circ 이상 벌리는 등 극단적 비강체(non-rigid) 변형에서는 여전히 아티팩트를 남깁니다. 학습된 보정은 이를 완화할 뿐 완전히 없애지는 못합니다.

셋째, 새 백엔드를 추가하려면 새로운 신원 모델 클래스 구현과 일회성 SOMA 메시 등록이 필요합니다. 크지는 않지만 사소하지도 않은 엔지니어링 작업입니다. 넷째, SOMA의 자세 추상화는 범용 리타겟터가 아닙니다. 메시 정점 대응을 통해 자세를 복원하므로, 호환되는 인체 지오메트리를 공유하는 모델에만 적용됩니다. 로봇이나 비인간형 캐릭터처럼 근본적으로 다른 지오메트리나 리깅 구조를 가진 대상은 별도의 전문 리타겟팅 솔루션이 필요합니다.

이러한 한계에도 불구하고, SOMA는 인체 모델 생태계의 파편화라는 오래된 문제에 실용적인 해법을 제시합니다. O(M^2) 의 어댑터 지옥을 O(M) 의 커넥터로 바꾸고, 그 전체를 미분 가능하게 만들어 학습 파이프라인에 그대로 녹여낼 수 있게 한 점은, 앞으로 인체 재구성, 모션 생성, 휴머노이드 제어 같은 응용들이 특정 모델에 묶이지 않고 서로의 강점을 자유롭게 조합하는 시대를 여는 중요한 이정표가 될 것입니다.

:scroll: SOMA: Unifying Parametric Human Body Models 논문

:house: SOMA 프로젝트 페이지 (NVIDIA DAIR)

:books: SOMA-X 공식 문서

https://nvlabs.github.io/SOMA-X/stable/

:github: SOMA-X GitHub 저장소

:github: SOMA Retargeter GitHub 저장소

:hugs: BONES-SEED 모션 데이터셋 (Hugging Face)




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! 텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. :smiley:

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: