LSTM Pose Machines
1. Introduction
사람 몸의 관절을 추정하는 문제는 많은 연구가 되어왔지만, 그동안의 연구는 대부분 정지 이미지에서만 이루어져 있지 비디오에서는 행해지지 않았습니다. 이런 부분은 이미지들에 대해서 위치가 일정하게 유지되지 않는 오류를 보이는데, 이는 몸의 일부가 가려지거나 큰 동작이 있을 경우 주로 발생합니다.
위치가 일관되게 유지되도록 하려면 비디오 프레임간 시간적 종속성이 사용되어야 할 것입니다. 한가지 방법은 두 프레임 간의 옵티컬 플로우를 이용하는 것이지만, 이는 플로우를 정확하게 계산되어야 한다는 점고 이는 이미지 품질에 영향을 많이 받는다는 단점이 있습니다.
이 논문에서는 데이터 기반의 방법으로, 기존의 다단계(multi-stage CNN) 방법을 Recurrent Neuarl Networt (RNN)으로 고친 방법을 보이고자 합니다. 이를 위해Long Short-Term Memory (LSTM)을 비디오 프레임 사이에 적용하였습니다.
논문의 기여는 다음과 같습니다.
- LSTM을 이용한 recurrent 구조를 이용하여 프레임간 시간적 위치 일관성을 반영하였다.
- 네트워크의 각 단계간의 관계를 분리하는 새로운 구조를 이용하여 더 빠른 속도를 낼 수 있었다.
- LSTM의 메모리셀에 접근하여 관절을 유추하는데 어떻게 도움이 되는지 시각화하였다.
2. Related Works
3. Analysis and Our Approach
3.1. Pose Machines: From Image to Video
Pose Machine은 사람의 관절을 유추하기 위하여 제안된 방법으로, 관절끼리 서로 연결되어있다는 점에 착안하였습니다. Convolutional Pose Machine (CPM)은 이 아이디어를 받아 심층 신경망 구조로 구현하였습니다. 두 Pose Machine의 전략은, 각 관절의 신뢰도를 다음 단계로 전달하는 것이었습니다. CPM에서와 같이 다음과 같은 기호로 표시하고자 합니다. $\mathbf{b}_s \in \mathbb{R}^{W \times H \times (P + 1)} $는 각 단계 $s \in \{1, 2, \cdots, S \}$에서의 $P$개의 관절과 배경에 대한신뢰도를 나타냅니다. 이는 다음과 같이 계산됩니다.
$$ \mathbf{b}_s = g_s(X),\ s= 1 \\ \mathbf{b}_s = g_s(\mathcal{F}_s(X) \oplus \mathbf{b}_{s-1}),\ s=2,3, \cdot, S$$
여기서 $X \in \mathbb{R}^{W \times H \times C}$는 각 단계의 입력 이미지를 나타내고, $\mathcal{F}_s(\cdot)$는 컨볼루셔널 네트워크로 이미지로부터 특징을 추출하는 네트워크입니다. 이 특징에 사전 신뢰도$\mathbf{b}_{s-1}$를 붙여서 또다른 컨볼루셔널 네트워크 $g_s (\cdot)$에 입력되어 신뢰맵을 정교화하여 다시 생성하게 됩니다. CPM에서는 각 단계 $s$마다 서로 다른 $g_s$와 $\mathcal{F}_s$를 사용하도록 되어있습니다. 실제로는 1단계의 $g_{s=1}$은 그 이상의 것보다 더 깊은 구조를 가지고 있는데 이는 더 정확한 신뢰도를 계산하기 위했던 것입니다. 반복적으로 여러 단계를 반복해서 신뢰도를 높이도록 되어있지만, 이는 비디오 기반의 환경에서는 적합하지 않습니다. 시간적인 정보를 활용하지 않기 때문입니다.
논문의 저자는 CPM의 이 구조 reccurent 구조로 바꿀 수 있고, $g_s$와 $\mathcal{F}$이 서로 가중치를 공유하도록 할 수 있음을 찾았습니다. 새로운 Recurrent Pose Machine의 수식은 다음과 같습니다.
$$ \mathbf{b}_t = g_0 (X_t), \ t=1 \\ \mathbf{b}_t = g(\mathcal{F}(X_t) \oplus \mathbf{b}_{t-1}), \ t=2, 3, \cdots, T$$
이제 $\mathbf{b}$는 각 단계의 신뢰도 맵이 아닌, $t$ 프레임에서의 신뢰도 맵으로 사용됩니다. 입력 이미지는 이제 각 단계에서 같지 않고 연속된 비디오의 프레임이 입력되게 됩니다. 첫번재 단계에서의 $g_0$는 기존과 마찬가지로 다른 단계의 $g$와는 다르지만, 나머지 단계에서는 모두 같은 함수를 쓰게 됩니다.
이러한 식을 사용해서 RNN 모델을 세웠으나 성능이 좋지 않았고, LSTM을 넣을 경우 결과가 좋았습니다. 수정된 모델은 다음과 같습니다.
$$ \mathbf{b}_t = g(\tilde{\mathcal{L}}(\mathcal{F}' (X_t))), \ t=1 \\ \mathbf{b}_t = g(\tilde{\mathcal{L}}(\mathcal{F}' (X_t) \oplus \mathbf{b}_{t-1})), \ t=2,3,\cdots, T$$
$\tilde{\mathcal{L}}$은 LSTM모듈을 나타냅니다. 이전의 모델에서는 $g_0$이 특징 생성기와 신뢰도 유추기를 모두 담당했으나, 여기서는 이를 분리하여 LSTM 모듈인 $\tilde{\mathcal{L}}$이 특징을 추출하도록 하여, 모든 단계에서 동일한 $g$가 신뢰도를 생성하도록 할 수 있었습니다. LSTM의 첫번째 단계에서는 메모리에 아무것도 없기 때문에 다른 단계보다 살짝 다르게 이용할 것입니다. 하지만 기능적으로 모든 단계가 동일합니다.
3.2. LSTM Pose Machines
Details of the Model. 비디오의 연속된 프레임은 서로 다른 단계의 입력으로써 네트워크로 입력됩니다. 첫번째 프레임에서는, $\mathcal{F}'(X_t)'$는 $\mathcal{F}_0(X_t) \oplus \mathcal{F}(X_t)$로 분리됩니다. $\mathcal{F}_0$는 ConvNet1으로 이미지 입력을 직접 받아 처리하는 역할을 합니다. $\mathcal{F}$는 ConvNet2로 인코더 역할을 하며 모든 단계에서 동일합니다. $\mathcal{F}_0$는 첫 이미지의 신뢰도를 생성합니다. 첫번째 프레임이라 성능이 좋지 않을 것이기 때문에 생성된 신뢰도 맵을 다시 $\mathcal{F}(X_1)$에 붙여서 더 정확한 결과를 만들어 내도록 합니다. ConvNet3는 신뢰도 맵 유추기로 LSTM의 출력을 입력으로 합니다. 모든 ConvNet은 컨볼루셔널 레이어와 활성함수와 풀링레이어로 이루어져 있습니다. 대부분 CPM과 같은 구조이지만, 가중치를 모든 단계에서 공유한다는 점이 다릅니다.
Convolutional LSTM Module. 전통적인 LSTM 대신 convolutional 연산을 사용한 것을 사용하였습니다. 이미 LSTM에 입력되는 데이터가 이미지와 신뢰도 맵이 연결되어있으므로, LSTM의 게이트는 더 지역적인 부분에 집중하게 될 것입니다. 컨볼루셔널 레이어는 3x3 레이어를 사용하였습니다.
Training of the Model. Caffe를 이용하였으며, 레이블은 가우시안 피크를 이용한 히트맵 방식을 사용하였습니다. 네트워크는 $T$개의 단계를 가지며, 단계의 끝에서 로스가 모두 더해져 학습하도록 하였습니다. CPM과 마찬가지로 모든 관절의 정답과의 거리를 이용하여 로스 함수를 설계하였습니다.
4. Experiments and Evaluations
4.1. Datasets
4.2. Implementation Details
Parameter settings. CPM 모델을 가져와 단일 이미지를 이용해 미리 학습을 시켰습니다. 이때 $T=6$으로 모든 단계에 동일한 이미지를 넣어 학습을 하였습니다. 여기서 만들어진 가중치 중 처음 2개 단계의 가중치를 모델로 복사하여 사용하였습니다.
실제 RNN 구조로 학습할 때에는 $T=5$로 설정하여 학습하였습니다.
4.3. Evaluation on Pose Estimation Results
4.4. Analysis of Results
Results on Penn and sub-JHMDB. 빠른 동작이나 가려짐이 있을 경우 그 정확도가 올라갔습니다.
Contribution of LSTM Module. LSTM을 제거한 recurrent 모델은 RPM을 설계하였습니다. RPM은 시간적 정보를 활용하는 구조이지만, LSTM을 가지지는 않습니다. LSTM 모델은 RPM다 PENN에서 0.7%, sub-JHMDB에서 1.4% 성능 향상이 있었습니다. 머리나 어깨, 엉덩이 등 쉬운 부분은 RPM과 비슷한 수준이었으나 나머지 부분에서 LSTM이 효과가 있음을 알 수 있었습니다.
Analysis of increasing the iterations LSTM $T$의 수를 1,2,5,10으로 변화시켰을 때, 크게할 수록 좋은 결과를 볼 수 있었으나, 10은 너무 시간이 오래걸리는 대신 성능 향상은 높지 않았습니다. 따라서 $T=5$가 최적의 값임을 알 수 있었습니다.
4.5. Inference Speed
4.6. Exploring and Visualizing LSTM
LSTM의 메모링 셀을 업샘플한 다음, 원래 이미지 공간으로 매핑하였습니다. 메모리의 각 채널은 각각의 관절 파트에 서로 다르게 집중하는 것을 알 수 있었습니다. 어떤 부분은 몸통이나 에지, 어떤 부분은 팔꿈치, 엉딩이, 머리 등에 집중하고 있었습니다.
단계가 거듭될 수록 LSTM은 잊고, 기억하는 과정을 거칩니다. 단계가 계속될 수록 LSTM은 각 단계마다 메모리에 가지고 있는 부분이 다르며, 유용한 기억하려고 함을 알 수 있었습니다.
5. Conclusions