본문 바로가기

갈아먹는 Pose Estimation [1] DeepPose: Human Pose Estimation via Deep Neural Networks

들어가며

오늘 리뷰할 논문은 Pose Estimation 분야에 최초로 딥 러닝을 적용한 Deep Pose 논문입니다. 본격적으로 딥 러닝을 이용한 포즈 에스티메이션의 포문을 열었으며, 당시만하더라도 딥 러닝을 클래시피케이션에만 사용하였는데, 리그레션 문제에도 훌륭하게 적용할 수 있다는 것을 보여준 논문입니다.

Pose Estimation Example

영향력: 구글에서 나온 페이퍼로 인용 횟수가 1300회에 달합니다.

주요 기여: Pose Estimation 분야에 최초로 딥 러닝을 적용하여 state of the art를 달성하였습니다.

Deep Learning Model for Pose Estimation

컴퓨터 비젼 분야에서 CNN이 워낙 뛰어난 성능을 내는 것은 잘 알려져 있지만, Pose Estimation 분야에서 특히 CNN이 적합한 이유는 다음과 같습니다.

 

1. 관절 위치 예측 시에 이미지의 맥락을 파악하여 예측을 한다. 그러므로 관절들 사이의 상관 관계를 학습할 수 있다.

2. 기존 모델들은 각 관절 별로 특징을 추출기와 디텍터를 만든 다음, 이를 조합하는 방식이었다. CNN을 활용하면 단일 신경망으로 모든 관절 위치를 예측할 수 있으므로 훨씬 모델이 단순합니다.

 

Model Design

본 논문에서 제시한 신경망 구조는 다음과 같습니다.

위 그림을 설명하자면 먼저 입력 이미지를 CNN을 통과시킨 다음, 각 관절 별로 x, y 좌표 2개씩, k개의 관절에 대해서 예측 값을 내며 이는 총 2k 차원의 벡터에 해당합니다. 이를 식으로 나타내면 아래와 같습니다.

먼저 벡터 yi는 i번째 관절의 x, y 좌표를 담은 2차원 벡터입니다. 그리고 벡터 y는  2차원 벡터를 k개 쭉 펼쳐서 이어붙인 2k 차원의 벡터입니다. 이 x, y 좌표를 그대로 이용하기 보다는 한번 정규화 해서 사용합니다.

b는 bounding box를 의미하며 여기서는 이미지 전체 혹은 사람만 디텍트한 영역을 말합니다. bc는 이 박스의 중심점 x, y좌표를 나타내는 벡터이며 bw, bh는 박스의 너비와 높이를 말합니다. 각 관절의 x, y 좌표와 중심점 간의 차를 구하고 각각을 너비와 높이로 나누어 주면 0과 1 사이의 값으로 정규화를 시킬 수 있습니다. 그러면 학습시키기에도 더 편리하겠죠?

 

모델은 이렇게 정규화된 값들을 학습하여 예측 값을 냅니다. 이를 다시 원래의 이미지에 찍어주려면 정규화 과정을 거꾸로 적용해주면 되겠죠? 이를 식으로 나타내면 다음과 같습니다.

x는 입력 이미지, φ는 CNN 모델을 통과시키는 함수, θ는 학습되는 파라미터를 의미합니다. 즉, 입력 이미지와 파라미터를 가지고 CNN이 정규화된 예측 값을 내놓고, 이를 다시 정규화를 역으로 적용하여 관절 예측 벡터인 y*를 내놓게 되며, 이것이 위 그림에서 initialState에 해당합니다.

 

이렇게 구한 관절 예측 값은 큰 이미지를 보고 예측한 것이라 정교함이 떨어진다는 것이 저자들의 주장입니다. 여기서 제안된 아이디어는 예측 좌표 주변으로 바운딩 박스를 다시 그리고, 이를 크랍하여 다시 CNN 모델을 통과시키는 Cascasde 방식입니다.

 

Cascade of Pose Regressors

Cascade를 구현하기 위해서 먼저 예측된 좌표 주변으로 바운딩 박스를 그립니다. 그리고 이 박스를 다시 CNN에 태워서 저 정교화 된 좌표 예측 값을 구합니다. 이를 식으로 나타내면 다음과 같습니다.

먼저 모든 좌표들에 대해서 새로운 바운딩 박스를 그립니다. σdiam(ys)라는 수식에 의해서 크기가 결정되는데, diam(ys)란 이전에 예측한 좌표들에서 왼쪽 어깨와 오른쪽 엉덩이 좌표 간의 거리를 의미하며, σ는 이를 적당히 키워주는 파라미터입니다. 이렇게 구한 새로운 바운딩 박스로 다시 예측 하는 것을 s 단계 만큼 반복하는 것을 의미합니다.

Loss Function

로스 펑션은 특이할 것 없이 ground truth 라벨 좌표와 예측 좌표 사이의 L2 거리를 측정합니다. 다만 주의해야할 것은 initial state와 각 cascade 단계마다 동일한 구조의 모델이 각각 학습됩니다.

한계점

초기 딥 러닝 모델이기 때문에 여러가지 한계점들이 있습니다. 먼저 관절을 predict 할 때, 관절과 관절 간의 공간적 상관관계 정보를 고려하지 않습니다. 이럴 경우, 이미지 상으로 보이지 않는 관절들을 예측하기 어렵습니다.

 

다음으로 비효율적인 계산을 진행합니다. 원본 이미지에 대한 크롭을 반복하고, 각 단계별로 별개의 CNN을 학습시킵니다. 이는 학습 시간과 테스트 시간이 오래 소요되는 한계가 있습니다.

 

마지막으로 리그레션 만으로 문제를 해결한다는 것입니다. 이를 보완하고자 이후에 heatmap 기반의 접근 방식이 등장합니다. 아주 흥미로운 아이디어이므로 쭉쭉 리뷰해보도록 하겠습니다.

마치며

Pose Estimation 분야 첫 논문 리뷰입니다. 사람의 관절은 일반 object Detection과 다르게 관절 간의 상관 관계가 있다는 점, 보이지 않는 관절도 예측해야 한다는 점이 흥미롭습니다. 어떤 새로운 아이디어들로 문제를 해결해나가는지 그 과정을 앞으로 쭉 따라가보도록 하겠습니다.

 

감사합니다.

 

 

Reference

[1] A. Toshev, et al, DeepPose: Human Pose Estimation via Deep Neural Networks, 2014, CVPR