Deep learning/Pose estimation

PoseNet으로 알아보는 Pose estimation [1]

bono. 2021. 1. 20. 07:05

Pose estimation이란 무엇인가, 간단한 연구 분류

영상으로부터 사람의 관절을 측정하는 기술은 어느샌가 Human Computer Interaction(HCI), Augmented Reality(AR), 스포츠 분석 등과 같은 분야에서 사용되기 시작하고 있다. 최근 카카오에서는 다음 그림 01. 과 같이 영상 기반의 코칭이 가능한 트레이닝 서비스를 출시하였다. 이렇듯 영상으로부터 사람의 관절을 측정하는 기술을 pose estimation이라 한다.

그림 01. Pose estimation 사용 예시 [1]

Pose estimation은 이미지 / 영상으로부터 사람의 관절의 위치를 자동으로 측정(Localization)하기 위한 기술이다. 다음의 그림 02. 를 예로 들자면 pose estimation을 통해 한명의 사람으로부터 여러개의 관절 키포인트(Key points)를 추출하여 그 좌표를 획득한다.

그림 02. Image 내 human pose estmiation 예시 [2]

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 이미지에 대해 적용하기가 어렵다.

표 01. Direct regression 방식과 heatmap 방식 장단점 비교 [3]

여러 사람에 대해 진행한다면 영상에서 사람을 detect 한 후, 좌표를 찾는 Top-down 방식과 관절 key-points를 추정하고, 이에 대한 상관관계 분석으로써 pose를 얻는 bottom-up 방식으로 나뉜다(그림 04.C).

그림 03. Taxonomy of 2D human pose estimation[3].
그림 04. A. direct regression 방식, B. Heapmap 방식, C. Top-down과 Bottom-up [4]

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.

표02. 대표적인 2D human pose estimation datssets[3]
그림05. 대표적인 dataset 예시 [3]

Evaluation metric

Pose estimation 결과를 평가하기 위하여 다음의 방법을 이용한다. 이외에도 다른 평가 방법들도 존재한다.

Percentage of Correct Parts (PCP)

  • 일정 반경 안에 예측 값이 들어오는가
  • 예를 들자면 7번 keypoint 기준 6번과의 거리의 절반을 반경으로 잡고 해당 반경 내에 예측값이 들어오는가 (이런 경우 PCP@0.5)
  • PCP = 전체 데이터 세트 correct 관절 / 전체 데이터 세트 총 관절
  • 관절 사이의 거리가 매우 짧은 경우 값이 매우 부정확 해진다. (거리가 짧아지기 때문에)
  • 사람의 scale이 작은 경우 (멀리서 찍어 사람이 작게 검출 되면) 에도 부정확해지는데 이를 보완하기 위하여 반경을 데이터의 평균치로 잡는 PCPm이 제안되었다.

그림 06. PCP 설명 예시

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.5PDJ@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 된 거리를 비교한다.

수식 01. OKS

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)