PoseNet으로 알아보는 Pose estimation [1]
Pose estimation이란 무엇인가, 간단한 연구 분류
영상으로부터 사람의 관절을 측정하는 기술은 어느샌가 Human Computer Interaction(HCI), Augmented Reality(AR), 스포츠 분석 등과 같은 분야에서 사용되기 시작하고 있다. 최근 카카오에서는 다음 그림 01. 과 같이 영상 기반의 코칭이 가능한 트레이닝 서비스를 출시하였다. 이렇듯 영상으로부터 사람의 관절을 측정하는 기술을 pose estimation이라 한다.
Pose estimation은 이미지 / 영상으로부터 사람의 관절의 위치를 자동으로 측정(Localization)하기 위한 기술이다. 다음의 그림 02. 를 예로 들자면 pose estimation을 통해 한명의 사람으로부터 여러개의 관절 키포인트(Key points)를 추출하여 그 좌표를 획득한다.
pose estimaion은 크게 2D pose estimation과 3D pose estimation으로 분류 된다. 본문에서는 2D pose estimation에 대해서만 다뤄보려 한다. 2D pose estimation은 그림 03과 같이 분류된다. 영상에서 한명에 대해 pose를 estimation 할 것인가, 모든 사람에 대해 할 것인가(single / multi person). 그림 02. 는 single person human pose estimation의 예시라 할 수 있겠다. 만약 한명에 대해 진행한다면, 바로 관절을 regression을 통하여 구할 것인가(그림 04.A), heatmap (관절에 대한 confidence map) 을 구할것인가(그림 04.B)로 나뉜다 (Direct regression / Heatmap based). 두 방식의 장단점은 표 01과 같다.
Direct regression based
- 빠르고 직접적으로 end-to-end 방법으로 학습이 가능하고, 3D 이미지에 대해서 큰 변화없이 적용 가능하다.
- Multi-person에 대해 적용 할 수 없다.
Heatmap based
- 시각화가 쉽고, 보다 복잡한 경우에 적용하기 좋다.
- Memory 사용양이 많고, 3D 이미지에 대해 적용하기가 어렵다.
여러 사람에 대해 진행한다면 영상에서 사람을 detect 한 후, 좌표를 찾는 Top-down 방식과 관절 key-points를 추정하고, 이에 대한 상관관계 분석으로써 pose를 얻는 bottom-up 방식으로 나뉜다(그림 04.C).
Datasets
딥러닝을 기반으로 pose estimation을 한다 했을 때, 학습을 위한 dataset들이 필요하다. 모든 dataset을 다 소개 할 수는 없고, 대표적인 dataset 몇개만 선택하여 소개해보려 한다(표 02, 그림05). COCO dataset을 제외하고는 모두 single person에 대한 정보를 제공한다. 소개한 dataset 이외에도 많은 데이터셋들이 있다.
LSP
- Flicker(사진 공유 사이트) 에서 sport tag 이미지를 수집함.
- 2000장의 이미지가 존재하고, 14개의 관절에 대해 annotation 되어 있다.
- 한명의 사람 (single pose)에 대한 dataset.
FLIC
- Hollywood movies로 부터 이미지를 수집하였다.
- 약 5000장의 이미지가 존재하고, 10개의 관절에 대해 annotation 되어 있다.
- 한명의 사람 (single pose) 에 대한 dataset.
MPII Human pose
- YouTube 비디오로 부터 수집되었다.
- 2만 5천장의 이미지가 존재하고, 16개 관절에 대하여 annotation 되었다.
- 또한 각 이미지에 410개 사람 활동에 대하여 annotation 되어 있다.
- 한명의 사람 (single pose) 에 대한 dataset.
MS COCO
- 15만명에 대한 6만장 이미지가 존재한다 (multi persion)
- 17개의 관절에 대해 annotation 되어있다.
- 여러 사람 (Multi pose) 에 대한 dataset.
Evaluation metric
Pose estimation 결과를 평가하기 위하여 다음의 방법을 이용한다. 이외에도 다른 평가 방법들도 존재한다.
Percentage of Correct Parts (PCP)
- 일정 반경 안에 예측 값이 들어오는가
- 예를 들자면 7번 keypoint 기준 6번과의 거리의 절반을 반경으로 잡고 해당 반경 내에 예측값이 들어오는가 (이런 경우 PCP@0.5)
- PCP = 전체 데이터 세트 correct 관절 / 전체 데이터 세트 총 관절
- 관절 사이의 거리가 매우 짧은 경우 값이 매우 부정확 해진다. (거리가 짧아지기 때문에)
- 사람의 scale이 작은 경우 (멀리서 찍어 사람이 작게 검출 되면) 에도 부정확해지는데 이를 보완하기 위하여 반경을 데이터의 평균치로 잡는 PCPm이 제안되었다.
Percentage of Correct Key-points (PCK)
- 예측값과 정답의 거리가 특정 임계값안에 들어오는가
- 보통 torso diameter 를 기준으로 한다.
- PCK@0.2 = 0.2 * torso diameter
- PCKh (Percentage of Correct Key-points Head) 는 몸통이 아닌 머리를 기준으로 한다.
- PCK는 특정 thr val를 지정하여 해당 값 내에 (distance) 존재하는 joint를 세는 것
Percentage of Detected Joints (PDJ)
- 사람의 bounding box와 torso의 height로 normalize 하여 계산한다.
- PCK와의 차이점을 잘 모르겠다.
- Torso diameter에 일정 비율을 곱해 thr value로 사용
- PDJ는 torso의 일정 비율 내에 들어오는 joint의 수를 세는 것
- 내 생각에는 PCK@0.5와 PDJ@0.5는 같을 것일 것 같다.
Mean Per Joint Position Error (MPJPE)
- Per joint position error = Euclidean distance between ground truth and prediction for a joint
Ground-truth와 prediction 사이의 euclidean distance를 Per joint position error라 한다. - 한 사람에 대하여 찾은 모든 key points에 대하여 Per joint position error를 구하고 평균을 취한다.
- 따라서 낮을수록 좋음
Object Keypoint Similarity (OKS)
- 주로 COCO dataset을 평가 할 때 사용한다.
- IoU와 매우 유사한 역할을 하는 metric
- 다음의 수식으로 설명된다.
d_i : diameter (GT, prediction)
v_i : is the visibility flag
s : is the object scale, and
k_i : s a per-keypoint constant that controls falloff. - OKS는 person scale에 대해 normalize 된 거리를 비교한다.
Pose estimation을 구현하기에 앞서...
본 포스트에서는 상대적으로 간단한 문제인 2D image 내 single person에 대한 pose estimaion에 대해 이야기 하려 한다. 2D image 내 single person에 대한 pose estimaion은 그림 02의 문제를 해결하는 것과 같다. 처음부터 끝까지 하나하나 구현을 하기보다 PoseNet이라는 open source를 통하여 이를 구현하고, pose estimation 자체에 대해 이해를 높여보려 한다.
Reference
[1] Kakao developers 공식 문서 (https://developers.kakao.com/docs/latest/ko/pose/common)
[2] T. L. Munea, Y. Z. Jembre, H. T. Weldegebriel, L. Chen, C. Huang, and C. Yang, “The progress of human pose estimation: A survey and taxonomy of models applied in 2d human pose estimation,” IEEE Access, 2020.
[3] Deep Learning Based 2D Human Pose Estimation: A Survey
[4] if(kakao) 2020 딥러닝으로 어려운 요가 자세 잡아드립니다. (https://www.kakaobrain.com/press/137)