논문

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

Using a single RGB frame for real time 3D hand pose estimation in the wild

1. Introduction

이 연구에서는 기존의 RGB 카메라로부터 실시간으로 손의 전체 3D 상태를 알아내는 문제를 풀고자 합니다. 캘리브레이션 된 단안 컬러 카메라로부터 얻어진 손 영상에서 21개의 키 포인트들의 3D 위치를 찾는 것입니다.

이 문제를 풀기 어렵게 만드는 요인이 여러가지 있습니다. 사람의 손은 변화가 심하기 때문에 20개가 넘는 관절의 파라미터를 유추해야 합니다. 또한 손이 매우 빠르게 움직일 경우 트래킹을 놓칠 위험이 있습니다. 또한 텍스쳐가 적고 비슷하게 생겼기에 각 부분을 구분하는 것이 어렵습니다. 마지막으로 시점에 따라 self occlusion의 문제가 생기기 쉽습니다.

이러한 어려움을 해결하기 위해 이 연구에서는 다음과 같은 방법을 시도하였습니다. 최신의 딥러닝 네트워크를 통해 2D 조인트의 위치를 얻어내고, 2D 조인트를 손의 생성적 모델(generative model)에 피팅하였습니다.

2. Related Work

Hand detection은 391의 연구를 이용하였습니다. 2D 키포인트를 찾는 방법은 472의 연구를 이용하였습니다.

3. 3D hand pose from a single RGB frame

알고리즘을 파이프라인은 다음과 같습니다.

먼저 컬러 이미지가 입력되면, 그 안에서 손을 찾습니다. 이를 위해서 CNN 기반의 객체 검출기를 사용하였습니다. 이미지의 각 손의 크롭 이미지에 대해서 CNN을 이용해 2D 조인트를 검출합니다. 마지막으로 2D 조인트들을 3D로 끌어올리게 됩니다.

3.1. Hand detector

손의 검출을 위해서 YOLOv21를 이용하였습니다. 하지만 YOLOv2의 경우 전체 맥락을 이용하지 않고 지역 정보만 이용해서 검출하게 되므로 오른손과 왼손을 구분할 수는 없었습니다. 이를 위해 YOLO가 머리와 손 두개의 클래스를 찾도록 하였습니다. 이렇게 몸의 추가적인 정보를 이용하여 왼손과 오른손의 차이를 구분하는데 도움이 되었습니다.

3.2. 2D joints estimation

여기서는 472의 방법을 이용하였습니다. 손 주변으로 잘려진 이미지를 2D 키포인트 검출기에 넣었습니다. 검출기는 왼쪽 손에 대해서만 학습되어있기 때문에 오른손은 Y 축에 대해 뒤집어서 입력하도록 하였습니다.

3.3. From 2D joints to 3D pose

3.3.1 Hand model

손 모델은 343와 비슷하게 27개의 파라미터로 26개의 DoF를 가지도록 하였습니다. 회전과 이동에 대해서는 6 DoF를 7개의 파라미터로 표현하도록 하였습니다.

3.3.2 Single camera view

27개의 파라미터에 대하여 자세 $P$와 kinematic 함수 $F$가 주어지면 키포인트의 월드 좌표계의 3D 위치 $K^p = F(P)$를 계산합니다. 카메라 뷰 행렬 $C_v$와 카메라 프로젝션 행렬 $C_p$를 적용하면 3D 키포인트가 이미지 평면으로 프로젝션된 좌표 $M_i^p = (x_i, y_i)$로 변환할 수 있습니다.

$$ M_i^p = C_p \cdot C_v \cdot K_i^p \tag{1}$$

여기서는 한개의 카메라를 가정하기 때문에 같은 행렬을 사용할 수 있으며, $C_v$는 단위행렬을 사용하였습니다.

검출된 21개의 2D 조인트의 위치를 $J_i = (u_i, v_i, p_i), i \in [1, 21]$라고 표현하고자 합니다. $u_i, v_i$는 2D 좌표계를, $p_i$는 네트워크가 계산한 각 조인트의 신뢰도입니다. 잘못된 연산을 막기 위해서 0.1 이하의 신뢰도를 갖는 점들은 사용하지 않았습니다. 자세 $P$가 주어졌을 때, 찾아진 2D 조인트 위치와 계산된 $M_i$과의 불일치$s(P, M_i, J_i)$를 계산할 수 있습니다.

$$ s(P, M_i, J_i) = (p_i^3 \cdot (x_i - u_i))^2 + (p_i^3 \cdot (y_i - v_i))^2$$

총 불일치도 $S(P, M, J)$는 모든 키포인트들의 불일치도의 합으로 계산합니다.

$$ S(P, M, J) = \sum_{i=0}^21 s(P, M_i, J_i)$$

그리고 이 식을 최소화하는 $P$를 찾으면 그것이 가장 적절한 3D 손의 자세로 생각할 수 있습니다.

$P^* = \underset{P}{\operatorname{argmin}} \{ S(P, M, J) \} \tag{2}$

이것을 구하기 위해 Levenberg-Marquardt를 이용하여 최적화를 하였습니다.

3.3.3 Stereo or multicamera input

이 파이프라인은 여러 카메라에서 들어오는 입력에서도 곧바로 적용할 수 있습니다. 기존의 식 (1)에서 $C_v$, $C_p$ 를 각 카메라에 대한 것으로 사용하면 됩니다. 최소화해야하는 식 (2) 또한 이제 각 카메라 $c$에 대한 모든 에러를 합한 것으로 바꿔주면 됩니다.

$$ S_{all}(P) = \sum_{c \in C} S(P_c, M_c, J) $$

3.4.Implementation details

이 방법은 각 카메라의 내부 변수를 알고 있다는 가정을 하고 있습니다. 또한 한 이미지에 별다른 초기화 과정 없어도 잘 동작할 수 있습니다. 하지만 이 방법을 비디오에 적용할 경우에는, 각 프레임마다 연속성이 있기 때문에 이전 프레임의 결과를 이용하면 초기화에 유용하게 사용할 수 있습니다.

4. Experiments

5. Summary

 

1 J. Redmon and A. Farhadi. Yolo9000: Better, faster, stronger. In Computer Vision and Pattern Recognition, 2017. CVPR 2017. IEEE Conference on, 2017.
2 T. Simon, H. Joo, I. Matthews, and Y. Sheikh. Hand keypoint detection in single images using multiview bootstrapping. In CVPR, 2017.
3 I. Oikonomidis, N. Kyriazis, and A. A. Argyros. Efficient model-based 3d tracking of hand articulations using kinect. In BMVC, 2011.


Add a Comment Trackback