논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Hand Keypoint Detection in Single Images using Multiview Bootstrapping

1. Introduction

얼굴이나 몸과는 다르게 손의 키포인트을 다루는 큰 데이터셋은 없는 편입니다. 손의 경우 가려지는 경우가 많을 뿐더러 그러한 경우 어떻게 키포인트를 표시해야 하는지 결정하는 것 조차 어렵습니다.

이 논문에서는 여러 카메라가 설치된 환경을 이용해서 키포인트 검출기의 성능을 높이는 방법을 제안합니다. 이 방법은 손이 상당한 가려짐이 있더라도 가려지지 않은 시점이 존재한다는 점을 이용하여 성능향상을 이루었습니다. 먼저 기존의 검출기를 이용하여 잘 나온 이미지에 대해서 키포인트를 검출한 뒤, 이를 3D triangulation을 통해 리프로젝션하면 새로운 트레이닝 셋을 만들 수 있습니다. 이 방법을 반복하여 검출기의 성능을 계속적으로 향상시킬 수 있습니다. 또한 이 방법으로 표시하기 힘든 조인트의 위치를 레이블링 할 수 있습니다.

2. Related Work

3. Multiview Bootstrapped Training

크롭된 이미지 $I \in \mathbb{R}^{w \times h \times 3}$을 입력 받아 $P$개의 키포인트 $\mathbf{x}_p \in \mathbb{R}^2$와 그에 대응하는 신뢰도 $c_p$로 매핑하는 디텍터를 $d(\cdot)$라고 정의합시다. 이 디텍터는 이미지와 그에 해당하는 키포인트 쌍 $(\mathbf{I}^f, \{ \mathbf{y}_p^f \}) $으로 학습되었습니다. 여기서 $f$는 특정 이미지 프레임을 의미합니다. $\mathcal{N}_0$개 쌍을 갖는 초기 트레이닝 셋 $\mathcal{T}_0 := \{ (\mathbf{I}^f, \{ \mathbf{y}_p^f \} ) \text{for} f \in [1 \cdots N_0 ]\}$에서 학습된 디텍터를 $d_0$이라고 합시다.

이제 초기 디텍터 $d_0$와 레이블링이 되지 않은 여러 시점에서 촬영된 데이터셋이 주어졌을 경우, 우리의 목적은 레이블링된 이미지 $\mathcal{T}_1$을 생성하고 이를 이용하여 향상된 디텍터 $d_1$을 학습하는 것입니다. 여기서 중요한 점은 손이 촬영된 시점에 따라 디텍션이 더 쉬운 시점이 존재한다는 것입니다. 최소한 두개의 시점에서 키포인트를 정확하게 찾을 수 있었다면, 두 이미지를 이용하여 3D 위치를 계산할 수 있고 이를 이용하여 디텍션에 실패한 이미지에서의 2D 위치를 생성할 수 있습니다.

전체 알고리즘은 3개의 단계로 나눌 수 있습니다. (1) 모든 카메라 뷰의 매 프레임에 대하여 현재 디텍터를 실행시키고, triangulation을 수행합니다. (2) 여러 프레임 셋들 중에서 정확하게 triangulation된 샘플들을 골라내기 위해 그 점수에 따라 트레임셋을 정렬합니다. (3) N개의 가장 좋은 프레임들을 사용해서 triangulation된 점들을 다른 시점으로 프로젝션한 뒤, 그 이미지를 이용하여 새로운 디텍터를 학습시킵니다.

3.1. Triangulating Keypoints from Weak Detections

$v \in [1 \cdots V]$개의 시점에서 어떤 프레임 $f$에서 구해진 키포인트 $p$의 좌표와 신뢰도를 $(\mathbf{x}_p^v, c_p^v)$라고 합시다. 정확한 triangulation을 하기 위하여 $\lambda$ 이상의 신뢰도를 가지는 점들을 이용하여 RANSAC을 사용하였습니다. RANSAC에서는 리프로젝션 오차가 $\sigma=4$이하인 것을 인라이어로 사용하였습니다. 한 키포인트 $p$에 최종적으로 triangulation 위치를 얻기 위해서 리프로젝션 에러를 다음과 같이 정의하였습니다.

$$ \mathbf{X}_p^f = \underset{\mathbf{X}}{\operatorname{argmin}} \sum_{v \in \mathcal{I}_p^f} ||\mathcal{P}_v(\mathbf{X}) - \mathbf{x}_p^v||_2^2$$

여기서 $\mathcal{I}_p^f$는 인라이어셋을 나타내며 $\mathbf{X}_p^f \in \mathbb{R}^3$은 프레임 $f$에서 3D triangulation된 키포인트 $p$를 나타냅니다. $\mathcal{P}_v(\mathbf{X}) \in \mathbb{R}^2$는 3D 좌표 $\mathbf{X}$가 시점 $v$로 프로젝션된 점을 나타냅니다. 카메라가 캘리브레이션되었을 경우, 3D 좌표는 어떤 시점으로라도 리프로젝션될 수 있고, 이를 이용하여 새로운 트레이닝 레이블로 사용될 수 있습니다.

손에 대해서 정확도를 향상시키기 위해서 각 손가락이 가지는 4개의 점을 동시에 이용, 에러를 평균하여 RANSAC에 사용하였습니다.

3.2. Scoring and Sorting Triangulated Frames

학습에 사용될 데이터는 오류가 없어야 하기 때문에 triangulation된 결과 중에서도 괜찮은 것들만 골라서 사용하고자 합니다. 비디오 입력에서의 연속된 프레임들은 서로 연관성이 많기 때문에 $W=15, \text{ or } 30$의 크기를 가지는 모든 윈도우 내에서 가장 좋은 프레임을 골라냈습니다. 이 때 기준은 해당 프레임의 모든 시점의 키포인트들의 신뢰도를 모두 더한 것입니다.

$$ \text{score}(\{ \mathbf{X}_p^f \}) = \sum_{p \in [1 \cdots P]} \sum_{v \in \mathcal{I}_p^f} c_p^v $$

이제 골라낸 프레임들을 그들의 점수들로 정렬시키고, $F'$개의 프레임들을 골라냅니다.이렇게 뽑아진 프레임들을 수작업으로 한 번 더 검증 과정을 거쳤습니다. 최대한 시간을 덜 쓰도록 하기 위해 다음의 기준으로 먼저 프레임을 제거하고 검증 과정을 시작하였습니다. (1) 평균 인라이어 수, (2) 평균 신뢰도, (3) 두 연속 프레임 사이의 포인트 이동 속도의 중앙 값, (4) 관절 길이, (5) camera ray와 바디 조인트가 교차하여 가려짐이 발생하였다고 판단될 경우, (6) 최소한 3개 이상의 인라이어가 있어야 함.

3.3. Retraining with N-best Reprojections

N개의 베스트 프레임을 이용하여 새로운 $i+1$ 디텍터를 학습시키는데 이용합니다.

4. Detection Architecture

디텍터 $d_i$는 Convolutional Pose Machines (CPMs)[^29]을 수정하여 이용하였습니다.

Keypoint Detection via Confidence Maps. 기존의 CPMs[^29]과 다르게 초기화 네트워크를 VGG-19의 conv4_4까지를 사용하였고, 여기에 2개의 128채널 컨볼루션 레이어를 추가하였습니다. 피쳐 맵은 입력 이미지를 8로 나눈 크기를 갖도록 하였습니다. 6개의 스테이지를 사용하였고, 최종 출력을 bicubic resampling을 이용하여 원래의 입력 크기로 만든 뒤, 가장 큰 신뢰도를 가지는 점을 키포인트로 사용하였습니다. 로스 함수 또한 $L_2$ 로스를 사용하고 화면에서 나타나지 않은 키포인트는 가중치를 0으로 만들어 주었습니다.

Hand Bounding Box Detection. 29[^29]와 41의 알고리즘을 그대로 활용하고 손목과 팔꿈치 위치를 이용해 만들어지는 벡터 길이의 0.15배 만큼을 손목 부분에서 연장하여 손 위치로 사용하였습니다.

5. When does Multiview Bootstrapping Work?

여기에서는 multivew bootstrapping이 작동하려면 얼마나 많은 카메라 시점이 있어야 하는지, 반대로 초기 디텍터가 얼마나 정확해야 multiview bootstrapping이 작동하는지를 살펴봅니다.

먼저 디텍터 $d_0$의 품질을 Probability of Correct Keypoint (PCK)로 표현합니다. 이것은 실제 위치와의 오차가 $\sigma$ 이내에 들어올 확률을 나타내며, 다음과 같이 계산됩니다.

$$ \text{PCK}_\sigma^p(d_0) := \frac{1}{|\mathcal{T}|} \sum_\mathcal{T} \delta(||\mathbf{x}_p^f - \mathbf{y}_p^f ||_2 \lt \sigma) $$

여기서 $\mathbf{y}$는 추정된 키포인트 좌표이며, $\delta$는 인디케이터 함수를 나타냅니다.

카메라 환경과 디텍터 품질을 변화시켜가면서 triangulation 에러에 관한 3가지 결과를 얻을 수 있었습니다.

Result 1. V개 뷰의 2D 포인트들 중 최소한 n개의 인라이어가 있을 경우 triangulation 실패가 일어날 확률은 $\text{FT}_n \approxeq \text{Pr}(Y \geq 1)$입니다. 여기서 $Y \sim B \big( \begin{pmatrix} V \\ 2\end{pmatrix}, q_n \big)$이고, $q_n$은 올바르지 않은 triangulation으로 n개 인라이어가 찾아질 확률입니다.

Result 2. 최소 n개 인라이어가 있는 V 시점에서의 True/false positive rate는 다음과 같습니다.

$$ \text{TP}_p(d) = \text{Pr}(Z \geq n)$$

$$ FP_p(D) = (1 - \text{TP}_p(d)) \cdot \text{FT}_n$$

$$Z \sim B(V, PCK_\sigma^p (d))$$

Result 3. P개 키포인트를 가지는 복잡한 객체인 경우, 모든 키포인트가 정확하고, 모든 키포인트의 $\text{PCK}_\sigma^p(d)$가 같다고 가정한다면 다음과 같습니다.

$$ \text{TP}(d) = \text{TP}_p(d)^P$$

$$ \text{FP}(d) = \sum_{k=1}^P \begin{pmatrix} P \\ k\end{pmatrix} \text{TP}_p(d)^{P -k} \text{FP}_p(d)^k$$

6. Evaluation

7. Discussion

 

 

 

 

1 Z. Cao, T. Simon, S.-E. Wei, and Y. Sheikh. Realtime multiperson 2d pose estimation using part affinity fields. In CVPR, 2017.


Add a Comment Trackback