본문 바로가기

갈아먹는 Pose Estimation [2] Joint training of a convolutional network and a graphical model for human pose estimation

들어가며

이전 리뷰에서 Deep Pose를 알아보았습니다. 이를 기점으로 딥러닝을 활용한 Pose Estimation 연구들이 활발히 진행되었습니다. Deep Pose가 입력 이미지에서 곧바로 관절 좌표를 추론하는 리그레션 문제로 접근했다면 이 논문은 heatmap을 추출하여 관절의 위치를 추론하는 기법을 제안합니다. 이를 통해서 성능과 속도 모두 향상시켰다고 하니 한번 알아볼 필요가 있겠죠?

Pose Estimation Result

영향력: 인용 횟수가 900회에 달하며 현재 구글의 시니어 리서쳐로 있는 Jonathon Thomson이 1 저자입니다.

주요 기여: Pose Estimation 분야에서 heatmap을 활용하는 방법을 제시하였으며, 이후에 등장한 논문들에서 많이 사용하였습니다.

핵심 아이디어

제목에서 추측할 수 있듯이 이 논문의 핵심 아이디어는 Pose Estimation을 수행하기 위해서 CNN과 graphical 모델을 함께(joint) 학습시키는 것입니다. 더 정확하게 말하면 CNN을 통해서 관절이 있을 법한 위치를 나타내는 heatmap을 추출하고, 관절 간의 상관 관계를 이용한 조건부 확률을 적용하여 비정상적인 예측 값을 제거하는 2 단계로 나뉩니다. 여기서 사용된 히트 맵 방식은 이후의 Pose Estimation 논문들에 많은 영향을 주게 됩니다. 그럼 하나씩 본격적으로 뜯어보겠습니다.

Part Detector(Heatmap)

Heatmap Prediction Network

모델 구조는 단순합니다. 원본 이미지와 이를 작게 resize한 이미지 두 개를 각각 Conv 레이어를 통과시켜 피쳐 맵을 추축합니다. 작은 이미지에서 추출한 피쳐맵은 당연히 그 크기가 더 작겠죠? 이를 Point-wise Upscale이란 과정을 거쳐서 크기를 맞춰준 다음 concat 해줍니다. 구체적으로 어떤 Upscale을 적용하였는 지는 기재되어 있지 않았습니다.

 

무튼! 합친 피쳐 맵에 컨볼루션을 거쳐 90x60xk 크기의 예측 값을 내주며, 이 때 k는 관절의 개수입니다. 측, 관절마다 90x60x1 크기의 피쳐 맵이 생성되며, 각 픽셀은 해당 픽셀에 관절이 있을 확률을 0에서 1 사이의 값으로 표현해줍니다. 위 도표에서는 관절이 4개로 설정했기 때문에 90x60x4의 피쳐 맵이 결과로 나옵니다.

High Level Spatial Model (Graph Model)

앞서 추출한 히트맵은 관절이 있을 법한 위치를 대략적으로 나타낸 것입니다. 여기에는 False Positive, 즉 관절이 아니지만 관절이라고 예측된 지점들이 많이 포함되어 있습니다. 이에 저자는 관절 간의 해부학적 상관관계를 이용하여 터무니 없는 오차 값들은 제거해주는 모델을 제안하며, 이를 Spatial Model이라고 부릅니다.

 

위 그림은 얼굴과 어깨 두 관절 간의 상관관계를 이용하여 말도 안되는 관절 지점을 제거하는 과정을 나타낸 것입니다. 위 그림에서 Unary란 Part Detector를 통해서 추출된 각 관절별 히트맵을 가리킵니다. 그리고 f|s 등과 같은 표기는 어깨의 위치가 s라고 가정했을 때, 얼굴의 위치를 나타내는 조건부 확률이며, 바로 이 조건부 확률을 분포를 모델에 학습시키고자 하는 것이 Spatial Model의 핵심입니다.

 

이러한 방식으로 각 관절에 대한 조건부 확률 값을 구하게 됩니다. 얼굴을 예시로 들면 어깨가 여기 있을 때 얼굴의 위치, 팔꿈치가 여기 있을 때 얼굴의 위치 등 모든 관절마다 조건부 확률을 구하며 이 역시 히트맵의 형태를 지닙니다. 이러한 히트맵을 모두 곱해주어 최종적으로 관절의 위치를 예측하게 됩니다. 아래는 이러한 조건부 확률 분포를 학습시키는 모델의 구조입니다.

조건부 확률 분포 역시 컨볼루션 레이어의 파라미터에 학습시킵니다. 각 컨볼루션 레이어는 앞선 Part Detector에서 얻은 각 관절별 히트맵들을 입력 받는 것을 볼 수 있습니다. 그 외에 SoftPlus와 같은 다소 생소한 표기들이 보이는데, 이는 수식을 보면 더 이해하기가 편합니다.

한계점

현재까지는 이미지 하나에 사람이 한명인 입력에 대해서만 Pose Estimation을 수행합니다. Multi Object에 대한 고려는 아직 이루어지지 않았습니다. 

마치며

이 논문에서는 이전 Deep Pose가 Cascade라는 비효율 적인 방법으로 풀었던 문제를 CNN과 graph 모델로 멋지게 풀어냈습니다. 그 결과 모델 학습 속도도 줄이고 인퍼런스 타임도 줄이는 동시에 정확도도 높이는 결과를 내었습니다. 이후의 논문들에서는 어떻게 새로운 아이디어로 더 멋진 결과를 내는지 살펴보겠습니다.

 

감사합니다.

 

[1] J. Thomson, Joint training of a convolutional network and a graphical model for human pose estimation, 2014, NIPS