본문 바로가기
Artificial Intelligence/Paper Reviews

[ 논문 리뷰 ] OpenPose: Realtime Multi-Person 2D PoseEstimation using Part Affinity Fields - 2

by SuperMemi 2022. 4. 10.
반응형

 

 

OpenPose: Realtime Multi-Person 2D PoseEstimation using Part Affinity Fields - 2

 

Key word : 2D human pose estimation, 2D foot keypoint estimation, real-time, multiple person, part affinity fields.

 

논문 출처 : CVPR_버전_2017, arxiv버전

 

[이전글] penPose: Realtime Multi-Person 2D PoseEstimation using Part Affinity Fields - 1

 

OpenPose: Realtime Multi-Person 2D PoseEstimation using Part Affinity Fields - 1

OpenPose: Realtime Multi-Person 2D PoseEstimation using Part Affinity Fields Key word : 2D human pose estimation, 2D foot keypoint estimation, real-time, multiple person, part affinity field..

supermemi.tistory.com

목차

  • 3. Part Affinity Fields for Part Association
  • 4. Network Architecture and Training Details

3. Part Affinity Fields for Part Association

 

앞선 글에서 Confidence Map 에 대해 소개했습니다. 

 

그 다음 단계는 무엇일까요?

 

바로, Body part 간의 연결(Limb)을 찾는 것입니다.

연결을 하기 위해서는 Body part 간 연관성을 수치화 하는 것이 필요합니다.

 

여기서, 이 논문의 핵심은 연관성 수치화를 위해 Part Affinity Fields 를 사용한다는 점입니다.

 


Part Affinity Fields (PAFs) 란 무엇인가?

 

PAFs 란 간단히 말해 두 신체 부위간 연결(limb) 방향(orientation)과 위치(location)를 동시에 나타내는 정보를 말합니다.

 

방향 (Orientation) : 2D vector 를 통해 표현

위치 (Location) : 2D pixel coordinate 를 통해 표현

 

좌 : 오른쪽 팔꿈치 - 오른쪽 손목 (limb) PAF, 우 : 확대

 

PAFs 는 앞선 글에서도 설명했지만 limb type 마다 한장씩 존재합니다.

 

주어진 예시는 오른쪽 팔꿈치와 오른쪽 손목을 연결한 limb PAF 입니다.

 

우측의 붉은 화살표를 보시면, 왜 2D vector 로 표현하는지 이해가 가실 겁니다.

각 픽셀마다 어떤 방향성을 나타내는지 담고 있습니다. 

 

 

다시 말하지만 모델은 모든 body part를 예측하는 네트워크 하나와 body part간의 연결을 표현하는 네트워크로 이루어져 있는데요.

 

방향성 정보가 없이 위치정보만으로 학습할 경우 최종적인 matching 단계에서 명확하지 않을 수 있습니다.

직관적으로 (c)처럼 위치와 방향 모두를 알려 준다면 정확한 matching 을 만들어 낼 수 있을 겁니다.

 

이러한 연결정보를 담고있는 PAFs 를 집합 이라고 정의합니다.

C 는 Limb type 의 총 개수를 의미합니다. 

소문자 c 는 특정한 limb type 을 나타냅니다. 

 

특정 limb에 속하는 각각의 pixel은 2D vector 로 표현합니다.

반대로, 특정 limb에 포함되지 않는 pixel은 0벡터 로 표현됩니다.

 

결론적으로, 특정 limb의 연관성을 표현하는 L_c  (w x h x 2) 의 크기를 가지는 것을 알 수 있습니다.


Pair wise association score using PAF

 

위에서도 말했듯 여러 사람이 존재할 때, 두 부위간 연결은 매우 다양하게 나타날 수 있습니다.

 

그렇다면 두 신체부위의 다양한 연결 중 어느것이 최선의 연결인지 어떻게 알 수 있을까요?

 

예측된 PAF정보를 이용하여 각 연결마다 Pair wise association 점수를 매길 수 있습니다.

이때, PAF의 위치와 방향성 정보가 이용됩니다.

 


Pair wise association score 계산하는 개념 (후보 연결이 하나일때)

 

오른쪽 팔꿈치와 오른쪽 손목간의 연결에 대한 연결성 점수를 매겨봅시다.

 

두개의 네트워크 중 하나의 네트워크가 결과로 신체 부위를 나타내는 Confidence Map을 예측했습니다.

이를 처리하여 오른쪽 팔꿈치 후보인 dj1오른쪽 손목 후보인 dj2탐지했다고 합시다.

 

dj2- dj1 : 파란색 화살표를 나타냅니다. 벡터로 표현됩니다. 

Unit vector : 길이가 1인 방향성을 나타내는 벡터로 변환합니다.

 

또 다른 네트워크에서는 신체 부위간 연결 정보를 담고있는 PAF prediction을 예측했습니다.

Lc(연두색) 로 나타냈습니다.

 

첫번째 그림에서 구한, 우리가 선택할 수 있는 후보 연결을 나타내는 Unit vector

두번째 그림에서 구한, 연결 정보를 나타내는 Lc의 화살표를 내적(dot product)합니다.

수식은 아래와 같습니다.

 

PAF 에서 화살표들은 두 신체 부위 사이의 각 픽셀마다 존재합니다.

모든 방향정보(화살표)들을 고려하기위해 다음과 같이 적분식을 이용합니다.

 

p(u)는 두 신체 부위 사이의 픽셀 위치를 의미합니다.

 

하지만 컴퓨터에서는 적분이 불가능 하므로

실제로는 sampling 과 summing uniformly-spaced values of u 를 이용하여

위의 적분식을 근사하게 됩니다.


[참고] 왜 내적(dot product)일까요??

 

내적의 특성 때문입니다.

 

두 벡터를 내적했을때

 

0의 값을 가지면 두 벡터가 orthogonal 하다(직교한다)는 특성을 이용하는 것인데요. 

반대로 값이 커질 수록 같은 방향을 바라보고 있다고 생각할 수 있습니다.

 


그런데 왜 두 body part 간의 연결성만 고려할까요?

 

모든 신체부위간 연결성을 한번에 표현하면 더 쉽지 않을까요?

왜 논문에서는 두 신체부위간 연결성만 고려하는 걸까요??

 

바로 연산량 때문입니다.

 

 

모든 신체부위간 연결성동시에 고려하게 되면 (b)처럼 엄청나게 많은 수의 limb가 만들어지게 됩니다. 

이를 'K-partite graph'라고 생각할 수 있습니다.

 

수많은 연결중 최선의 연결이 무엇인지 찾아내는 것Pose Estimation의 목적입니다. 

 

그러나 'K-dimensional matching problem' NP-HARD 문제로 알려져있죠.

즉, 신체 부위를 많이 검출하게 될수록, 훨씬 더 겁나게 많은 연산이 필요하게 됩니다. Multi-person Pose Estimation 에서는 현실적으로 사용할 수 없습니다.

 

 

그래서 논문에서 제안하는 것이 "Maximum weight bipartite graph matching" 방법입니다.

 

단순하게 두 신체 부위간 연결에서 최선의 연결을 찾아내겠다는 의미입니다. 

결론적으로, 이렇게 찾아낸 두 신체 부위간 최선의 결과들을 이어 붙이면 하나의 사람 pose estimation이 됩니다.

 

 


"Maximum weight bipartite graph matching"

 

이 문제를 Brute Force 방식으로 해결할 경우 \(O(n!)\) 시간복잡도가 요소되기 때문에 현실적이지 않습니다.

 

대신, Hungarian Maximum Matching Algorithm (Kuhn-Munkres algorithm)을 활용하면 \(O(|V|^3)\) 시간복잡도로 해결할 수 있습니다!

 

여기서 V는 두 신체 부위간 연결(limb) 후보의 수라고 할 수 있습니다.

 

 

[알고리즘] Hungarian Maximum Matching Algorithm (Kuhn-Munkres algorithm)

Hungarian Maximum Matching Algorithm 에 대하여 알아보자 이 글을 참고하여 작성하였습니다. Hungarian Maximum Matching Algorithm | Brilliant Math & Science Wiki The Hungarian matching algorithm, als..

supermemi.tistory.com

 


Two Relaxations specialized to our domain

 

여러명에 대한 full body pose를 찾는 것은 K-dimensional matching 문제이기 때문에 NP-Hard 입니다.

이를 완화하기 위해 두 가지 제약을 사용합니다. (Human pose estimation의 사전지식을 활용)

 

  1. 최소한의 후보 edges로 줄입니다.(spanning tree skeleton of human pose사용)
  2. 방금전에 말한 Bipartite graph matching 을 사용하여 독립적으로 두 부위간의 Best 연결을 찾고, full body poses로 연결합니다.

 

기존의 연구들은 root component에서 시작하여 접근한 반면

 

이 알고리즘은 신체 부위간 연결을 PAF score 기준으로 독립적인 분류를 진행합니다.

full body poses

 

 


Two Relaxations specialized to our domain

 

 

Fig 7.(a)의 예시를 보면 머리와 몸이 분명 다른 사람인데 연결되어 있음을 알 수 있습니다.

 

이러한 문제를 해결하기 위해 저자는 Redundant PAF connection을 제안합니다.

 

Redundant PAF connection 는 추가적인 PAF Connection으로서 귀-어깨 또는 어깨-손목 등의 멀리 떨어진 연결에 대한 PAF 점수를 계산합니다.

 

Redundant PAF 방식으로 Fig 7(a) 의 PAF score를 계산해보면, Redundand PAF score에서는 낮은 점수가 기록됩니다.

 

결과적으로, 전체 PAF 점수가 낮아지게 되므로, 잘못된 연결이 무시되고 다른 연결이 선택됩니다.

 

Fig 7.(b)의 예시를 보면 머리와 몸이 잘 할당 되었음을 알 수 있습니다.

 

 

Fully connected graph를 이용하는 것보다 tree structure 에서 진행하는 것이 훨씬 효율적이라고 합니다!


Ground Truth PAFs

 

Confidence Map 과 마찬가지로, PAFs를 학습시키기 위해서 body part 좌표로(x)만 이루어진 Ground Truth 를 Ground Truth PAFs로 변형하는 과정이 필요합니다.

 

여기서도 벡터의 내적 (Dot product)를 활용합니다.

처음에는 각 사람객체(k)마다 각 limb(c)별로 PAF를 만들어 줍니다.

 

 

두 신체부위의 좌표값을 활용하여 PAF 영역의 길이와 너비를 제한합니다.

그리고 limb의 제한 된 영역 안에 존재하는 포인트마다 2D 벡터를 만들어 줍니다!

 

 

각 사람 객체마다 뽑았던 정보를 각 부위별로 합쳐줍니다.


4. Network Architecture and Training Details

 

네트워크 학습 과정에 대한 설명입니다.

CVPR 2017에 나온 OpenPose의 모델 학습과정과 다릅니다.

이는 2018에 개선된 버전입니다.

 

2017년도 모델은 PAFs와 Confidence map을 만드는 네트워크를 동시에 학습시켰지만,

2018년도 모델은 먼저 PAFs를 학습시킨 후 이를 활용하여 Confidence map을 학습시킵니다.

 

이럴경우 stage 마다 연산량이 줄고, 좋은 Affinity field prediction을 활용하여 confidence map result가 향상된다는 장점이 있습니다.

 

1. input image를 VGG 네트워크(First 100 layers of VGG-19 and finde-tuned)에 통과신 후, Feature map \(F\) 를 구합니다. 

이렇게 구해진 Feature map \(F\)를 네트워크 \(\phi^t, \rho^t\) Branch 의 입력값으로 사용합니다.

 

2. \(\phi^t \) network(for part affinity fields(PAFs), 파란색 영역)

[Stage t = 1]

Input : Feature map \(F\)

Output : PAFs(\(L^{1}\))

 

[Stage 2 <= t <= \(T_P\)]

Input : Feature map \(F\), \(L^{t-1}\)

만들어진 PAFs(\(L^{t-1}\))와 Feature map \(F\)를 concatenate하여 다시 개선된 \(\phi^t \) network의 input으로 사용합니다.

 

Output : PAFs(\(L^{t}\))

 

Stage t = \(T_P\) 까지 반복적으로 진행합니다.

 

[Intermediate supervision]

각 stage마다 loss를 계산하여 네트워크를 개선시킵니다.

 

\(W(p)\)는 binary mask로 annotation이 없는 경우 모두 0으로 만들어 줍니다.

데이터 셋마다 annotation이 제대로 되지 않은 경우가 있습니다.

이 경우에 데이터 셋이 잘못 된 것을, 모델이 penalize 받지 않도록 하기 위함 입니다.

 

 

이러한 intermediate supervision을 통해서 vanishing gradient 문제를 개선했습니다.

 

stage마다 개선되는 PAFs generating network \(\phi\)

 

3. \(\rho^t \) network(for detection confidence map, 붉은색 영역)

PAFs의 iterative learning이 끝난 후 시작합니다.

[Stage t = \(T_P\)]

Input : Feature map \(F\), most updated PAF prediction(\(L^{T_P}\))

Output : Confidence Map(\(S^{T_P}\))

 

[Stage \(T_P\)+1 <= t <=  \(T_P\)+\(T_C\)]

Input : Feature map \(F\), most updated PAF prediction(\(L^{T_P}\)), Confidence Map(\(S^{t-1}\))

Feature map \(F\)과 most updated PAF prediction(\(L^{T_P}\))과 만들어진 Confidence Map(\(S^{t-1}\))를 concatenate하여 다시 개선된 \(\rho^t \) network의 input으로 사용합니다.

 

Output : Confidence Map(\(S^{t}\))

Stage \(T_P+T_C\) 까지 반복적으로 진행합니다.

 

[Intermediate supervision]

각 stage마다 loss를 계산하여 네트워크를 개선시킵니다.

 

최종적으로, 두 네트워크 브렌치 \(\phi\)(for PAFs),\(\rho\)(for Confidence Map)을 통해 PAFs와 Confidence Maps을 구하고 앞에서 다룬 Hungarian Algorithm을 활용하여 Bipartite Matching Problem을 해결함으로써 Pose Estimation이 진행됩니다.

 

 

반응형