ChatPose는 2024년 IEEE/CVF 컴퓨터 비전 및 패턴 인식 회의(CVPR 2024)에 게재된 연구로, 대형 언어 모델(LLM)을 활용하여 이미지나 텍스트 설명으로부터 3D 인간 자세를 이해하고 추론하는 프레임워크이다.
앉아있는 모습을 그려달라는 텍스트 말고, '피곤한 사람은 어떤 자세를 취할까?'라고 물었을 때 이에 대한 포즈를 생성해냄. 지금까지 이런 추론 기반의 생성 기법은 없었음.
기존의 방법
논문의 방법
이를 달성하기 위한 모델의 기능
1. 개인과 장면의 정보를 융합한 복잡하고 함축적인 질문에 대해 이해하는 능력.
2. 이미지 정보를 텍스트 쿼리와 결합하는 능력.
3. 위의 두 정보를 바탕으로 정밀한 SMPL 파라미터를 추론하는 능력.
| 파라미터 | 기호 | 차원 | 의미 | 비고 |
|---|---|---|---|---|
| Shape | β (beta) | 보통 10 또는 16 | 사람마다 다른 체형(키·몸무게·근육 등)을 PCA basis로 표현 | 전체 프레임 동안 고정 |
| Pose | θ (theta) | 24 × 3 = 72 | 각 관절의 상대적 회전을 축-각(axis-angle) 형식으로 표현 | 프레임마다 변함 |
| Global Trans. | t | 3 | 루트(엉덩이) 관절의 전역 위치 | 카메라·월드 좌표계 기준 |
body_pose (23관절) + global_orient (루트)처럼 두 부분으로 나누어 저장하기도 함.단일 이미지에서 3D 모델을 만드는 연구에 대해 설명한다.
관절에 대한 회전 각도가 파라미터로 주어졌을 때 이를 기반으로 3D 모델을 생성.
그러나 이 두 방법 모두 자연어 처리 모델과 결합된 적은 없었다.
Stable Diffusion과 DALLE2 등은 텍스트 프롬프트를 기반으로 이미지를 생성하지만, 이것은 3D 모델이 아니다.
이전 연구인 PoseScript는 텍스트 프롬프트를 받아 SMPL의 파라미터를 추출한다. 그러나, 테스트 설명이 훈련 데이터의 단어 분포와 밀접할 때 효과적이고, 장면과 관련된 복잡한 텍스트 입력은 잘 이해하지 못한다. 이는 human pose와 scene을 연관시키는 장면이 없기 때문이다.
그러나 우리의 논문은 이를 LLM 기반으로 훈련시켰기 때문에 동일한 데이터셋으로 모델을 학습했음에도 불구하고 더 복잡한 텍스트 질문을 이해할 수 있다.
프롬프트 엔지니어링 (인스트럭션 튜닝)
LLM에게 특정 태스크를 수행하도록 하는 명령 프롬프트를 설계하는 것.
멀티 모달 LLM은 이미지, 텍스트 등의 이해 및 생성을 하는 각각의 API가 있으며, 인풋 데이터의 종류에 따라 이들을 호출하여 태스크를 수행한다.
그러나 이는 결과적으로 각 모듈들을 따로 작동시켜 결과를 합치는 방법이라, LLM이 멀티모달 데이터 끼리의 관계를 이해하기 어렵다.
모달리티에 대한 정보를 LLM의 언어 임베딩 공간에 매핑
비전 인코더를 통해 이미지를 토큰화하고, 이를 텍스트 토큰에 매핑.


input data: 텍스트 문자열 , 이미지
output data: , 이미지가 없을 경우
비전 인코더
이미지에 대한 정보를 토크나이징.
CLIP 모델의 인코더 사용.
비전 프로젝션 레이어
이미지 토큰을 LLM이 이해할 수 있도록 프로젝션.
CLIP 모델의 프로젝션 레이어 사용.
LLM 네트워크
LLaVA-1.5V-13B

사전학습된 모델 파라미터 는 고정한 채, 그 파라미터에 더해질 변화분(residual) 을 학습시킨다. (주로 트랜스포머의 선형 레이어에 탑재)
이 때 를 위와 같이 랭크()가 작은 두 매트릭스 , 의 곱으로 파라미터 분리한다.
여기서 이므로, 업데이트할 파라미터 수가
학습 후에는 를 원본 에 더해 사용하므로 모델 구조 수정 없이 효율적으로 업데이트 가능하다.
: ground truth 텍스트 출력
: ground truth SMPL 포즈 파라미터
첫째 항: (크로스 앤트로피 손실)
둘째 항: 파라미터간의
SMPL의 6D 회전 표현 방식:
SMPL 모델에서 인체의 자세는 각 관절의 회전 값들로 정의됩니다. 예를 들어, 팔꿈치나 무릎의 굽힘, 몸통의 비틀림 등이 각 관절의 회전으로 표현됩니다. 그리고 3D 공간 상에서 회전을 표현하는 방법에는 오일러 각, 쿼터니언, 회전 행렬 등이 있습니다.
오일러 각이나 축-각 같은 방식은 회전을 표현할 때 특정 각도에서 불연속적인 문제(Gimbal Lock 등)가 발생할 수 있어, 딥러닝 모델이 학습하기 어렵게 만들 수 있습니다.
회전 행렬은 불연속 문제는 없지만, 회전 행렬이 되기 위한 제약 조건(직교 행렬이면서 행렬식 값이 1인 조건)을 모델이 직접 학습하기 어렵다는 단점이 있습니다.
이전 연구에서 제안된 6D 회전 표현은 이러한 문제들을 완화하기 위한 대안입니다. 이 방식은 3D 회전을 6개의 값(사실상 3x3 회전 행렬의 첫 두 개의 열 벡터)으로 표현하며, 모델이 불연속 문제 없이 회전 값을 예측할 수 있도록 합니다. 예측된 6D 값은 간단한 절차를 거쳐 다시 유효한 회전 행렬로 변환될 수 있습니다.
이러한 성공적인 기존 연구들에서 6D 회전 표현 방식이 관절 회전 예측에 효과적임이 입증되었습니다. 6D 표현이 학습의 안정성과 성능에 기여한다고 여겨졌기 때문입니다.
ChatPose는 이러한 선행 연구들이 사용한 방식의 효과를 인지하고, 3D 인체 자세 예측의 표준적인 접근 방식 중 하나로 자리 잡은 6D 회전 표현을 채택한 것입니다. 이는 검증된 방법을 사용하여 모델의 자세 예측 성능을 확보하려는 목적입니다.
손실 계산을 위한 회전 행렬 변환:
ChatPose 네트워크는 SMPL 자세를 6D 회전 값으로 예측합니다.
하지만 예측의 정확성을 평가하고 모델을 업데이트하기 위한 손실 함수를 계산할 때는, 예측된 6D 회전 값을 손실 계산에 용이한 회전 행렬 형태로 변환한 후, 실제 회전 행렬 간의 오차를 계산하여 모델 학습에 활용합니다.

텍스트와 이미지를 포함한 입력에 대해 결과물 생성하도록 훈련.
ChatPose 모델이 멀티턴 대화(multi-turn conversations)를 자연스럽게 수행하기 위해, 즉 여러 차례의 질의응답을 이어나가는 대화 능력을 유지하기 위해 멀티모달 instruction-following 데이터셋을 사용하여 학습을 진행.
이 데이터셋은 LLaVA-V1.5-MIX665K라 불리며, GPT-4가 생성한 다양한 질문과 답변 쌍으로 구성되어 있음. 즉, GPT-4가 작성한 광범위한 질의응답 사례들이 포함된 데이터셋을 통해 모델을 훈련시킴으로써, 모델이 복잡하고 다양한 멀티모달 질의에 대해 이해하고 응답할 수 있도록 함.
이러한 학습 방식은 ChatPose가 이미지와 텍스트를 모두 입력받아도 대화를 자연스럽게 이어가면서, SMPL 포즈 생성 및 추정 뿐만 아니라, 사용자의 복잡한 지시에 따른 합리적인 응답도 가능하도록 만듦.
기존의 text-to-pose 데이터셋 대신 '피곤한 사람은 어떤 자세를 취할까?'라는 간접적인 질문을 사용.
데이터셋 생성: PoseScript 데이터셋의 자세 설명을 GPT4에게 문의하여 이와 연관된 활동에 대한 질문으로 간접적으로 묘사한 20K의 재구성 데이터셋. 이 중 870개를 평가에 사용.
Human Detector를 이용해 사람을 찾고, 이를 크롭하여 데이터 인풋으로 사용하던 기존의 방법과 달리, 전체 이미지를 넣고, '{검은 머리를 가진 남자}의 SMPL 포즈를 알려줘.'라고 인물을 특정하여 질문.
훈련 방법:
image-to-SMPL 포즈로 사전 훈련.
이후 3DPW 테스트 셋에서 여러 사람이 있는 50개의 이미지를 샘플링.
GPT4V로 사진 속 각 인물에 대한 묘사를 생성 후 인간이 재첨삭.
이렇게 총 50개의 질문과 답변 쌍을 생성하여 파인 튜닝.
PoseScript의 text-to-SMPL 을 동일하게 사용
Human3.6M, MPI-INF-3DHP, COCO,MPII dataset 사용
일반적인 텍스트 기반 포즈 생성 작업
추론 기반 포즈 생성(Speculative Pose Generation, SPG)
평가 지표
전통적인 3D 인체 포즈 추정 작업
추론 기반 포즈 추정(Reasoning-based Pose Estimation, RPE)
평가 지표