OpenPose 간단 정리

reflelia·2022년 7월 15일
post-thumbnail

개요

  • OpenPose는 Bottom-up 기반의 2D Multi-person pose estimation
  • 신체 부위를 heatmap으로 나타내는 confidence map과 신체 부위 사이의 연결을 벡터 필드로 나타내는 Part Affinity Field를 이용하여 신체 부위의 연결 탐지
  • 이미 공개된 Pose Estimation Datset에 발을 annotation 하여 정확도 향상

Top-down vs Bottom-up

Top-down

  • 사람을 먼저 탐지하고 각 바운딩 박스마다 pose estimation을 수행
  • Bottom-up 보다 높은 정확도
  • 사람을 탐지하지 못할 경우 pose estimation 수행 불가
  • 사람별 포즈 탐지 수행, 많은 시간 소요

Bottom-up

  • 인풋 이미지에서 사람의 신체 부위에 대한 키포인트 예측
  • Person Detector 수행 x, 계산 비용이 적어 속도가 빠르고 실시간 적용 가능
  • Top-down 에 비해 정확도가 떨어짐

Pipeline

  1. w x h 의 컬러 이미지를 입력하여 Feature map F 생성 (VGG-19 사용)
  2. Feature map F를 이용하여 Part Affinity Field 예측
  3. 예측된 Part Affinity FieldFeature map F를 이용하여 Confidence map 예측
  4. 예측된 Part Affinity FieldConfidence map을 활용하여 Bipartite matching
  5. 전체 포즈 계산

Confidence map

  • 신체 부위를 Heatmap으로 표현한 Map
  • 신체 부위당 한 장씩 존재, 특정 신체 부위의 위치를 포함
  • Heatmap 분포로 표현하며 여러 사람일 경우 여러개의 Peak 값 탐지

Ground truth Confidence map

  • Confidence map 학습을 위한 Ground truth 데이터 생성

  • K명의 사람, J개의 신체 부위 -> J x K 개의 GT CM 생성

  • 각 CM 당 최대 1개의 Peak 보유

  • 신체 부위를 찾지 못하면 0으로 처리

  • 각 사람별 관절에 대한 Confidence map을 통합하여 각 관절에 대한 CM 생성

  • 동일한 관절의 위치가 다르므로 높은 값들을 모아 하나의 map으로 통합

  • 여러 사람의 어깨에 대한 Confidence map

Part Affinity Field

  • 두 신체 부위 사이의 연결 방향과 위치를 동시에 포함하는 2D 벡터 필드
  • 각 limb type별 한 장씩 존재
  • 특정 limb에 속한 각각의 pixel은 2D 벡터로 표현

Ground truth Part Affinity Field

  • 사람 k 마다 limb type c 별 GT PAF 생성 (k x c)

  • Limb의 두께를 정한 뒤 limb 사이의 임의의 좌표 p를 두 좌표 간의 단위벡터로 설정, 벡터 필드 생성

  • 위 사진처럼 limb 별 Part Affinity Field 결합

  • limb 사이의 점 p 가 limb 위에 있다면 단위벡터 v

  • v는 limb 두 점 사이의 단위벡터

Multi-Person Parsing using PAFs

Pare wise association score

  • Confidence map에서 탐지한 각 신체 부위 후보 dj1, dj2의 단위벡터와 Part Affinity Field의 벡터 필드와 내적

  • Part Affinity Field는 벡터 필드이므로 limb 사이의 픽셀에 대해 적분하여 점수 E 계산

  • p(u) = limb 사이의 픽셀

Maximum weight bipartite graph matching

  • 모든 신체 부위간의 연결을 동시에 고려한다면 막대한 양의 limb 생성 (사진 b)

  • Hungarian Maximum Matching Algorithm 사용 O(n!) -> O(|V|^3)

  • 최소한의 연결 후보 edge로 연결 대상을 줄임
    ex) 왼쪽 팔꿈치에서는 왼쪽 손 혹은 왼쪽 어깨로만 연결이 가능

  • Bipartite matching graph 과정

  • 표의 값은 PAF와 CM의 벡터 내적으로 구한 Associatoin Score E

  • 사람 1에서 사람2의 손에 대한 점수가 더 높아도 최적 연결을 시행하면 정확한 결과가 나온다

Redundant PAF connection

  • 기존의 PAF는 인접한 limb를 연결하는 벡터 필드
  • Redundant PAF는 귀와 어깨, 손목과 어깨 등 멀리 떨어진 연결에 대한 PAF
  • 사진과 같이 사람이 혼잡할 경우 장거리 벡터 필드의 점수를 계산하여 동일한 연결이 발생하면 High Confidence를 갖고 있는 부분으 연결하여 오류 감소

Refine Datasets

  • 기존 Human Pose Estimation Dataset에는 발목까지만 annotation 되어있어 정확도 소폭 감소
  • 3d 모델을 만드는 과정에서 발이 땅을 뚫거나 미끄러지는 Candy Wrapper 효과 발생
  • 엄지발가락, 새끼발가락, 발꿈치 3개씩 총 6개의 키포인트를 할당
  • 발이 가려진 상태에서도 높은 정확도

Failure Case Analysis

  • 보기 드문 자세, 신체 부위가 겹치거나 두 사람의 신체 부위의 잘못된 연결, 동상이나 동물에 대한 잘못된 탐지
  • 발 오류 케이스 : 발이나 다리가 신체를 비롯한 다른 물체에 의해 가려지거나 발은 보이지만 다리가 가려져 있을 때, 발은 보이지만 신체의 나머지 부분이 가려져 있을 때 등
  • 드물게 발바닥이 일반적으로 감지되지 않거나 왼쪽발과 오른쪽 발이 서로 바뀌어서 인식되는 오류

Conclusion

  • 신체 부위를 먼저 탐지하는 Bottom-up 사용
  • Part Affinity Field를 먼저 학습하고 Confidence map을 학습하는 직렬 방법
  • Hungarian Algorithm 을 사용한 Bipartite matching graph, full body pose 추정
  • 데이터셋에 추가적으로 발 키포인트를 할당하여 정확도 향상
profile
딥러닝 공부중

0개의 댓글