본 포스트에서는 구글이 게시한, Human Pose Estimation 을 최초로 Deep Learning 을 사용해서 구현한 논문에 대해서 살펴보려고 합니다. 리뷰하려는 논문의 제목은 다음과 같습니다.
“DeepPose: Human Pose Estimation via Deep Neural Networks”
Objective
논문의 배경은 기존의 Human Pose Estimation 이 보여준 제한적인 상황에서부터 시작합니다.
여기서, Human Pose Estimation 이 무엇인지 모르실 분들을 위해 익숙한 사진 하나를 보여드리려고 합니다.
Human Pose Estimation
Human Pose Estimation
Human Pose Estimation 은 인간의 이미지로부터 그 자세를 추출해내는 과정입니다. 위의 그림의 두 사람의 내부에 그려져 있는 점과 선들로 자세를 정의해내는 것입니다. 점과 선을 그리는 기준은 인간을 구성하고 있는 관절을 기반으로 합니다. 그렇기 때문에 Human Pose Estimation 문제를 인간의 관절의 위치를 localization 하는 문제라고도 합니다.
그런데, 관절의 위치를 localization 하는데엔 사진 속에서 가려진 부분에 대한 관절을 찾아내기 어려웠다는 문제점이 있었습니다. 위 사진 좌측 야구선수의 오른쪽 팔, 우측 사람의 왼쪽 몸은 사진 속에서 가려져 있고, 실제로 관절의 위치도 많이 겹쳐져 있습니다. 실제로 Human Pose Estimation 은 가능한 모든 pose 로부터 관절의 위치를 찾아내야 한다는 challenge 가 있었고 이를 풀어내기 위해 다양한 시도들이 있었습니다. 논문 기준 최근에는 많은 효율적인 방법들이 나왔다고 하는데, 그러면서도 제한된 효율성에 대해서 언급합니다.
그 예시로 part-based model 을 제시합니다. 이는 이미지에서 특정한 것을 감지하는 알고리즘인데, 이미지 속에서 특정한 것이 존재하는지를 살펴보기 위해서 이미지의 각 local 부분이 사용됩니다. 또한 모델링을 함에 있어서 몸의 모든 관계 중에 일부만을 사용하여 모델링합니다. 이렇게 구현한 결과 전체적인 관점에서 이미지를 바라보지 못하고 보이지 않는 부분을 성공적으로 예측하지 못했습니다. 물론, 이러한 점을 인지하고 개선한 다른 연구들도 있었지만, 현실 세계의 이미지에 대해서 성공적인 결과를 내지는 못했었다고 합니다.
이러한 상황에서, 논문에서는 Deep Neural Network(DNN) 를 사용하여 Human Pose Estimation 을 이미지를 holistic view(전체적인 초점) 로 바라보면서 관절의 위치를 찾아보려고 합니다. 실제로 DNN 은 visual classification, object localization 에 대해서 엄청난 결과들을 보여주었었기 때문이기도 합니다. DNN 이 관절이 존재하는 물체의 localization 를 정확하게 찾아내는 task 에 활용될 수 있을까? 에 대한 의문에 대한 답을 내리려고 했던 것입니다.
Deep Learning Model for Pose Estimation
논문에서는 Human Pose Estimation 을 하나의 회귀 문제로 변경하여 해석합니다. 결과적으로 얻어야 하는 것은 "인간 관절의 위치 집합" 이고, 인간 관절의 위치는 좌표로 나타낼 수 있기 때문이기도 합니다. 회귀 문제로 변경하여 그냥 이미지를 입력으로 인간 관절 위치 출력으로 뽑아내려는 생각입니다.
위의 생각을 실현하기 위해서 논문에서는 기본적으로 관절 위치를 나타내는 방법에 대해서 설명합니다. 기본적으로 는 입력 이미지 데이터이며, 는 각 관절의 위치를 나타내는 pose vector 입니다. 아래의 수식은 개의 관절을 모두 나타내는 pose vector 입니다.
그리고, 예상하셨다시피 는 하나의 관절 좌표 데이터입니다. 저희가 흔히 알고 있는 좌표 데이터입니다. 여기서의 는 위에서 설명한 와 와는 다른, euclidian 좌표 내 점과 같은 존재라는 것을 나타내기 위해 표현한 것입니다.
이후, 논문에서는 갑자기 bounding box 에 대한 좌표의 normalization 에 대해서 설명합니다. 논문에서 그 이유로 "Absolute coordinate 로 정의된 좌표를 bounding box 에 대해 normalize 하는 것은 좋은 효과가 있다는 것이 증명되었다" 라는 설명을 합니다. 실험적인 것인지 선행연구의 결과인지는 모르겠지만, 우선은 normalization 자체가 scale 을 동일한 수준으로 맞추어주어 수렴속도를 빠르게 한다는 일반적인 통념과 작은 범위 내에서의 localization 을 정확하게 할 수 있지 않을까에 대한 예측 정도로 이 부분의 자세한 이유에 대해서는 넘어가려고 합니다.
그렇게, bounding box 를 정의하는데, 중심 좌표가 이고 너비가 이며 높이가 일 때 다음과 정의하여 표현합니다.
위와 같이 표현된 bounding box 에 대해서 번째 관절 위치를 normalize 할 때, 이를
위와 같이 나타내는 것으로 normalization 을 정의합니다. Bounding box 의 중심 기준으로 가 떨어진 정도를 bounding box 의 scale 에 맞게 와 값의 크기를 조절했다고 보시면 됩니다. 이를 바탕으로, 전체적인 관점에서의 식을 한 번 정리해보면,
위와 같은 형태가 나오는 것을 알 수 있습니다.
더불어 논문에서는 표현의 편의성을 위해, 를 bounding box 에 대해서 cropping 한 데이터를
위와 같이 표현합니다.
지금까지가, 논문에서 앞으로 설명할 때 사용할 기본적인 표현에 대해서 설명한 부분입니다.
Pose Estimation as DNN-based Regression
논문에서는 구현할 네트워크의 forward propagation 연산을 로 표현합니다. 즉, 개의 관절을 가지는 시스템에서 parameter 의 조합 를 가진 네트워크의 연산은 를 만족하는 어떤 연산인 것입니다.
이렇게 정의된 연산에 대해서 forward propagation 으로 산출된 예상 관절의 absoulte coordinate 위치 집합은 아래와 같이 표현할 수 있습니다.
이 때 입력은 정해진 사이즈의 이미지이고 출력은 개의 관절 위치 coordinate 인 것입니다.
그렇다면, 이렇게 forward propagation 을 정의한 모델은 어떠한 형태를 가질까요?
논문에서는 Krizhevsky et al. 에서 image classification 에 사용한 네트워크 구조를 base 로 사용했습니다. 이 모델 구조를 선택한 이유는 다른 논문에서 image localization 에서 뛰어난 결과를 보여줬었기 때문이라고 합니다.
위의 사진에서 보이는 네트워크 구조가 논문에서 사용한 구조입니다. 7-layer convolutional neural network 를 사용한 것을 볼 수 있습니다. 자세히 기술하자면 다음과 같습니다.
는 convolutional layer, 는 pooling layer, 는 fully connected layer 이며, 은 local response normalization layer 입니다.
LRN (Local Response Normalization)
신경생물학의 lateral inhibition(측면 억제) 에서 motive 된 normalization 으로, lateral inhibition 에서 활성화된 뉴런이 이웃한 뉴런들을 억제하는 현상과 같이 neural network 에서 어떤 값이 주변의 값들에 비해서 매우 클 경우, convolution 이나 pooling layer 를 통과할 경우 하나의 픽셀값이 지배적인 영향을 주는 현상을 막기 위한 방법입니다.
위 네트워크 구조는 한 번 보고만 넘어가도 좋을 것 같습니다. 논문에서 네트워크 구조 설계에서 크게 고려한 점을 언급해주지 않더라구요. (그대로 따와서일수도 있습니다.)
네트워크 구조를 Krizhevsky et al. 에서 따온 것과는 달리 loss 의 설계는 다릅니다. (당연하지만요..) 놀라울정도로 간단한것이 L2 loss 를 사용했습니다.
위의 식은 nomalized 된 domain 를 나타낸 것입니다. Loss 가 이 dom 위에서 아래와 같이 정의됩니다.
말씀드린 것처럼 단순히 ground truth 인 관절의 좌표와 예측한 관절의 좌표간의 차이의 RMSE 형태입니다. 논문에서 부가적으로 설명하는 것은 mini-batch size 128, learning rate 0.0005, layer 에 대해서 dropout 0.6 을 사용, image crops 와 left/right flip 등과 같은 방법을 활용한 data augmentation 을 진행했다는 점들입니다. 설정의 이유를 크게 설명하지 않는 것을 보아 논문의 맥락을 이해하는데 크게 중요한 정보는 아닌 것 같습니다.
Cascade of Pose Regressors
앞서 진행한 Pose Formulation 은 joint estimation 이 full image based 라서 context 에 기반한다는 점에서 지금까지 설명해온 holistic view 에서의 학습을 진행할 수 있다는 장점을 가졌습니다. 하지만, 220220 의 고정된 크기의 입력 데이터 크기를 가진다는 사실 때문에 이미지의 local 한 부분을 깊게 들여다볼 기회가 없었습니다. 즉 위의 모델만으로는 coarse 한 scale 로 pose properties 를 뽑아낼 수 있도록 parameter 들을 학습한다는 것입니다.
논문에서는 더 좋은 precision 을 달성하기 위해서 기존의 모델에 pose regressor 를 cascade 하여 추가로 학습을 진행하기로 합니다. Initial model 이 예측한 pose 를 refine하기 위해 추가로 regressor 를 사용하는 것입니다. 이를 위해서, cascaded pose regressor 들은 initial model 이 원하는 만큼 학습되어 initial pose 가 예측되기 전까지는 동작하지 않고 예측된 이후에 예측한 joint location 의 주변으로 image 를 crop 하여 잘려진 sub-image 위의 joint 에 대해 자세히 들여다 보면서 보정해야 할 pose displacement 를 학습합니다.
그렇다면, 새롭게 정의한 cascaded pose regressors 의 네트워크는 어떠한 형태를 가질까요?
놀랍게도, 기존의 initial model 과 정확히 동일한 구조를 사용합니다. 다만, 기존의 initial model 을 재사용하는 것이 아니라서, 번째 stage 의 regressor 에 대해서 학습될 parameter 가 새롭게 정의됩니다.
또한, 앞서 설명한 바와 같이, 이미지를 자세히 들여다보는 것이 목적이기에 initial stage 에서 예측한 pose 를 기준으로 그 주변의 bounding box 를 정의하여 그것을 crop 한 이미지를 입력으로 사용합니다. 구체적으로 bounding box 의 정의는 다음과 같습니다.
여기서, 는 의 관절 좌표들 중 몸통의 크기를 나타내는 좌표들(좌측 어깨로부터 우측 골반) 사이의 거리로 정의됩니다. 그리고 는 이 값을 scaling 해주는 요소입니다. 실제로 뒤에서 나오지만, 논문에서도 값을 여러 값을 시도한 후에 최적의 값을 뽑아냅니다.
위와 같은 bounding box 의 정의 내에서 stage s 의 연산을 stage 1(initial stage) 의 연산과 비교하여 기술하면 다음과 같습니다.
이 때, bounding box 는 stage 에 따라 다음과 같이 정의됩니다.
학습되는 요소가 좌표가 아니라 displacement 이기 때문에 stage 가 거듭될수록 조금 더 작은 scale 내에서의 정확성을 확보하려는 시도를 한 것입니다.
여기까지 잘 이해하신 분이라면, 고정된 에 대해서 bounding box 가 고정된 채로 학습데이터 하나() 당 stage 에서 하나의 학습데이터에 대응된다고 생각하실 것입니다. 이렇게 이해하신 것이라면 잘 이해하신 것이 맞습니다. 다만, 논문에서는 여기서도 학습 효율을 위해서 data augmentation 을 진행합니다. Cropping 할 bounding box 에 약간의 noise 를 주어 다양한 cropped image 를 형성하여 training data 로 활용하는 것입니다.
여기서, 은 이전 stage 의 displacement 의 mean 과 variance 를 가지는 normal distribution 입니다. 생성한 분포에서 를 sampling 하여 bounding box 의 중심 좌표에 더함으로써, bounding box 의 위치를 다양하게 하여 학습을 진행한 것입니다.
마지막으로, cascaded regressor 에서의 loss function 은 어떻게 될까요? 이는 기존의 initial stage 의 loss 와 별 다르지 않습니다. Displacement 자체가 비교 대상이 될수는 없으니 stage s 까지 누적하여 반영된 예측 좌표와의 차이를 가지고 L2 loss 를 똑같이 정의하는 것입니다.
Emperical Evaluation
지금까지 논문이 human pose estimation 을 위해 진행한 방법론에 대해서 알아보았습니다. 지금부터는 논문에서는 그들의 방법론이 뛰어나다는 것을 평가한 방법에 대해서 설명하려고 합니다.
Setup
평가에 대한 설명에 들어가기에 앞서서, 논문에서는 그들의 평가 결과를 이해하기 위해 도움이 될 내용들을 설명합니다. 크게 dataset, metric, 그리고 experimental detail 이 그것들입니다.
먼저, dataset 은 크게 두 가지 종류를 사용했습니다. 각 dataset 의 특징은 다음과 같습니다.
1.
Frames Labeled In Camera (FLIC)
•
4000 training images
•
1000 test images
•
다양한 pose, clothing
•
10 개의 관절
2.
Leeds Sports Dataset + Extenstion (LSP)
•
11000 training images
•
1000 test images
•
Sport dataset 이라서 역동적인 pose 가 많음
•
사람의 크기가 150px 정도로 작음
•
14 개의 관절
더불어 두 dataset 공통으로 는 어깨와 골반 사이의 거리로 정의했으며, 모든 관절이 인체를 모방한 tree-kinematic 으로 배열되어 있다고 합니다.
다음으로 metric 으로는 크게 두 가지 종류를 사용했습니다. 각 metric 은 다음과 같습니다.
1.
Percentage of Correct Parts (PCP)
•
Limb 의 detection rate 를 측정하는 metric
•
예측한 두 joint 로 형성하는 limb 와 ground-truth 의 두 joint 로 형성하는 limb 사이의 거리가 ground-truth 의 두 joint 사이의 거리의 절반 보다 작은 경우에 limb 가 detected 되었다고 정의
애매한 점은, 두 직선 사이의 거리를 어떻게 정의하는지에 대한 구체적인 설명이 없는 점입니다. 지금 제가 생각하기로는 대응되는 두 joint 사이의 L2 norm 의 평균이 아닐까... 생각하고 있습니다.
•
위와 같은 detection 기준 때문에 short limbs 는 기준이 까다롭고 detect 하기 어려움
2.
Percentage of Detected Joint (PDJ)
•
PCP 와 전반적으로는 동일
•
PCP 가 short limb 에 대해 보이는 단점 해결을 위해 기준을 ground-truth 인 두 joint 사이의 거리의 절반이 아닌, torso diameter(몸통 길이) 의 certain fraction 으로 설정
•
일반적으로 몸통의 크기가 작으면 limb 의 길이가 작기 때문에 limb 길이에 어느정도 dependent 한 기준을 설정할 수 있음
마지막으로, 논문의 experimental detail 에서는 experiment 에 사용한 구체적인 학습 정보를 제공해줍니다. 그 정보는 다음과 같습니다.
1.
모든 실험에서 앞서 설명한 동일한 network architrcture 를 사용했습니다.
2.
FLIC dataset 에서는 face detector 를 base 로 하여 초기 bounding box 를 설정했습니다. Face detector 로 검출해낸 face bounding box 를 enlarge 하는 방식이라고 합니다.
3.
LSP dataset 에서는 full image 를 initial bounding box 로 사용했습니다. 이는 이미 dataset 자체가 인간이 상대적으로 꽉 차도록 설정되어있기 때문입니다.
4.
의 경우는 여러 값을 시도한 이후 설정했다고 합니다. FLIC 의 경우에는 0.8, 1.0, 1.2 를 시도한 이후에 1.0 으로 설정해주었고, LSP 의 경우에는 1.5, 1.7, 2.0, 2.3 을 시도한 이후에 2.0 으로 설정해주었다고 합니다.
5.
stage 의 총 개수 S 는 3으로 설정했습니다.
이후, 논문에서는 실제로 cascaded regressor 에서 사용한 sampled image 개수, 소요된 연산 시간 등을 정보로 제공해줍니다. 인상 깊었던 점은 initial stage 의 학습에 3일, 각각의 stage 를 학습하는데 7일이 소요되었다고 합니다.
Result and Discussion
논문에서는 앞서 Setup 부분에서 설명한 세팅으로 그들의 방법론을 평가합니다.
가장 먼저 보여주는 것이 LSP dataset 을 PCP metric 으로 평가한 표입니다. 평가를 위해 4 가지의 limbs (upper arm, lower arm, upper leg, lower leg) 각각에 대해서 PCP 값을 구합니다.
DeepPose 는 upper leg 에서 특히 좋은 성능을 보임을 알 수 있었습니다. 더불어 다른 방법론들과는 다르게 특정한 limb 에서 좋은 성능을 보이지 않고 전체적으로 높은 성능을 보이는 방법론임을 살펴볼 수 있었습니다. Average 로 본다면, DeepPose-st3 가 가장 우세함을 알 수 있습니다.
다음으로 보여주는 것이 FLIC dataset 과 LSP dataset 을 PDJ metric 과 으로 평가한 그래프입니다.
FLIC dataset 에서는 전체적으로 DeepPose 가 true joint 의 기준선을 어디로 잡던가에 상관없이 높은 detection rate 를 보임을 알 수 있습니다. 실제로, 0.2 로 true joint 의 기준선을 설정했을 때, 2 번째로 좋은 모델과 비교하여 0.15 만큼의 rate 증가를 elbow 에서 얻을 수 있었고, 0.2 만큼의 rate 증가를 wrist 에서 얻을 수 있었습니다.
LSP dataset 에서는 전체적인 경향성으로 보면 deepPose 가 가장 높은 detection rate 를 보여주고 있는 것을 알 수 있지만, 낮은 true joint 기준선에 대해서 다른 모델에 비해 detection rate 가 떨어지는 현상을 보여줍니다. 논문에서는 이 현상을 DNN 에 포함된 max-pooling layer 의 영향으로 보고 있는데, 이 또한 자세한 설명은 생략되어 있습니다.
다음으로 보여주는 것이 FLIC dataset 과 PDJ metric 을 활용한 cascaded pose regressors 의 효과에 대한 평가입니다.
위의 그래프에서 보이는 것과 같이 stage 가 증가할 수록 우선 전체적인 detection rate 가 높아짐을 알 수 있습니다. 특히 true joint 에 대한 기준선이 0.15 ~ 0.2 근방일 때 stage 개수에 따른 detection rate 의 차이가 크게 나타나는 것을 확인할 수 있었습니다. 이는, metric 의 기준선을 엄격하게 잡아도 될만큼 stage 가 증가할 수록 정밀한 pose estimate 를 해낼 수 있었다는 것을 보여줍니다. 더불어 대부분의 detection rate 증가는 cascaded pose regressor 가 1개 추가 될 때 발생했는데, 이는 두 개 이상의 cascaded pose regressor 추가는 너무 작은 scale 을 다루기 때문으로 보고 있습니다.
실제로, stage 에 따른 pose estimated result 의 결과를 visulaize 한 것이 위 사진입니다. Initial stage 에서 대략적으로 rough 하게 pose 를 정확하게 찾아내는 것을 볼 수 있습니다. 다만 세 번째 줄의 사진 처럼, 모양은 제대로 되었지만 scale 이 정확하지 못한 경우들이 나타났고, stage 2 를 거쳐 그것이 조정되고 더 나은 alignment 를 보여주었습니다. 더불어 적은 경우들에 한해서 첫 번째 줄의 사진 처럼 각각의 joint 자체가 미세한 조정을 통해 정확도가 높아졌다고 합니다.
다음으로 보여주는 것이 test cross-dataset 에 generality 에 대한 검증입니다. 아래는 LSP dataset 으로 학습한 뒤에 Image Parse dataset 으로 test 를 한 결과를 표로 나타낸 것입니다. Image Parse dataset 은 LSP dataset 과 비슷하게 운동을 하는 사람들의 모습이 담겨져 있는 것들도 있지만, 운동이 아닌 다른 활동을 포함한 것들도 있는 dataset 입니다.
위에서 보여준 것들과 마찬가지로 DeepPose 가 모든 항목에 대해서 가장 좋은 성능을 보여줌을 알 수 있습니다. 논문에서는 이 외의 다른 것은 언급하지 않고 넘어갑니다.
LSP 뿐만이 아니라 FLIC dataset 또한 generality 에 대한 검증을 진행합니다. FLIC dataset 으로 학습한 모델을 Buffy dataset 으로 test 한 것이 아래의 그래프입니다. 이전과 다른 점은 Buddy datase 의 많은 사진들이 상체만 보여주기 때문에 상체에만 pose estimation 을 적용했다는 점입니다.
Generality 에 대한 검증에서 논문이 설명한 것은 다른 state-of-art model 의 performance 를 유지할 수 있었다는 점입니다. 이는 곧, 좋은 generalization 성능을 보여준다는 것을 의미합니다.
마지막으로, 논문에서는 그들의 방법론이 얼마나 좋은지를 설명하기 위해 estimate 하기 어려운 pose 에 대해서 성공적으로 estimate 한 사진들에 대한 예시를 가져옵니다.
위 사진들은 한 번 보고만 넘어가셔도 좋을 것 같습니다.
Conclusion
이것으로 논문 “DeepPose: Human Pose Estimation via Deep Neural Networks” 의 내용을 간단하게 요약해보았습니다.
논문의 conclusion 부분에서는 DNN-based human pose estimation 으로는 첫 시도이면서 이러한 방법은 이미지의 전체적인 context 를 반영하는 것에서 장점이 있다고 강조합니다. 결과적으로 SOTA model 과 비교해서 전혀 뒤쳐지지 않는 성능을 보여주었다는 점에서 의미가 있다고 합니다.
Pose estimation 이 사실 배워보지 않은 분야라서 살펴보고 싶었는데, 생각보다는 간단해서 놀랐던 논문이었던 것 같습니다. 아마도 이것이 DNN 을 사용한 pose estimation 의 첫 번째 논문이어서 그런 것 같기도 합니다. Pose estimation 에 이제 막 관심을 들이신 분들에게 꼭 추천하고 싶은 논문이었던 것 같고 pose estimation 에 대해서 추가로 관심이 생긴다면 후속 논문들을 한 번 리뷰해보도록 하겠습니다.