Introduction
사람이 존재하는 공간은 3차원으로 이루어져 있다. 그래서 2차원 이미지로 포즈를 추정하여 가상환경에 표출하거나 새로운 데이터로 변환하는데 한계가 존재한다. 이에 3차원 human pose estimation 알고리즘이 제안되었지만, 2차원 이미지 전체를 입력하여 3차원 포즈 좌표를 추정하는 것은 쉽지 않았다.
A simple yet effective baseline for 3d human pose estimationd의 저자는 이미지를 입력하여 3차원 포즈를 추정하는 것이 아닌 2차원 포즈 좌표를 입력하여 3차원 포즈를 추정하는 방법을 제안하였다. 기존의 뛰어난 2D 포즈 추정 알고리즘 결과를 바탕으로 3차원으로 변환하는 것을 학습시킴으로써 성능을 향상시키고, 3D Pose estimation의 system 오류 분석을 가능하도록 하여 3D 포즈 추정 알고리즘을 더욱 발전시킬 방향을 제시하였다.
기존의 연구에서 딥러닝을 이용하여 3D 포즈를 추정하는 방법을 두 가지로 구분하였는데 첫 번째는 이미지 전체를 입력하여 3D 포즈를 추정하는 방법이고, 두 번째는 사람의 포즈 데이터만을 통한 3D 포즈를 추정하는 방법이다. 이 논문에서는 두 번째 방법에 초점을 맞춰 이미지 전체를 보는 것이 아닌 3D 포즈 추정을 분리함으로써 접근하였다.
Solution methodology
제안한 방법은 2차원 입력이 주어지면 3차원 공간에서 신체 위치 좌표를 추정하는 것이다. 따라서 입력 x는 2차원 좌표, 출력 y는 3차원 좌표이며, N개 포즈의 데이터셋에 대한 loss를 최소화하는 함수 f*를 학습하는 것을 목표로 한다. 식은 아래와 같다.
$$ f*(x) = argmin L(f)$$
argmin은 최소화하는 인수(argument)를 찾는 연산입니다. 일반적으로 최소화하려는 목적함수가 있을 때, 그 함수를 최소로 만드는 입력 값을 찾는 것을 의미합니다.
이 때, N개의 포즈에 대한 손실 함수 L(f)는 다음과 같이 정의됩니다. 2차원 좌표인 x를 f에 입력하여 네트워크 결과값이 되고, 실제 3차원 ground truth인 y를 빼 loss를 구합니다. 이를 각 N번 수행하여 모두 더한 다음에 N으로 나누어 각 신체 관절의 에러 평균을 구하고 이 값이 최소가 되도록 학습합니다.
$$L(f) = (1/N) * Σ ||y_i - f(x_i)||^2 (i=1, 2, ..., N)$$
여기서,
- \(f\): 2차원 입력 좌표를 입력으로 받아 3차원 출력 좌표를 반환하는 함수
- \(x_i\): i번째 포즈의 2차원 관절 좌표
- \(y_i\): i번째 포즈의 실제 3차원 관절 좌표
- \(N\): 전체 포즈의 개수
- || · ||: 벡터의 놈 (norm)을 의미하며, \(||y_i - f(x_i)||^2\)는 실제 3차원 관절 좌표 y_i와 모델이 예측한 3차원 관절 좌표 f(x_i) 사이의 유클리디안 거리의 제곱입니다.
이렇게 정의된 손실 함수 L(f)를 최소화하는 함수 f*를 학습하는 것이 이 논문에서 제안하는 방법의 핵심입니다. 이를 통해 주어진 2차원 입력 좌표에 대해 3차원 공간에서의 신체 위치 좌표를 추정할 수 있습니다.
그림은 제안하는 알고리즘의 구성도로 배치 정규화, dropout 및 Relu 뿐만 아니라 residual connection이 있는 단순한 다층 신경망을 기반으로 합니다. Linear는 선형 회기 방식이며 각 가중치와 편향을 가지고 있습니다. Linear 연산과 배치 정규화, ReLU dropout을 하나의 선형 레이어로 간주하면 두 개의 선형 레이어 결과와 입력 값을 더함으로써 하나의 residual 블록을 형성한다. 이 residual 블록을 두 번 반복하고, 그림엔 표시되지 않았지만 입력 다음과 출력 직전에 선형 레이어를 한 번씩 더하여 총 6개의 선형 레이어가 존재합니다.
다음은 논문에서 언급한 네트워크를 구성하는 항목에 대한 특징입니다.
2D/3D Position : 최근 연구에서 이미지 전체나 2D 확률분포를 입력으로 사용하고 3D 모션 파라미터 카메라 파라미터 추정치 등을 출력으로 사용하는 것과 대조적으로 이 논문에서는 입력을 2차원 좌표, 출력을 3차원 좌표로 구성했습니다. 이렇게 2차원 정보를 처리하는 것은 차원이 낮아 전체 학습 시간이 줄어들고 네트워크 설계와 하이퍼 파라미터 학습을 위한 검색 속도가 상당히 빨라지게됩니다.
Linear-ReLU layer : 보통 딥러닝을 활용한 포즈 추정 알고리즘에서 컨볼루션 네트워크로 이미지 전체를 입력하여 필터를 학습하고 2차원 관절 위치를 히트맵으로 나타내는 게 보통이다. 하지만 이 논문에서는 저차원 좌표를 입력과 출력으로 다루기 때문에 간단하고 계산 비용이 덜 드는 선형 레이어를 적용하였다. ReLU는 심층 신경망에서 비선형성을 주기 위하여 추가하였다.
Residual connections : 최근 심층 컨볼루션 신경망의 학습을 용이하게 하는 기술로 제안된 Residual 블록을 적용함으로써 일반화 성능을 향상시키고, 학습 시간을 단축시켜 오류를 약 10% 줄일 수 있었다.
Batch normalization and dropout : 위의 세 가지 구성 요소를 이용한 간단한 네트워크는 Ground truth인 포즈 데이터를 통해 학습할 때 좋은 성능을 보였지만, 다른 2D detector의 출력값을 이용하여 학습할 때나 잡음이 있는 2D 이미지에 대해 테스트할 때는 성능이 좋지 않다는 것을 발견했다. 이에 배치 정규화와 dropout을 추가하여 학습 및 테스트 시간은 증가하였지만 언급한 두 가지 경우에서 시스템 성능이 향상되었다.
Max-norm constraint : 배치 정규화와 함께 각 층의 가중치 상한값을 1로 정규화하여 학습과 테스트 예제 간의 분포가 다를 때 학습이 안정화되고 일반화가 향상되었다.
Quantitative results
표2는 Human3.6M 데이터셋에 대한 상세 결과(후처리 과정에서 강체 정렬(rigid alignment) 없음)입니다. SH는 Stacked Hourglass 검출 결과를 입력으로 사용하여 모델을 학습하고 테스트 했다는 것을 나타냅니다. FT는 2d detector model이 H3.6M 데이터셋에서 파인 튜닝되었다는 것을 의미합니다. GT 검출은 실제(groundtruth) 2d 위치가 사용되었다는 것을 나타냅니다. SA는 각 동작별로 모델이 학습되었다는 것을 표시하고, MA는 모든 동작에 대해 단일 모델이 학습되었다는 것을 나타냅니다.
rigid alignment는 일반적으로 3D 인체 자세 추정의 결과를 더 정확하게 만들기 위해 사용되는 후처리 기법입니다. 이 기법은 원래의 3D 좌표와 예측된 3D 좌표 간의 차이를 줄이기 위해 예측된 3D 좌표를 회전 및 이동시키는 과정을 포함합니다. 이러한 rigid aligment을 적용하지 않고 모델의 성능을 평가한다는 것은 모델이 얼마나 정확한 3D 인체 자세를 추정할 수 있는지를 평가할 수 있습니다. 이는 모델의 성능을 좀더 공정하게 비교할 수 있도록 돕습니다.
Data preprocessing
관절 : 2D 입력과 3D 출력에 대해 표준 정규화를 적용하여 평균을 빼고 표준 편차로 나눕니다. 전체적인 위치를 예측하지 않으므로 3D 포즈를 힙 관절을 기준으로 중앙에 두고 있습니다.
카메라 좌표계 : 임의의 좌표 공간에서 3D 관절 위치를 추론하려면, 카메라가 사람을 바라보는 각도와 거리에 따른 변화를 정확하게 고려하기 어렵습니다. (사람이 멀어지면 작게 나오고, 가까이 있으면 크게 나오는 등) 따라서, 카메라 좌표계를 사용하여 3D 관절 위치를 추론하는 것이 더 현실적인 방법입니다. 카메라 좌표계에서는 카메라와 관련된 정보가 고려되어, 2D 이미지에 기반한 3D 관절 위치 추론이 더 정확하게 이루어질 수 있습니다. 이 방식으로, 카메라와의 상대적인 위치와 각도에 따른 변화를 반영하여, 보다 정확한 3D 관절 위치 추론이 가능해집니다. 또한 다양한 카메라의 위치와 각도 차이를 고려하여 학습 데이터를 더 잘 활용해 과적합을 방지할 수 있습니다. 카메라의 역변환을 통해 3D ground-truth를 수정하여 각 카메라의 특성에 맞게 3D 관절 위치를 더 정확하게 추론할 수 있게 됩니다.
2D 검출 : stacked hourglass 네트워크를 사용하여 MPII 데이터 셋에서 사전 학습된 2D detections을 얻습니다. 그리고 H3.6M에서 제공되는 바운딩 박스를 사용하여 이미지에서 사람의 중심을 추정합니다. 계산된 중심을 기준으로 440 × 440 픽셀 크기의 정사각형을 잘라내어 검출기에 입력합니다. (이후 stacked hourglass에 입력하기 위해 256 × 256으로 크기를 조정합니다.) 이렇게 검출된 결과와 ground truth 2D landmarks 간의 평균 오차는 15픽셀로, CPM을 사용한 오차 10픽셀 보다 약간 큽니다. 그러나 MPII 데이터셋에서는 stacked hourglass가 더 좋은 성능을 보였고, 평가 속도가 약 10배 빨랐기 때문에 CPM대신 stacked hourglass를 사용하는 것이 더 좋습니다. MPII 데이터셋에서 사전 학습된 stacked hourglass 모델을 Human3.6M 데이터셋에 맞게 fine-tuning하여 대상 데이터셋에서 더 정확한 2D 관절 검출을 얻었고, 이를 통해 3D 자세 추정의 오류를 더 줄일 수 있었습니다. GPU 메모리 제한 때문에 미니 배치 크기를 6에서 3으로 줄였지만, 그 외에는 stacked hourglass의 모든 기본 매개변수를 사용했습니다. 학습률은 2.5 × 10^-4로 설정하고, 총 40,000번 반복 학습을 진행했습니다.
학습 세부 정보 : 우리는 ReLU을 사용하여 초기 선형 레이어의 가중치를 설정하고, 64의 미니 배치를 사용했으며, Adam을 사용하여 학습하니다. 시작 학습률은 0.001이고 exponential decay를 사용하여 200 개의 epoch 동안 네트워크를 학습합니다. 우리는 Tensorflow를 사용하여 코드를 구현했습니다. 전체 Human3.6M 데이터 세트의 한 epoch당 약 2분 정도 소요됩니다.