논문

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

Augmented Skeleton Space Transfer for Depth-based Hand Pose Estimation

1. Introduction

신체의 자세를 추정하는 문제에서는 일반적으로 사람이 혼자 떨어져 있고, 이미지 위쪽을 향해 서 있으나, 손의 경우 사람보다 더 빈번하게 나타나고 self-occlusion을 발생시킬 뿐 아니라 카메라의 원근 효과와 같은 넓은 영역에서의 손의 canonical view를 정의하기가 간단하지 않습니다. Hand pose estimator (HPE)를 학습하기 위해 큰 데이터셋이 있으면 좋겠지만, 이러한 부분까지 모두 커버하기에는 한계가 있습니다.

데이터베이스를 손 자세, 모양, 카메라 퍼스펙티브를 시각화 해보면 비어있는 (missing) 영역이 존재합니다. 다시 말하면 이 부분은 데이터베이스로 커버가 되지 않는 영역입니다. 이 부분을 합성된 스켈레톤과 깊이 맵 쌍으로 채우고자 하는 것이 이 논문에서 다루는 내용입니다.

기존의 in-plane rotation, translation을 사용하는 단순한 방법들은 3D에서의 카메라 뷰가 변하는 것을 제대로 반영하지 못하여 비현실적인 이미지를 만들어내기 쉽습니다. 또한 각각을 직접 만들어내는 방법들은 비슷한 스켈레톤임에도 전혀 다른 뎁스 맵이 나오기도 합니다.

이 논문에서는 이러한 한계를 극복하기 위해 보지 못한 손 모양을 스켈레톤 공간에서 합성하고, 이를 깊이 맵 공간으로 transfer하고자 합니다. 이렇게 하면 직접 깊이 맵을 만들어내는 것보다 더 부드러운 변화를 가지도록 할 수 있으며, 비어있는 부분을 더 쉽게 채울 수 있게 됩니다. 스켈레톤과 깊이 맵의 transfer를 위해서, Hand pose generator (HPG)와 Hand pose discriminator (HPD)를 이용합니다. HPG는 스켈레톤을 입력바다 깊이 맵으로 transfer해주는 네트워크이고, HPD는 진짜 깊이 맵인지 만들어진 깊이 맵인지를 구분하는 역할을 담당합니다. 그리고 HPG, HPD, HPE를 모두 한꺼번에 학습할 것입니다.

논문의 기여는 다음과 같습니다. 1) HPG와 HPE를 조합하여 깊이 맵을 만들어 낼 수 잇는 하나의 프레임워크 사용; 2) 테스트 시기에 HPD와 HPG를 이용한 multiple pose를 이용하여 HPE를 정교하 할 수 있는 전략

2. Related work

3. Pose estimation by skeleton set augmentation

데이터베이스에서 깊이 맵과 그에 해당하는 자세 $P=\{ (\mathbf{x}_i, \mathbf{y}_i) \}_{i=1}^l \in X \times Y$가 주어졌을 때, 목표는 HPE $f^E: X \rightarrow Y$를 생성하는 것입니다. 단 HPE는 보지 않은 자세 $\mathbf{y}'$에 대해서도 깊이 맵 $\mathbf{x}'$를 복원해야 합니다. HPE를 학습시키기 위해 다음의 로스를 이용합니다.

$$ \mathcal{L}_E(f^E) = \sum_{i=1}^l ||f^E(\mathbf{x}_i) - \mathbf{y}_i||^2_2$$

간단한 방법은 CNN 구조1를 이용하는 것입니다. 96 x 96의 입력을 받아 21개 점에 대한 $(x, y, z)$ 좌표를 표현하는 63 차원의 자세 정보를 추정하도록 하였습니다.

하지만 기존의 데이터셋이 커버하는 범위가 완전하지 않으므로, 빈 부분을 데이터를 합성하여 사용하고자 합니다. 깊이 맵이 없는 스켈레톤 자세 $U = \{ \mathbf{z}_i \}_{i=1}^u$를 만들어낸 뒤에, 이를 이용하여 HPE를 학습시키는 것이 목적입니다. 이 과정을 위해 HPG가 스켈레톤 정보를 입력 받아 깊이 맵을 합성하도록 학습시켜야 합니다.

3.1. Skeleton set augmentation

Skeletal hand shape model. 21개 조인트 기반의 모델을 사용합니다. 이 모델은 사람의 손을 25개 각도와 20의 연결부간의 거리로 표현합니다. 각 손가락에서는 MCP에 대해 twist angle, flexion angle, abduction angle 3개의 각도, 손가락의 DIP, PIP에 대해서 flexion angle과 4개의 길이로 구성됩니다.

Hand datasets: obtaining $P$. Big Hand 2.2M 데이터베이스가 가장 크긴 하지만, 그것만으로는 부족합니다. 여기에 ICVL, NYU, MSRA 데이터베이스를 추가로 사용하였습니다.

Skeleton augmentation: constructing $U$. 4개의 데이터베이스에 대해서 뷰포인트와 모양에 변화를 주어 스켈레톤 공간을 늘리고자 합니다. 단 자세 augmentation은 고려하지 않았습니다.

기존 스켈레톤의 새로운 카메라 퍼스펙티브를 적용하기 위해 y-z, x-z 평면에서 $\theta_1$, $\theta_2$만큼 3D 회전을 하였습니다.

이제 손바닥은 고정하고 각 손가락 조인트 사이의 길이를 변화시켜 새로운 스켈레톤을 만들어냈습니다. 먼저 손가락의 5개 각도와 3개의 길이를 조사한 뒤, 각각을 조절하여 손바닥에 연결시켰습니다. 여기서 각 손가락 길이들의 비율을 고정되어있다고 가정하고 고정된 상수 $\tau$를 곱해 조절하였습니다. $\theta_1, \theta_2$는 가우시안 분포 $\mathcal{N}(0, \frac{\pi}{4}^2)$에서, $\tau$는 $\mathcal{N}(1.0, 0.5^2)$에서 샘플링하였습니다.

3.2. Transferring skeletons to depth maps

Hand pose generator (HPG). HPG $f^G$는 입력 스켈레톤 파라미터 $\mathbf{y}$에 대한 깊이 맵 $\mathbf{x}$를 생성해 냅니다. Pathak의 conditional GAN 2에 L2로스를 사용하였습니다. L2로스는 만들어진 깊이 맵과 정답간의 편차를 측정합니다.

Hand pose discriminator (HPG). 깊이 맵의 품질에 대한 피드백을 주기 위해 보조 모델을 맏늘었습니다. HPE와 HPG의 순환 조합을 이용하기 위해 두개의 discriminator를 학습시켰습니다. 하나는 깊이 HPD ($HPD_X$) $f^{D_X}$로 표준 GAN discriminator과 같이 실제 데이터는 1, 합성 데이터는 0의 출력을 내놓습니다. 나머지 스켈레톤 HPD ($HPD_Y$) $f^{D_Y}$는 추정한 손가락 조인트가 사람의 스켈레톤 모델에 잘 맞는지를 구분합니다. 이것은 실제 스켈레톤 데이터나 augmented된 스켈레톤이 HPE에 의해 거부되더라도 이를 받아들이도록 유도하기 때문에 $f^G$가 원래 데이터셋에서 커버하지 못하는 부분의 포즈를 생성할 수 있도록 해 줍니다.

Training HPG and HPE. 우리의 목표는 HPG와 HPE를 3D 스켈레톤과 깊이 쌍 데이터 $P$와 augment된 데이터 $U$를 이용하여 동시에 학습하는 것입니다. Augment된 데이터 $\mathbf{z}$는 실제 깊이 맵 $\mathbf{x}$가 없기 때문에 cyclic consistency를 적용하여 학습할 것입니다. 입력 스켈레톤 포즈 $\mathbf{z}$에서 생성된 깊이 맵 $f^G(\mathbf{y}) \in X$은 HPE로 입력되어 그 결과 $f^E ( f^G (\mathbf{z}) )\in Y$는 본래의 $\mathbf{z}$와 비슷한 결과가 나와야 합니다. 마찬가지로 입력 깊이 맵 $\mathbf{x}$이 입력된 HPE의 결과 $f^E (\mathbf{x}) \in Y$를 다시 HPG에 넣었을 때 나오는 결과 $f^G ( f^E (\mathbf{x})) \in X$는 원래의 깊이 맵과 비슷해야 합니다.

이런 부분을 반영하여 에너지 로스 $\mathcal{L}$은 4개 요소로 구분되어있습니다. HPE와 HPG 각각의 로스와 함께 $P$와 $U$에 대한 consistency loss $f^E (f^G)$와 $f^G ( f^E )$가 4개 요소들입니다.

Discussions. 이 로스는 cyclic GAN에서 영감을 받았지만, 짝지어지지 않은 데이터셋에서 대응성을 찾으려는 cyclic GAN과는 달리 여기에서는 약간의 짝이 있는 데이터셋 $P$와 짝이 없는 많은 데이터셋 $U$을 이용하고 있습니다. 또한 이 데이터셋은 스켈레톤 공간에서만 이루어집니다.

Refining predictions at testing. HPE가 학습이 끝나면 바로 써먹을 수도 있지만, 같이 학습된 HPG와 HPD를 이용해 진짜 같은 스켈레톤인지 조사하여 모델을 업데이트할 수 있습니다.

Multi-view gradient ensemble. 여러 뷰에 대해 성능을 더 올리도록 하였습니다. 먼저 추정된 스켈레톤 3D 자세에 대해서 R개의 서로 다른 각도에서의 뷰를 만들고 스켈레톤 augmentation을 거칩니다. 다음 이 데이터를 통해 $f^{D_Y}, f^G$에 이력하여 그래디언트를 업데이트 합니다. 이제 업데이트된 결과를 원래의 뷰로 돌린다음 평균한 것을 최종 추정 값으로 사용합니다.

4. Experiments

5. Conclusions

 

1 S. Yuan, Q. Ye, B. Stenger, S. Jain, and T.-K. Kim. Big hand 2.2M benchmark: hand pose data set and state of the art analysis. In CVPR, 2017.
2 D. Pathak, P. Krahenbuhl, J. Donahue, T. Darrell, and A. A. Efros. Context encoders: Feature learning by inpainting. In CVPR, 2016.


Add a Comment Trackback