메뉴 바로가기 본문 바로가기

Single View 3D Human Reconstruction(SMPL / SMPLify)

  • 황현상
  • 2023.03.01

[들어가며] 


2009년에 개봉한 아바타는 물론이고, 그 이후에 나온 마블 시리즈나 혹성탈출 등의 영화를 보면 실제로 존재하지 않는 캐릭터들이 굉장히 사실적이고, 자연스럽게 행동하는 것을 볼 수 있습니다. 굉장한 기술이지만, 사실 원리는 잘 알려져 있듯이 그리 어렵지는 않습니다. 사실감 있는 영화 제작을 위해 몸에 마커를 부착한 실제 사람이 해당 캐릭터의 행동을 연기하고, 여러 대의 카메라를 이용해 3D 정보를 얻어 그 위에 캐릭터의 형태만 덧씌우는 간단한 원리입니다.


 


 

출처: [1]


어떤 사람의 3D 정보를 얻는 기술은 영화 촬영을 제외하더라도 굉장히 다양한 분야에 적용될 수 있는 기술입니다. 그러나 지금도 굉장히 사실적인 영화 캐릭터를 만들어 낼 수 있을 정도로 발전된 기술이니 '곧 일상생활에 적용될 가능성이 있지 않을까요?' 라고 물어본다면 당장은 어려울 듯 합니다. 여러 이유가 있겠지만 3D 데이터를 얻기 위한 수단이 일상생활에는 없다는 것이 상당한 제약입니다.


영화 촬영이야 제작비가 좀 들더라도 특수한 장비들이 설치된 환경에서 촬영해 사용할 수 있지만 일상 생활에서 이런 장비를 접하기란 쉽지 않습니다. 흔히 접할 수 있거나 저렴한 장비를 기반으로 3D 정보를 얻을 수 있어야 하는데, 오늘은 보다 쉽고 편하게 3D 정보를 얻기 위해 어떤 아이디어를 기반으로 어떤 연구들이 수행되어 왔는지 알아보고자 합니다.

<Single-view 3D reconstruction>

 

카메라는 가장 흔히 접할 수 있는 촬영 장비 중 하나입니다. 3D Reconstruction 분야에서, RGB 카메라로 촬영된 한 장의 사진을 기반으로 3D 정보를 복원하는 기술을 Single-view 3D Reconstruction 이라고 부릅니다. 이에 대해 이해하기 위해 먼저 아래 그림을 살펴보도록 하겠습니다.

 


 

출처: [2]


3D 공간에 존재하는 어떤 사람은 그림과 같이 보는 방향에 따라 여러 view로 표현될 수 있습니다. 공간에 있는 사람을 촬영한다는 것은, 다양한 view 중 하나를 선택하여 3차원 공간의 정보를 2차원으로 projection 하는 것을 의미합니다. 선택된 single view image에서 이 사람의 등 뒤나 오른쪽 다리가 어떻게 생겼는지 확실하게 확인할 수 없는 것처럼, 고차원에서 저차원으로 mapping되는 과정에서 수많은 정보가 소실될 수밖에 없습니다. single view 3D reconstruction은 이렇게 많은 정보가 소실된 2D 이미지를 토대로 해당 이미지의 원래 3D 정보를 복원해내는 기술입니다. 이미 소실되어 버린 정보를 다시 알 방법이 없기 때문에 정답이 하나로 정의되지 않는 ill-posed problem입니다. 이론적으로 하나의 정답을 찾을 수가 없다는 의미입니다.


그렇다면 이 문제를 사람이 풀면 어떻게 될까요?

저 같은 경우에는 사진을 보고 아래와 같이 생각해 보았습니다. 그 결과 상상한 3D 형태의 결과가 위 사진의 오른쪽 결과와 크게 다르지 않았습니다.


“등 뒤가 보이지는 않지만 뜬금없이 꼬리나 날개가 달려있진 않을 것이다”

“오른쪽 옆구리만 살이 쪄서 그쪽만 갑자기 불룩하거나 하지는 않을 것이다”

“오른쪽 팔꿈치가 정확히 보이지는 않지만 어차피 왼팔이랑 길이가 비슷할 테니, 원근감을 고려하면 대충 어디쯤 팔꿈치가 있을지는 알겠다”

“오른쪽 다리도 잘 안보이지만, 관절이 반대로 꺾여있진 않을 것이니 저 자세로 중심을 잡고 서 있으려면 다리를 뒤로 쭉 뻗고 있거나 하진 않을 것 같다”


미미한 차이는 있겠지만, 아마 대부분의 사람들도 이와 비슷한 생각을 하고 비슷한 결과를 상상했을 것입니다. 우리는 경험적으로 ‘정상적인 상태라면 이럴 것이다’라는 정보를 가지고 있고, 이를 통해 비현실적인 정답은 최대한 배제하고 가장 가능성이 높은 결과를 상상하기 때문입니다.

사진에서 저 사람의 관절 위치를 대충 찍어보면, 아래 오른쪽 그림처럼 관절의 비율이나 각도가 기괴한 경우도 똑같은 사진이 나올 수는 있을 겁니다. 하지만 우리는 정상 범위에 대한 경험적 지식을 가지고 있으므로, 이는 정상이 아니라는 것을 알고 왼쪽과 같이 정상적인 범주의 형태를 상상하게 되는 것입니다.

 


 

출처: [2]


Single view 3D reconstruction 분야의 핵심 아이디어도 이와 동일합니다. 이론적으로 하나의 정답을 찾을 수는 없지만, 정상적이고 상식적인 범위 내에 정답이 존재할 수 있도록 제약을 추가하다 보면 가장 그럴 듯 한 결과를 복원할 수 있다는 것이 포인트입니다. 이러한 지식을 prior라 부르고, 이 분야의 다양한 연구들이 그럴 듯한 복원을 위해 prior를 적절히 활용할 방법을 고민해 왔습니다.

오늘 살펴볼 SMPLify[3] 논문은 이 복원 문제를 SMPL[4]의 사용과 prior를 추가하는 방법으로 해결하고 있습니다.




<SMPL (Skinned Multi-Person Linear model)>


SMPL은 몇개의 파라미터를 조절하는 것으로 다양한 포즈, 체형의 인체 표면을 6890개의 정점(vertex)을 갖는 mesh 형태로 표현하는 모델입니다. 어떤 파라미터, 어떤 방법을 사용해서 인체의 표면을 모델링 하는지 간단히 알아보도록 하겠습니다.

 

<Pose> 


인체의 표면 정보에 영향을 줄 수 있는 첫 번째 요인은 pose입니다. pose란, 관절의 길이 등을 고려하지 않고 각 관절들이 얼마나 회전되어 있는지를 의미하는 정보입니다. 모든 관절의 회전 정보를 알면 그 인체가 어떤 자세를 취하고 있는지 정확하게 정의할 수 있게 됩니다.

 

출처: 좌: [5], 우: [4]


인체의 각 관절은 위 그림과 같이 tree 형태로 정의됩니다. 이를 kinematic tree라 하는데 SMPL은 오른쪽 그림과 같이 root node(pelvis)를 포함하는 24개의 point로 pose를 정의합니다. 즉, 각 24개의 포인트에 대한 x, y, z 방향으로의 회전 정도(θ)이므로 총 72개의 파라미터를 이용하면 인체의 모든 pose를 정의할 수 있습니다.


<Shape>


인체의 표면 정보에 영향을 줄 수 있는 두 번째 요인은 체형(shape)입니다. 이번에는 인체의 shape을 어떻게 parameter로 정의할 수 있는지 살펴보겠습니다.


 

 

출처: [6]


위 3개의 인체 모형은 모든 관절의 각도가 정확히 일치하므로, 동일한 pose이지만 체형이 전혀 달라 3D 공간상의 표면 정보 또한 매우 다릅니다. 이를 제대로 표현하기 위해서는 6890개의 vertex를 조금씩 수정해야 하므로, 총 20,670개의 파라미터(6890개의 정점 * 3차원 좌표)가 사용됩니다. 거의 비슷비슷한 인체의 체형을 표현하기 위해 20,670 차원의 데이터를 다뤄야 하는 상황이 발생합니다. SMPL은 통계적인 방법을 이용해 비효율적인 표현 방식을 개선합니다.


SMPL의 접근 방법을 쉽게 이해하기 위해 간단한 예시를 먼저 들어 보겠습니다.


다음과 같은 질문을 받았다고 생각해 보겠습니다.

“한번도 본 적 없는 사람의 왼팔, 오른팔 길이를 추측해보세요. 양팔 길이를 더하면 90cm이고, 대답이 맞았는지는 알 수 없지만 대답해보세요.”


질문을 보면… 당연히 애매하다고 느끼셨을 것입니다. 유일한 단서는 양팔 길이의 합이 90cm이라는 건데, 소수점 제외하고 정수로만 생각해도 가능한 조합이 수십 개나 되므로, 풀어낼 방법이 없습니다. 맞았는지 알려주기라도 한다면 가능한 조합들을 맞을 때까지 순서대로 대답해 보겠지만, 대답이 맞았는지 확인도 안 해준다고 합니다.


여러모로 말도 안 되는 문제이지만, 굳이 풀어야 한다고 하니 어쩔 수 없이 나름대로 풀 방법을 고민해 보도록 하겠습니다. 이때 아래와 같은 방법을 생각해 볼 수 있을 것입니다.


먼저, 다양한 체형 정보를 포함할 수 있도록 수많은 사람들의 양팔 길이를 수집한다. 대략 2천 명 정도 수집했다고 가정했을 때, 대충 아래의 왼쪽 그림과 같은 데이터 분포를 보일 것입니다.

 


 

 

여기에 주성분 분석(Principal Component Analysis, PCA)을 사용해 가운데 그림과 같이 주성분 단위벡터를 하나 구해 보겠습니다. 이 단위벡터에 임의의 계수를 곱해주면 2차원 평면에서 하나의 point를 가리키게 될 것입니다. 이 단위벡터는 데이터의 분포를 가장 잘 표현하는 벡터이기 때문에 계수를 조절하여 얻을 수 있는 point 들은 데이터의 분포에서 크게 벗어나지 않습니다. 오른쪽 그림을 보면, 계수를 조절해 얻은 점(빨간색)들과 임의의 숫자를 랜덤하게 찍은 점(초록색)들의 분포 차이가 쉽게 눈에 들어올 것입니다.


여기서, 우리는 양팔 길이의 합이 90cm라는 단서를 알고 있으므로, 합이 90cm가 되도록 이 단위벡터의 계수를 조절해보면, 대충 왼팔 45cm, 오른팔 45cm 정도로 추정할 수 있습니다. 여전히 풀 수 없는 문제이긴 하지만 “왼팔 10cm, 오른팔 80cm”라는 대답 보다 훨씬 합리적인 대답이고, 실제로도 정답에 근접한 대답일 것입니다. 이 추론 방식은 다음과 같이 두 가지 장점을 갖는다.

 

① 수집된 데이터의 분포를 벗어나지 못하기 때문에 오차가 조금 있을 수 있지만 터무니없는 대답은 나오지 않는다.

② 왼팔, 오른팔 길이를 표현하기 위해 두 개의 숫자(2차원 데이터)를 써야 했던 것과 달리, 벡터의 계수 하나(1차원 데이터)만으로 양팔의 길이를 표현할 수 있다.


SMPL의 방법도 이와 동일합니다. 양팔의 길이를 미리 수집했던 것처럼, 동일한 pose를 취하고 있는 다양한 인체 데이터를 수집합니다. 그리고 동일하게 PCA를 수집하여 몇 개의 단위벡터를 구한다(SMPL은 10개를 사용합니다). 그리고 이 벡터들에 임의의 계수(β)를 곱해 20,670 차원의 어떤 point를 추정합니다. 20,670개의 숫자를 하나씩 조작해야 했던 것과 달리, 10개의 숫자를 조절하는 것 만으로 임의의 인체 데이터를 추정할 수 있는 것입니다. 그리고 이렇게 생성된 인체 데이터는 앞선 예제처럼, 한쪽 팔이 기괴하게 길거나 날개가 달려있는 등 통계적으로 정상 분포를 벗어나지 않을 수 있을 뿐만 아니라 체형에 따른 인체의 변화 분포를 매우 잘 나타낼 것입니다.

 

아래 그림은 SMPL에서 실제로 주성분 (principal component, PC)에 대한 계수 β를 조절했을 때 생성되는 mesh의 변화를 보여 줍니다.


 

출처: [4]



<Linear blend skinning (LBS)>

10개의 β로 정의된 인체는 여태 본 것과 같이, 동일한 pose를 취하고 있는 mesh이고, 72개의 θ는 mesh 정보가 없이 관절의 회전 정보만을 포함하고 있습니다. 따라서 우리가 원하는 인체의 mesh를 얻기 위해 아래 그림과 같이 두 정보를 통합해야 합니다.


 

출처: [4]


방법은 간단하다. β를 이용해 체형이 반영된 중립 pose의 mesh를 구하고, mesh의 각 vertex를 pose 정보를 기반으로 이동시키면 됩니다. 이를 위해 각 vertex가 어떤 관절 포인트에 얼마나 영향을 받는지에 대한 가중치를 미리 정의하고(아래 그림), 선형 결합을 통해 위치를 수정하는데, 이를 LBS라 부릅니다.

 

출처: [4]


실제 SMPL 모델에 사용되는 방법은 더 많은 요소를 추가로 고려하므로, 더 자세한 내용을 알고 싶으면 논문을 읽어 보는 것을 추천 드립니다.


<Joint regression>


다음은 이렇게 구해진 3D 인체 정보의 관절 좌표를 계산하는 방법입니다. 간혹, pose 정보를 관절의 좌표 정보로 헷갈려 하는 사람들이 있는데, θ는 관절의 회전 파라미터이므로 관절의 3D 위치에 대한 정보를 포함하지 않습니다. 관절들 간의 거리는 β에 의해 결정되기 때문에, 정확한 3D 관절 좌표를 구하기 위해 두 정보가 모두 포함되어있는 mesh를 활용합니다.

 

출처: [4]

이 방법 또한 그리 어렵지 않습니다. 특정 위치의 관절 좌표는 그 근처에 있는 vertex들의 위치의 가중합으로 구합니다. 가중치는 역시나 미리 정의되어 있습니다.

논문에서는 가중치를 왼쪽 그림처럼 초기화 해 두고, 최적화를 진행하여 오른쪽과 같은 최종 가중치를 얻었다고 합니다. joint의 좌표를 구하는 것 뿐만 아니라 이전의 모든 과정이 모두 가중 합(선형 결합)으로 구성되어 있기 때문에 파라미터로부터 joint를 구하는 모든 과정에 대해 미분이 가능합니다.



<SMPLify>


ECCV 2016에서 발표된 “Keep It SMPL: Automatic Estimation of 3D Human Pose and Shape from a Single Image”는 SMPL 모델을 이용해 3D human의 pose와 shape을 동시에 복원한 최초의 논문입니다. 다소 오래된 방법이라 명확한 한계를 가지고 있고 성능도 오락가락 하지만, 현재까지도 이 논문의 아이디어를 기반으로 발전된 관련 기술들이 많기 때문에 이 분야를 공부하려 한다면 한 번쯤 살펴 볼 만한 것 같습니다.


<복원 방법>


복원을 위해 SMPLify가 수행하는 절차는 다음과 같다.


 

 

 

이미지로부터 사람의 2D pose를 estimation(그림에서 초록색 점) 합니다. 논문에서는 DeepCut을 사용했다고 하지만, 현 시점에서 훨씬 성능이 좋은 검출기를 사용해도 됩니다.
임의로 초기화 되어 있는 파라미터(θ, β)를 이용해 joint의 3D 좌표를 계산하고, 2차원 평면에 projection(그림에서 빨간색 점) 합니다.

θ, β로 부터 추정된 빨간색 점과, 초록색 점의 위치가 가까워지도록 학습합니다. 이 때, 2D pose estimator로 추정된 초록색 점은 ground truth로서의 역할이고 빨간 점의 위치가 수정됩니다. SMPL 내부에 정의된 파라미터들 또한 모두 고정값이므로 결론적으로 θ, β만 update 됩니다. 즉, 초록색 점에 빨간 점이 가까워질 수 있도록 파라미터 θ, β를 수정해 나가는 것입니다. SMPL의 모든 계산 과정이 미분 가능했기 때문에 이와 같은 학습이 가능합니다. 

 

 

 


출처: [3]


반복적으로 학습을 진행하면, 파라미터들은 아래 그림과 같이 2D 이미지에 적합한 형태로 최적화 됩니다.


 

출처: [3]


이 최적화 과정에서 앞서 설명한 장점들이 빛을 발합니다.

PCA를 사용하기 때문에 관절의 좌표만 정확히 맞추기 위해 양쪽 팔 길이가 기괴하게 달라지거나, 아예 사람의 형태를 유지하지 못하는 경우를 방지할 수 있습니다. 또, 관절의 위치를 결정하는데 β 또한 관여하기 때문에 단순히 관절 위치만을 최적화 했음에도 모든 파라미터를 적절히 최적화 할 수 있습니다.

 

SMPLify를 이용해 3D reconstruction을 수행한 결과는 다음과 같습니다.


 

출처: [3]


거리에 대한 loss는 아래와 같이 정의될 수 있습니다.

 

 

 

notation을 살펴보면 다음과 같습니다.


i: 관절 번호

β: shape parameters

J: 관절 좌표

R: θ를 기반으로 관절 회전

Π: 미리 정의된 카메라 파라미터 K를 기반으로 2차원으로 projection

ρ: Geman-McClure penalty function

w: 관절의 가중치



β를 통해 구한 joint를 θ를 이용해 회전시킨 후 2차원으로 projection하고 이미지에서 추정해둔 관절 좌표와의 차이를 구합니다. 이때, 노이즈에 의해 너무 큰 loss가 발생하면 부정적인 영향이 있을 수 있으므로 loss가 일정 수준 이상으로 커지지 않도록 Geman-McClure를 적용하고, 눈에 보이지 않거나 하는 관절에 대한 가중치 조절을 위해 가중치 파라미터를 추가하도록 합니다.


 

출처: [3]


하지만, 이 loss만으로는 해결되지 못한 문제가 아직 존재합니다. 그림을 잘 살펴보면 원했던 결과와는 전혀 다르지만, 같은 각도에서 바라봤을 때 관절 위치는 똑같을 것이란 사실을 예측할 수 있습니다.


PCA를 이용해 체형 부분에 대해 정상 범주를 벗어나지 못하도록 제약이 가해진 것은 좋지만, 후에 처리되는 θ는 이러한 제약이 없습니다. 이는 θ가 최적화 되는 과정에서 정상 범주를 벗어나도 막을 방법이 없다는 것을 의미합니다. 이는 관절 포인트만 잘 일치한다면, 사람의 형체를 유지하는 선에서 관절이 기괴하게 뒤틀리거나 팔이 몸을 뚫고 나오는 등 잘못된 결과를 야기할 수 있습니다.


<Prior>


SMPLify는 이 문제를 해결하기 위해 몇 가지 prior를 사용하는데, 간단하게 의미만 살펴보고 자세한 설명은 생략하고자 합니다.

 

첫 번째는, 올바르지 않은 방향으로 관절이 꺾이는 경우 매우 강한 패널티를 부여하는 loss의 추가하는 것입니다.

 

 

 

두 번째는, CMU dataset으로 미리 학습되어있는 Gaussian mixture model(GMM)을 사용하여 각 관절들의 θ가 일반적인 범주에 가까워질 수 있도록 제약을 가하는 loss의 추가하는 것입니다.

 

 



세 번째는, 3D에서 겹치는 영역에 대해 모델링하기 위해 mesh에 최대한 근사된 캡슐 형태를 추정하고 캡슐의 겹친 정도에 대해 패널티를 부여하는 loss의 추가하는 것입니다. mesh를 그대로 쓰지 않고 캡슐의 형태를 사용하는 이유는 계산도 복잡하고 수렴하지도 않기 때문이라고 합니다. loss로 사용하기 위해 전 과정은 미분 가능해야 하기 때문에 캡슐은 regressor를 별도로 학습해 사용하며, 실제 loss 계산은 캡슐 형태도 계산이 간단하지 않아 이를 또 구의 형태로 단순화 해 계산합니다.

출처: [3]


 

 

이 term의 경우 겹치는 것을 피하는 데에는 도움이 되지만 겹치는 것을 가장 잘 피할 수 있는 날씬한 사람으로 피팅할 위험이 있어 shape 말고 pose 학습에만 사용됩니다.



네번째는, SMPL의 training data에서 PCA를 통해 구한 squared singular values (Σ)를 이용해 β를 정규화하는 정규화항의 추가하는 것입니다.

 

 


최종적으로, 모든 loss 항들을 더해 최종 loss를 정의합니다. 이때, 패널티 항의 영향을 너무 많이 받아 좌표에 의한 손실을 무시하거나, 영향을 너무 적게 받아 문제가 발생하는 것을 막기 위해 각 패널티 항마다 가중치(λ)를 부여하고 적절한 학습이 가능하도록 조절합니다.

 


 


<한계>


SMPLify의 아이디어는 굉장히 좋은 결과를 보여주지만, 아직 해결하지 못한 명백한 한계가 존재합니다. 바로 “depth ambiguity” 입니다.


 

출처: [3]


그림을 자세히 살펴보면 이미지에서 우리가 상상한 3D 정보와는 전혀 다른 결과가 추정된 것을 확인할 수 있습니다. loss에 포함되는 제약 조건들에 해당되지 않은 것이 아닙니다. 2D로 projection 된 결과를 상상해 보면 관절의 위치는 정확하게 일치하고, 어디 하나 기괴하게 꺾이거나 겹친 부분이 있는 것도 아닙니다. 그럼에도 다른 결과가 존재하는 이유는 깊이 정보를 다룰 방법이 어디에도 없기 때문입니다.


첫 번째 사진은 사람의 오른쪽 신체가 왼쪽 신체보다 가까이 있고, 두 번째 사진은 사람의 왼쪽 다리가 오른쪽 다리보다 가까이 있기 때문에 이 추론이 틀렸다는 사실을 학습중 에 알려줄 방법이 없는 것입니다. 깊이 정보가 존재하지 않는 관절 point를 기반으로 학습하다 보니, 이러한 local minima가 존재하는 것입니다. 

 

References

[1] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kimmisung08&logNo=220165736334

[2] Li, Zhongguo, Magnus Oskarsson, and Anders Heyden. "Detailed 3D human body reconstruction from multi-view images combining voxel super-resolution and learned implicit representation." Applied Intelligence 52.6 (2022): 6739-6759.

[3] Bogo, Federica, et al. "Keep it SMPL: Automatic estimation of 3D human pose and shape from a single image." European conference on computer vision. Springer, Cham, 2016.

[4] Loper, Matthew, et al. "SMPL: A skinned multi-person linear model." ACM transactions on graphics (TOG) 34.6 (2015): 1-16.

[5] Liang, Shuang, Xiao Sun, and Yichen Wei. "Compositional human pose regression." Computer Vision and Image Understanding 176 (2018): 1-8.

[6] https://smpl.is.tue.mpg.de/


About Author

 

황 현 상

Pro, AI 3팀

hshwang@cubox.ai