Realtime multi-person 2d pose estimation using part affinity fields (CVPR 2017)


  • 논문 제목: Realtime multi-person 2d pose estimation using part affinity fields
  • 연구 기관: Carnegie Mellon University


본 리뷰 글은 CMU 에서 발표한 pose estimation 논문 시리즈 중 마지막 리뷰 글이다 (물론 본 글 게재 이 후에도 CMU 는 새로운 pose estimation 논문을 계속 발표하겠지만...). 두 개의 선행 연구 논문은 아래와 같으며, 여기를 클릭하면 (Pose MachineConvolutional Pose Machine) 리뷰 글을 볼 수 있다.



본 연구 역시 선행 연구들에서 채택하였던 cascaded stage architecture 를 그대로 유지하고 있다. 다만, feature extraction 및 belief map 을 생성하는 CNN 구조를 조금 바꾸고, 'part affinity field' 라는 새로운 개념을 도입하여, part 사이의 상관 관계를 보다 명시적으로 (explicitly) 네트워크에 반영하였다 (이전 연구들에서는 receptive field size 를 증가시키는 방법을 이용하여 part 사이의 상관 관계를 'implicitly' 반영하였다). COCO 2016 keypoints challenge 에서 가장 좋은 성능으로 우승한 기술이다.


용어 정의
  • Stage
    • 선행 연구들과 유사하게 동일한 처리 블럭을 순차적으로 연결한 구조를 뜻한다.
  • Part 또는 Keypoint
    • 추정하고자 하는 사람의 관절
    • 전체 part 개수는 J
  • Part confidence map (선행 연구에서는 belief map 이라고 표현하였다)
    • 이미지 내 각 픽셀이 part 위치일 확률 (입력 이미지 크기와 동일 크기의 map)
    • 각 part 마다 1개 (이미지 크기와 동일) 씩 할당 (아래 그림 (b) 참고)
    • 각 ground truth part position 을 정점으로 하는 gaussian 형태의 확률 분포
  • Part affinity field



대략적인 기술 구조는 아래와 같다

  • Step1: Confidence map 추정
    • 영상을 입력받아서 각 관절 (part) 위치에서 높은 확률 값을 가지는 확률 맵
    • 확률 맵의 크기는 입력 영상 크기와 동일
    • 각 part 당 1개 map 할당 (상기 그림 (b))
  • Step 2: Part affinity fields 추정
    • 서로 연결되는 두 개 part 의 연결선 상에 있는 point 에 part 와 part 를 연결하는 vector field 할당 (상기 그림 (c))
    • 할당된 vector field 는 특정 part 에서 특정 part 로 향하는 방향성 정보 및 크기 정보를 가지고 있음
  • Step 3: Bipartite matching
    • 서로 연결되는 두 개의 part-pair 를 대상으로 두 개의 part-pair 가 동일한 사람에게 속한 것인지를 추정 (상기 그림 (d))

[ Network Architecture ]


네트워크 구조는 아래 그림과 같다. 2 개의 네트워크가 각각 confidence map 과 affinity field 를 출력하고, 이러한 네트워크가 'cascaded stage' 구조를 이루어서 stage 가 진행될 수록 보다 정교한 map & field 를 추정해 나가게 된다. 첫 번째 네트워크는 confidence map S 를 추정하고 (아래 그림의 Brach 1), 두 번째 네트워크는 affinity field L 을 추정한다 (아래 그림의 Branch 2). 두 개의 네트워크가 병렬로 연결되어 하나의 stage 를 구성한다. Stage 를 추가할 때는 confidence map 및 affinity field 정보를 vector addition 하여, 그 결과를 Branch 1, 2 모두에 전달한다. 즉, confidence map 추정시, 이전 stage 의 confidence map 정보 뿐 아니라, affinity filed 까지 참조하여 현재 stage 의 confidence map 을 추정한다. Affinity field 추정시에도 confidence map 정보를 활용한다. 각 네트워크는 3x3 conv. layer 3개와 1x1 conv. layer 2 개로 구성되어 있다. Stage 1 개만 본다면 receptive field size 가 그리 크지 않으나, 이러한 stage 가 순차적으로 연결되어 있으므로, 뒤 쪽 stage 로 갈 수록 receptive field size 가 커지므로, 'spatial context' 를 충분히 활용할 수 있다.




[ Confidence Map ]

선행 연구들과 동일하게 confidence map (S) 는 part position 을 정점으로 하는 Gaussian model 을 채용하였다. j 는 part index, k 는 person index, p 는 이미지 내의 각 픽셀 위치이다. 동일 픽셀 위치에 여러 사람의 part confidence 가 중첩되어 있을 경우, 가장 큰 score 의 person/part 를 ground truth 로 선정한다.





[ Part Affinity Field ]

한 이미지 내에 여러 사람이 존재할 경우 각 part 조합이 다른 사람의 part 와 연결될 수 있다 (아래 그림 (a) 참고). 이러한 것을 방지하기 위하여, 중간 part 를 하나 더 삽입하여 part 개수를 늘리고 (아래 그림 (b) 의 노란색 part) 이웃할 수 없는 part 조합을 제거함으로써 검색 대상 part 조합의 수를 줄일 수 있으나, 여전히 서로 다른 사람에게 속한 part 들 간의 조합이 가능하다 (아래 그림 (b) 녹색 선). Affinity field 를 추정하여 part 간을 연결하는 방법으로 동일한 사람에게 속한 part 간의 상관관계를 명시적으로 네트워크 손실 함수에 반영할 수 있다 (아래 그림 (c) 참조).


Part affinity field 는 두 개의 part 를 연결하는 vector 들의 집합체로써, limb 위의 모든 픽셀 포인트에 할당되어 서로 이웃한 part 들이 동일한 사람에게 속해있음을 네트워크에 명시적으로 알려준다. 예를 들어 xj1,k 와 xj2,k 가 person k, limb c 의 part j1 과 j2 의 ground truth position 이라고 할 때, 만약 포인트 p 가 limb c 위에 있다면 affinity vector Lc,k(p)는 j1 -> j2 를 연결하는 unit vector 이며, 그 외 포인트는 zero vector 가 할당된다 (아래 수식 참고).



Limb 은 line 으로 구성되는 것이 아니므로, 실제로는 part j1 과 part j2 사이를 연결하는 라인 선 상의 포인트들에만 affinity vector 가 할당하는 것이 아니라, 라인을 둘러싼 일정 영역의 직사각형에 affinity vector 를 할당한다. 즉 limb 의 두께와 길이를 고려하여 limb 영역을 직사각형으로 모델링하고, 직사각형에 포함되는 모든 포인트들에 affinity vector 를 할당한다 (아래 그림 및 수식 참고).




위 수식에서 v 는 는 v 와 직각을 이루는 unit vector 이고, lc,k 는 limb length, sigmal 은 limb 두께를 나타낸다 (sigma 문자 입력 방법을 찾지 못해서 그냥 sigma 로 쓴다.). 위 수식을 만족하는 모든 포인트 p 에 affinity vector v 를 할당한다.



한 포인트에 여러 사람의 limb 이 겹쳐서 존재할 경우, 위 수식과 같이 모든 사람의 affinity vector 평균을 그 포인트의 ground truth affinity vector 로 할당한다. 위 수식에서 nc(p) 는 포인트 p 에 affinity vector 가 할당된 사람 수 이다.  * 표시는 ground truth 를 나타낸다.

Inferencing 시에는, 검출된 두 개의 후보 part position (dj1 및 dj2) 을 연결하는 라인 상의 모든 포인트들의 affinity vector 추정치를 더한 벡터가 두 후보 part position 이 동일한 사람에게 속하는 정도를 나타내는 'association' 지표가 된다 (아래 수식 참조). 조합 가능한 두 개의 후보 part position 들에 대해 이와 같은 association 지표를 구하고, 가장 높은 지표를 가진 두 개의 part position 조합을 최종적으로 한 사람의 limb 을 구성하는 part position pair 로 선정한다.



Loss Function ]

아래 수식과 같이 confidence map loss (fS)와 affinity field loss (fL) 의 조합으로 전체 손실 함수를 정의한다. t 는 state index 이며, T 는 전체 stage 개수, J 는 전체 part 종류 개수, C 는 전체 affinity field 종류 개수, p 는 이미지 내의 위치를 나타내는 좌표, W(p) 는 binary mask (p 위치에 confidence  및 affinity field annotation 이 있으면 1, 없으면 0), Sj 는 confidence map score, Lc 는 affinity field 이며, * 표기가 된 S 및 L 은 ground truth 를 나타낸다.



Bipartite Matching ]

한 이미지 내에 여러 사람이 있을 경우, 무수히 많은 part 간의 조합이 가능하게 된다 (물론, affinity field 로 동일한 사람에게 속한 part 간의 연결을 손실 함수에 반영하고 있지만, part link 에 대한 명시적 모델이 네트워크에 직접 반영되어 있지는 않다). 먼저, 연결 가능한 두 쌍의 part-pair 연결을 먼저 추정한 후, 이들 part-pair 들 간의 연결을 추정하는 bipartite matching 을 적용하면, 조합 가능한 경우의 수를 크게 줄일 수 있다. 예를 들어, 손목 part 는 팔꿈치 part 와는 연결이 가능하나, 어깨 part 와는 연결이 불가능하다.

Part 하나는 연관된 다른 part 들과 연결되며, 전체 조합을 검색 (아래 그림 (c), optimal) 또는 bi-part 로 분리하여 greedy algorithm 으로 검색 (아래 그림 (d), sub-optimal) 할 수 있다. 아래 그림 (d) 방식의 검색 시, part candidate 사이의 PAF score 에 기반하여 bipartite candidate matching 적용한다 (Hungarian graph search algorithm 을 채용하였다). Bipartite matching 방식을 적용하여도 full-search 방식과 유사한 성능을 보인다. 



실험 결과 ]

상기 Figure 6 (d) 는 두 가지 방식으로 학습이 가능하다. 첫째는 모든 part 가 연결된 상태에서 모든 part affinity field 를 동시에 학습하는 것이다. 둘째는 두 개 part 에 해당하는 하나의 affinity field 를 독립적으로 학습하는 것이다 (이 방식의 학습을 아래 성능 테이블에서 "Fig.6d (sep)" 이라고 표기하였다). 두번째 학습 방법은 한번에 학습해야 할 part association channel 수가 적으므로 학습이 용이한 장점이 있다 (실제 성능도 조금 더 좋다). 테스트 DB 는 아래 두 가지 DB 를 사용하였다. 몇 가지 다른 기술들과 성능비교 하였는데, 본 연구 방식이 가장 우수하다고 한다 (아래 성능 테이블 참고).
  • MPII DB
  • COCO 2016 DB
    • 100K person instances, 1 million total keypoints
    • “test-challenge”, “test-dev” and “test-standard” roughly 20K images each





본 연구에서 가장 의미있는 부분은 연산량일 듯 하다. 일반적으로 pose estimation 은 anchor box 기반의 object detection 으로 사람 영역을 먼저 검출하고, 사람 영역 내에서 다시 part 위치를 추정하는 구조로 이루어져 있다 (Top-down approach). 반면, 본 연구는 person detection 을 하지 않고, part candidate 및 affinity field 를 추정하여 한 번에 pose estimation 을 수행한다 (Bottom-up approach). 아래 그림 (d) 에 top-down approach 와 본 연구 방식의 연산량을 비교하였다. 가로축이 사람 수 이고, 세로축이 연산량이다. 그래프에서 보는 바와 같이 top-down approach 는 사람 수가 늘어나면, 그에 비례하여 연산량이 늘어날 수 밖에 없다. 반면, 본 연구는 한번의 CNN 처리 만으로 모든 사람의 pose estimation 을 수행하므로 연산량이 거의 늘어나지 않는다. 아래 그림 (d) 에서 붉은색 선이 bottom-up approach 연산량이다. Bottom-up approach 연산량은 크게 CNN process (아래 그림 (d) 노란색 선) 및 part parsing process (아래 그램 (d) 보라색 선) 로 나누어 진다.



Comments

Popular posts from this blog

EAST: an efficient and accurate scene text detector (CVPR 2017)

Towards Accurate Multi-person Pose Estimation in the Wild (CVPR 2017)