들어가며
이전 리뷰에서 Deep Pose를 알아보았습니다. 이를 기점으로 딥러닝을 활용한 Pose Estimation 연구들이 활발히 진행되었습니다. Deep Pose가 입력 이미지에서 곧바로 관절 좌표를 추론하는 리그레션 문제로 접근했다면 이 논문은 heatmap을 추출하여 관절의 위치를 추론하는 기법을 제안합니다. 이를 통해서 성능과 속도 모두 향상시켰다고 하니 한번 알아볼 필요가 있겠죠?
영향력: 인용 횟수가 900회에 달하며 현재 구글의 시니어 리서쳐로 있는 Jonathon Thomson이 1 저자입니다.
주요 기여: Pose Estimation 분야에서 heatmap을 활용하는 방법을 제시하였으며, 이후에 등장한 논문들에서 많이 사용하였습니다.
핵심 아이디어
제목에서 추측할 수 있듯이 이 논문의 핵심 아이디어는 Pose Estimation을 수행하기 위해서 CNN과 graphical 모델을 함께(joint) 학습시키는 것입니다. 더 정확하게 말하면 CNN을 통해서 관절이 있을 법한 위치를 나타내는 heatmap을 추출하고, 관절 간의 상관 관계를 이용한 조건부 확률을 적용하여 비정상적인 예측 값을 제거하는 2 단계로 나뉩니다. 여기서 사용된 히트 맵 방식은 이후의 Pose Estimation 논문들에 많은 영향을 주게 됩니다. 그럼 하나씩 본격적으로 뜯어보겠습니다.
Part Detector(Heatmap)
모델 구조는 단순합니다. 원본 이미지와 이를 작게 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
'갈아먹는 머신러닝 시리즈 > 컴퓨터 비전' 카테고리의 다른 글
갈아먹는 Image Classification [2] Fixing the train-test resolution discrepancy (0) | 2020.05.17 |
---|---|
갈아먹는 Image Classification [1] Noisy Student (0) | 2020.05.15 |
갈아먹는 Pose Estimation [1] DeepPose: Human Pose Estimation via Deep Neural Networks (0) | 2020.01.13 |
갈아먹는 Object Detection [6] SSD: SIngle Shot Multibox Detector (10) | 2020.01.12 |
갈아먹는 Object Detection [5] Yolo: You Only Look Once (5) | 2020.01.10 |