이 논문은 ICCV 2019에 accepted된 논문으로, CVPR 2019의 3D human pose estimation in video with temporal convolutions and semi-supervised training의 다음 SOTA이다.
이 논문은 3D Body Pose Estimation과 3D Hand Pose Estimation을 모두 다루고 모두 SOTA를 달성했는데, 본 포스팅은 3D Body Pose Estimation에 대해서만 설명하겠다.
한 번 살펴보자.
이 논문을 읽기 위해 최소한 준비해야 할 것(뇌피셜)
- 알아야 할 개념: Graph Convolution, Local-to-Global Architecture, Non Local Block
주의! 본 포스팅은 논문을 번역하거나 자세하게 설명하는 것이 아닌, 주요한 부분들을 집어 제 나름대로의 이해를 바탕으로 서술한 것입니다. 이 포스팅은 논문 이해에 도움이 될 순 있어도 논문의 모든 것을 담지 않았으니, 반드시 원문을 함께 읽으시길 바랍니다.
Introduction
무슨 Introduction이 한 페이지가 넘어간다. 이 분야는 핫한데 챌린징하고...어쩌고... 하는 잡설은 지우고 요약하자면,
- 2D Pose → 3D Pose의 two-step모델들은 나름 성공적인데, 2D 표현에 대한 대응 3D 표현이 너무 많아 잘못된 예측을 할 수 있다. 특히 어떤 occlusion이 있을수록.
- 이러한 부분에 있어 공간적으로 이를 보정하거나, 시간적으로 이를 보정하는 연구들이 있었다.
- 근데 기존의 많은 연구들은 시간/공간 둘 중 하나에 집중하더라.ii. 시간적인 사항을 고려할 때 depth ambiguity나 visible jitters에 관한 문제들이 해결된다.
- i. 공간적인 사항을 고려할 때 불가능한 pose 예측을 막고, 폐색에 의한 문제를 줄인다.
- 그래서 우리는 둘 다 해봤다.
- 근데 그걸 Graph Convolutional Network와 곁들여서 했다. 우리의 GCN은 Spatial하고 Temporal한 요소들 모두 고려할 수 있다.
- GCN에 pooling과 upsampling으로 local-to-global 구조를 도입해 좋은 결과를 얻었다.
- Non-uniform GCN을 제시한다.
또 Introduction엔 나오지 않았으나, 여기엔 non-local block도 쓰인다.
Related Work
Graph Convolutional Neural Network (GCN).
GCN은 Graph Neural Network에 Convoultional 연산을 적용한 것으로, 크게 두 가지로 나뉜다.
하나는 spectral GCN이고, 다른 하나는 non-spectral GCN이다.
spectral GCN의 경우 그래프 구조에서 컨볼루션 연산이 어려우므로 푸리에 변환을 통해 공간을 옮겨 학습한 후, 다시 역 푸리에 변환을 적용하는 과정으로 진행한다. 여기서 무슨 라플라시안이 등장하기는 하는데, 아직 공학수학을 수강하지 않은 난 잘 모르겠다...ㅠ
spectral GCN은 고정된 그래프 위상에서 좋은 성능을 발휘한다.
non-spectral GCN은 컨볼루션의 공간적 정의를 확장하고 그래프 위상을 그리드 형태로 변형해 바로 컨볼루션 연산을 하는 과정으로 진행한다.
non-spectral GCN은 그래프 위상이 변화하는 경우에 좋은 성능을 발휘한다.
아마 이쪽으로 GAT라던가, 그런 이름의 것들이 있었던 것으로 기억한다.
Methodology
Spatial-temporal Graph Construction.
수학적 표기는 범용적인 것보다 이 논문을 따른다.
GNN은 기본적으로 인접행렬 $W$가 있을 때 그 차수행렬 $D$가 $D^{ii} = \sum_jW^{ij}$로 존재한다. 이때 그래프 엣지 수에 따른 스케일링을 적용하면 정규화된 그래프 라플라시안은 $L=I-D^{-{1\over2}}WD^{-{1\over2}}$로 정의된다.
이 논문에서 그래프 엣지는 두 개로 나뉘는데, 하나는 동일한 joint의 프레임별 연결인 temporal connection이고, 다른 하나는 동일한 프레임의 joint별 연결인 spatial connection이다.
1. Revisiting Graph Convolutional NNs
pose estimation에서 스켈레톤을 그래프로 표현할 때, 그래프 위상은 일정하다. 따라서 이 논문은 spectral GCN을 선택했다.
어떤 입력 $x$와 필터 $g_\theta=diag(\theta)$에 대해 Fourier domain은 $g_\theta*x=Ug_\theta U^Tx$이다. 이때 $U$는 푸리에 기저이고, 위에서 정의한 정규화 그래프 라플라시안 $L$의 고유벡터 행렬이다.
Kipf-Welling의 layer-wise linear formulation은 그래프 라플라시안의 1차 근사를 낮은 계산 복잡도로 정의했다. 인접행렬 $W$에 대해 $\tilde W=W+I$라고 하면 그 차수행렬은 $\tilde D$이고,
$$
Z=\tilde{D}^{-{1\over2}}\tilde W\tilde{D}^{-{1\over2}}X\Theta
$$
이다.
$X\in\mathbb R^{N\times C}$는 신호이고, $\Theta\in\mathbb R^{C\times F}$는 파라미터이다. $N, C, F$는 각각 그래프 노드 개수, 입력 특성의 차원수, 출력 특성의 차원 수이다.
결국 $Z$는 $\mathbb R^{N\times F}$공간에 속하게 된다.
2. Graph Convolution for Pose Estimation
기존의 GCN들은 특성에 대한 커널(파라미터) $\Theta$를 모든 노드에 대해 공유했다. 이를 uniform GCN이라 한다. 이런 네트워크는 노드와 엣지가 많은 dense graph에 어울린다.
그러나 여기서 제시하는 spatial-temporal graph은 딱 봐도 sparse하며, 엣지마다(spatial/temporal) 기능도 다르다. 따라서 모든 노드에 uniform하게 동일한 커널을 적용하는 것 적합하지 않다.
저자들은 non-uniform GCN을 제시하는데, 노드의 인접 관계에 따라 6개의 범주로 나누어 다른 커널을 적용하는 것이다.
그 범주는 다음과 같다.
- 어떤 노드 그 자신(center node itself)
- root노드까지 center node보다 가까운, 물리적으로 연결된 노드
- root노드로부터 center node보다 멀리 떨어진, 물리적으로 연결된 노드
- 좌우 대칭성으로 연결된 노드(center note가 left elbow일 경우 right elbow)
- 다음 time step(frame)의 동일한 관절 노드
- 이전 time step(frame)의 동일한 관절 노드
$k$개의 범주가 있을 때 그래프 컨볼루션의 업데이트(forwarding)는 다음과 같다.
$$
Z=\sum_kD_k^{-{1\over2}}W_kD_k^{-{1\over2}}X\Theta_k
$$
커널 $\Theta$가 $\Theta_k$들로 분리되었다는 것에 집중해야 한다.
3. GCN-based Local-to-global Prediction
Stacked Hourglass에서 제시된 네트워크 구조로부터 영감을 받아 개념적으로 그와 유사한 local-to-global 네트워크를 제안한다.
Graph Pooling and Upsampling
Stacked Hourglass모델과 같은 구현을 하려면 그래프의 특성 맵을 downsample(pooling)하고 upsample하는 연산이 필요하다.
그러나 upsample은 downsample을 역으로 적용하면 그만이지만, 그래프에는 pooling이라는 개념이 없다.
저자들은 joint들을 아까의 6개 분류와 비슷한 느낌으로, 유의미한 노드들로 pooling하고자 한다.
처음 대략 14~17개의 joints로부터 시작하는 pooling은 5개의 resoultion(?)으로 다운샘플링한다.
그리고 또 1개의 단일 노드로 다운샘플된다.
body pose estimation의 경우 몸통/왼팔/오른팔/왼쪽 다리/오른쪽 다리로 나뉜 것을 알 수 있다. pooling을 진행해도 여전히 대칭성에 의한 연결이 유지되어 있다.
temporal connections은 그대로 유지된다.
Hierarchical Architecture
단일노드까지 downsample된 그래프는 다시 역과정으로 upsample하면서, 이전 과정의 동일한 resolution의 그래프 특성맵과 concat한 후 노드별 Fully Connected 레이어를 거친다.
최종적으로 non-local block을 적용하여 전체적인 예측(holistic estimation)을 가능케 한다.
4. Pose Refinement
3D Pose Estimation에서는 특성공학적으로 3d pose를 표현하는 방법이 메이저한 게 2개가 있다.
- 카메라 월드 좌표계에서의 root-relative 3차원 좌표
- 카메라 정규$UV$ 좌표계에서의 2D 좌표 + Depth
2번의 경우, 입력 2d pose와의 일관성을 보장할 수 있어 선호되지만, 잘못된 2d 입력은 (spatially)불가능한 3d 예측을 만들어낸다.
1번의 경우에는 2d pose와의 일관성은 모르겠으나 올바른(valid) 3d pose를 예측할 수 있게 해준다.
이 둘 사이의 적절한 균형을 맞추기 위해, 최종적으로 two-layer fc network를 추가했다. 이 네트워크는 두 표현법을 모두 입력으로 받는다.
정확하게는, 1번의 표현법이 곧 메인 네트워크의 출력이므로 이것을 하나의 입력으로 받고, 입력 2d pose와 출력으로부터 계산된 depth를 concat한 2번의 표현을 또 하나의 입력으로 받는다.
이 네트워크의 출력은 두 표현법 각각의 confidence score이고, 최종 전체 네트워크의 출력은 두 표현법의 confidence-weighted sum이다. (사실상 $z$값은 이 네트워크로 인해 변하지 않는다.)
5. Training
3D Pose Loss
각각 GT와 예측된 pose $\phi, \hat\phi$에 대해,
$$
L_p=\sum_{t=1}^T\sum_{i=1}^M||\hat\phi_{t, i}-\phi_{t,i}||_2^2
$$
$T, M$은 frame count, joint count이다.
Derivative Loss
변화량(미분)에 대한 loss는 시계열적으로 안정적이고 부드러운 예측을 하도록 도와준다. 이때 사지(four limbs) 관절은 일반적으로 빠르게 움직이고, root에 가까운 관절들은 그렇지 않다.
그러한 기준으로 joint들을 크게 3개로 분류하는데, (1) root 언저리, (2) 사지 관절 가운데(limb mid), (3) 사지 관절 끝(limb terminal)이다. 이 분류 집합을 $S$로 하여 변화량에 대한 loss는 다음과 같다.
$$
L_d=\sum_{t=2}^T\sum_{i=1}^M\sum_{s\in S}\eta_s||\hat\phi_{t,i}^s-\hat\phi_{t-1,i}^s||_2^2
$$
$\eta_s$는 stable한 joints set에 더 높은 값이 할당된다.
Symmetry Loss
3d pose는 대칭성을 가지므로, 대칭성에 대한 loss를 설정했다. 어떤 스켈레톤 $b$의 대칭쌍을 $C(b)$라 할 때, 스켈레톤 bone length $B$에 대해
$$
L_s=\sum_{t=1}^T\sum_b||\hat B_{t,b}-\hat B_{t,C(b)}||_2^2
$$
Training strategy
위 3가지 loss로부터 최종 loss는 다음과 같다.
$$
L=\lambda_pL_p+\lambda_dL_d+\lambda_sL_s
$$
저자들은 $\lambda_p=1, \lambda_d=1, \lambda_s=0.01$로 설정하였다.
이때 $L_p, L_s$는 모든 과정에 적용되었으나, $L_d$는 pose refinement 이전 연속된 프레임의 3D 관절 예측에만 적용되었다.
Experiments
- GCN은 14~17 → 5 → 1의 각각의 resolution에 대해 3, 2, 2개의 레이어를 쌓았다. 마지막 fc layer는 hidden uint을 1024개로 두었다.
ablation study
- 시퀀스 길이 $T$는 증가할수록 좋은 결과를 내었다.
- six class non-uniform GCN은 범주의 개수가 적은 것이나 uniform GCN에 비해 성능이 좋았다.
- pooling과 upsampling의 local-to-global 네트워크는 쓸모 있었다.
- post-processing인 pose refinement network는 효과가 있었다.
이 논문에서 제안하는 네트워크는 spatially-temporally로 예측되어 occlusion에 의한 어려운 예측도 잘 해내었다.