HyperML

[CVPR17]Realtime Multi-Person 2D Pose Estimation using PAF 본문

논문읽기

[CVPR17]Realtime Multi-Person 2D Pose Estimation using PAF

곰돌이만세 2018. 8. 20. 22:39

 

 

 

* 인트로덕션을 읽어보면 사람들은 크게 두가지 흐름으로 pose estimation 문제에 접근하는 것을 볼 수 있다. 하나는 top-down 방식, 나머지는 bottom-up 방식.
* top-down 방식은 먼저 body detector로 검출한 범위내에서 part와 연결을 찾는 것이다.
* bottom-up 방식은 이미지내에 여러사람들의 part를 다 찾고 타당한 연결을 찾는 식이다.
* 본 논문은 bottom-up 방식을 취한다

* 네트워크는 조금 특이한데 기본적으로 종 방향으로는 part를 찾는 부분과 affinity field를 찾는 부분을 병렬로 구성하여 출력을 concat한다
* 횡방향으로는 앞부분에 VGG19 의 10layer만 써서 pretrain 된 것을 위치시키고, 뒷부분에 7x7이라는 다소 커보이는 conv 필터들을 배치시킨다.
* 더 특이한 것은 뒷부분 네트웍을 iterative하게 여러번(논문에선 6번 인듯) 돌려서 refine 하는 과정이다. 실제로 실험결과는 반복했을 때 결과가 좋아짐을 지적한다. 저자중 한사람인 yaser 교수의 다른 논문에도 이 과정이 있다. (CPM : Convolutional Pose Machine) 가져다 쓴듯.

 

* (그림) 빨간 타원을 집중해서 보면 stage(반복)가 올라 갈 수록 어떤 것은 분명해지고 어떤 것은 희미해지는 것이 보인다. 오른 손목을 표시한 것이고, 첫번째줄은 confidence map, 두번째줄은 PAFs
* vanishing gradient때문에 loss는 매 스테이지마다 측정해서 합산하는 식이다.

 

* confidence map 부터 보면, gt 정보를 포인트로 두는 것이 아니라 가우시안 커널을 씌우고 다시 max값을 max(envelope)만 따서 map을 구성한다고 되어 있다. average가 아니라 이 쪽이 좀 더 성능이 우수하다고 한다.

* PAF는 map 구성이 조금 복잡한데, 정해져있는 part 정보(xj1, xj2)를 기초로 field를 구성한다
* Confidence map은 직관적으로 map에다가 점을 찍어 주는 역할이라 이해하기 쉬운데, affinity field는 무엇일까
* affinity field는 연결을 표현한다. 
* 먼저 xj1 -> xj2로 가는 벡터 field를 만드는 데 길이가 xj1과 xj2 사이의 L2 norm, 폭이 σ이다. σ는 무엇인지 언급이 별로 없다.
* 아무튼 이 연결은 affinity field를 아래 식에 따라 정의한다

* 위 첫번째 식의 c는 limb의 종류이고 k는 사람번호, p는 필드위의 임의의 포인트이다.
* 두번째 식은 선적분을 위한 p의 이동을 나타낸다. dj1은 시작part의 위치, dj2는 끝part의 위치
* 세번째 식은 affinity field의 세기를 나타내며, dj1으로부터 dj2로 일정 간격으로 선적분을 수행한다

 

* 제목에도 나와 있듯 여러 사람이 등장하는 이미지의 pose를 estimation해주는 것이 이 논문의 주된 목표다.
* 여러사람에겐 동일한 관절이 이미지에 표시가 되고 연결의 가능성이 있는데 이것을 어떻게 해결할까.
* 기본 적으로 이러한 K-차원 매칭 문제는 NP-Hard라고 불린다고 한다.
* 위키에는 아래와 같이 되어 있으나, 여전히 이해하기 어렵다.

 

"NP-난해, NP-hard는 NP에 속하는 모든 판정 문제를 다항 시간에 다대일 환산할 수 있는 문제들의 집합이다. 다시 말하면, NP-난해는 적어도 모든 NP 문제만큼은 어려운 문제들의 집합이다."


* 말은 어려운데 여기서 제시한 것은 아래 두가지다. 
* 모든 연결을 찾지 않고 사람으로서 가능한 연결 + 2개씩만 연결
* greedy algorithm : 나중을 생각하지 않고 현재 상태에서 가장 좋은 것을 선택 --> 여러 연결 중에 가장 가까운 관절과 연결(로 이해함)

 

* 아래 그림을 보자

 

* (a)는 두사람의 왼팔 관절들을 node로 나타냈고 b,c,d는 갈수록 문제를 쪼개는 것을 알 수 있다.
(b)는 가능한 모든 연결을, (c)는 사람의 관절구조(spanning tree형태)를, (d)는 이웃한 관절끼리 두개씩의 매칭만을 나타낸다.

 

 

* 최종 목적은 각 관절c에 대한 max E를 찾는 것으로 좁혀진다
* z는 미리 정해진 값으로 가능한 관절 연결이면 1을 아니면 0을 나타낸다
* m, n은 각기 j1, j2의 후보 part를 나타낸다. affinity가 제대로 이어져 있고 m, n 매칭이 올바르다면 E가 max를 찍어야 한다.

* 여기까지 이해 됐다면 아래식은 당연히 이해가 될 것이다.

 

 

 

 

* Result에서는 두가지 benchmark를 사용했다. MPII와 COCO 2016 keypoints challenge dataset

* 이중 COCO2016에서 SOTA를 기록했다고 한다.

 

* 우선 MPII 성적부터 보면,

 

 

 

 

 

* 수행시간도 짧은 데 mAP 성능도 더 좋다. scale search는 이미지를 한장만 가지고 하는 게 아니라 크기가 다른 여러가지를 사용하여 성능을 측정하는 방법 (3 scale : x0.7, x1, x1.3) 
* 위 그림6에서 b,c,d가 나오는 데 각각 따로 성능 측정을 해서 표시를 했다.
* PCKh threshold가 나오고 그래프도 나오는 데 뭔지 모르겠다. 찾으려해도 잘 안된다.(아시는 분 댓글 좀), 아무튼 이게 거리가 늘면 성능이 점점 좋아지는 걸로 봐서는 커질 수록 기준을 헐렁하게 잡겠다는 느낌인데

 

 

 

* 아래는 COCO keypoints challenge 결과이다
* COCO에는 100K person 총 100만개의 keypoints가 들어있다. 

 

 

* 참고로 G-RMI는 구글팀이다. 대체로 2위권을 형성했다. 
* OKS는 또 뭔지 모를 지표인데 IoU와 같은 역할을 수행한다고 한다. OKS=0.5인경우 50% 이상 겹치면 없애버리는 것인가.

 

 

 

* 거의 끝이다. CPM은 동일한 교수(Yaser)의 구성원이 전에 pose estimation 발표한 논문이다(Convolutional Pose Machines) 아마도 top-down 방식으로 1개의 body만 pose estimation 가능한 알고리즘이다
* 아무튼 첫row는 이미 정답 bounding box에 있는 사람만 족족 골라서 이 CPM에 넣었더니 나오는 성능
* 두번째 row는 유명한 object detector인 SSD로 body를 검출하고 다시 CPM을 돌린 경우
* 세번째 row는 그냥 본 논문으로 돌린 경우 되겠다. 1row 2row 결과를 봐서는 ssd의 body detector 성능을 과신해선 안될 것 같은 생각이 든다. 본 실험은 top-down 방식의 메커니즘을 까는 목적인 듯

* 이 분야의 다른 논문들을 좀 읽어봐야 어떤 흐름속에서 바라봐야 할 지 알 수 있을 듯 하다.
* 비교대상이 되었던 DeepCut, DeeperCut은 언제 읽어볼 수 있을지...

 

Comments