관리 메뉴

갈아먹는 머신러닝

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

갈아먹는 Pose Estimation

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

형준킴 염창동형준킴 2020. 1. 14. 19:17

들어가며

이전 리뷰에서 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

0 Comments
댓글쓰기 폼