Convolutional Pose Machines
1. Introduction
이 논문에서는 articulated pose를 추정하는 Convolutional Pose Machines (CPMs)을 제안합니다. CPMs는 pose machine 구조가 가지는 장점들을 활용하고 있습니다. 이러한 장점에는 CPMs는 각 파트의 신호와 이미지 사이의 종속성을 학습하고, 학습과 추론 과정의 통합, 순서대로 실행되는 모듈 디자인 등이 있는데, 이러한 부분을 컨볼루셔널 구조를 이용하여 하나로 통합할 수 있었습니다.
CPMs은 컨볼루셔널 네트워크의 연속으로 이루어져 있으며, 각 파트에 대한 2D 신뢰맵 생성을 반복적으로 수행합니다. CPM의 각 단계에서는 이전 단계에서 생성된 특징 맵과 이미지 특징이 입력으로 사용됩니다. 이전 단계에서 넘어온 신뢰맵을 이용하면 현재 단계의 모호성을 제거할 수 있기에, 단계가 거듭될수록 추정된 파트의 위치는 점점 정교화됩니다. 각 파트끼리의 상호작용을 위해서 이미지와 신뢰맵 모두에서 넓은 receptive field를 사용하였습니다.
논문의 기여는 다음과 같습니다.
- 컨볼루셔널 구조의 순서로 구성된 모델로 지역적 정보를 활용하도록 학습
- 그래픽 모델 없이 이미지 특징과 이미지에 종속적인 지역 모델을 학습하도록 하는 시스템적 디자인과 학습법
2. Related Work
3. Method
3.1. Pose Machines
$p$번째 랜드마크의 픽셀 위치를 $Y_p \in \mathcal{Z} \subset \mathbb{R}^2$이라고 하고, $\mathcal{Z}$는 이미지 내의 모든 $(u, v)$ 위치를 나타냅니다. 우리의 목적인 각 $P$ 파트의 이미지 위치 $Y = (Y_1, \cdots, Y_P)$를 추정하는 것입니다. Pose machine은 멀티클래스 추정기 $g_t(\cdot)$의 연속으로 이루어져 있고, 이것들은 각 파트의 위치를 추정하도록 학습되어있습니다. 단계 $t \in \{1, \cdots, T\}$에서 분류기 $g_t$는 이미지의 $z$위치에서 추출된 특징과 이전 단계의 분류기에서 계산된 $z$주변의 맥락적 정보를 이용하여 $z$위치에서의 각 파트의 신뢰도를 추정합니다.
첫번째 단계 $t=1$에서 신뢰도는 다음과 같이 계산됩니다.
$g_1(\mathbf{x}_z) \rightarrow \{ b_1^p (Y_p = z) \}_{p \in \{0, \cdots, P\}} $
이렇게 계산된 이미지 내의 모든 파트에 대한 신뢰도를 $\mathbf{b}_t^p \in \mathbb{R}^{w \times h}$로 표현한다면, $\mathbf{b}_t^p [u, v] = b_t^p(Y_p=z)$로 생각할 수 있습니다. $P$개의 각 파트와 배경에 대한 것을 생각했을 때 편의상 $\mathbf{b}_t^p \in \mathbb{R}^{w \times h \times (P+1)}$로 생각하겠습니다.
다음 단계에서는, 이미지로부터 계산된 특징 $\mathbf{x}_z^t \in \mathbb{R}^d$와 각 파트 위치 주변의 맥락 정보를 이용하여 신뢰도를 다시 계산합니다.
$$ g_t(\mathbf{z}_z', \psi_t(z, \mathbf{b}_{t-1}) ) \rightarrow \{ b_t^p (Y_p = z) \}_{p \in \{ 0, \cdots, P+1\} } $$
여기서 $\psi_{t \gt 1} ( \cdot )$는 신뢰맵 $\mathbf{b}_{t-1}$을 맥락 특징으로 변환하는 함수입니다. 또한 각 단계에서 사용되는 특징 $\mathbf{x}'_z$은 첫번째에서 사용되는 $\mathbf{x}$와 다른 특징을 생성하여 사용할 수도 있습니다.
실제 pose machine은 $g_t$에는 boosted random forests를 사용하고, 모든 단계의 이미지 특징은 같은 것을 사용하였으며($x'=x$), 이미지 특징과 맥락 특징은 사람이 직접 설계한 것을 사용하였습니다.
3.2. Convolutional Pose Machines
이제 pose machine의 모듈들을 컨볼루셔널 구조로 교체하는 방법을 알아보고자 합니다.
3.2.1 Keypoint Localization Using Local Image Evidence
CPM의 첫번째 단계에서는 이미지 지역적인 정보만을 사용하여 신뢰도를 추정합니다. 때문에 첫번째 단계에서의 receptive field는 작은 패치로 제한됩니다. 네트워크는 5개의 컨볼루셔널 레이어와 이후 2개의 1x1 컨볼루셔널 레이어로 구성되어있습니다. 구현에서는 이미지를 normalize한 뒤, 368x368로 잘라내어 입력하였습니다. 이경우 receptive field는 160x160이 됩니다. 출력으로는 160x160의 영역에 대하여 각 파트에 해당하는 $P+1$ 크기의 출력을 내보내게 됩니다.
3.2.2 Sequential Prediction with Learned Spatial Context Feature
얼굴과 어깨와 같은 부분에서는 검출률이 높더라도 팔이나 다른 같은 부분에서는 그 자세나 모양새가 큰 변화를 가지기에 검출률이 떨어지게 됩니다. 이런 문제에서 각 파트 위치 주변의 신뢰맵은 많은 정보를 가지고 있습니다. 예를 들어 오른쪽 팔꿈치를 검출하고자 할때 오른쪽 어깨에 대한 신뢰맵은 좋은 신호로 사용될 수 있습니다. 2단계 이후에서의 추정기 $g_{t \gt 1}$는 이전 단계의 신뢰맵의 지역 맥락 $\psi_{t \gt 1}(\cdot)$ 특징을 이용하면 추정 성능을 향상 시킬 수 있습니다. Pose machine의 두번째 단계에서는 분류기 $g_2$는 이미지 특징 $\mathbf{x}_z^2$와 이전 단계의 각 파트를 $\psi$를 이용하여 만듵 그 특징을 입력으로 합니다. 함수 $\psi$는 위치 $z$ 주변 영역을 입력으로 하여 인코딩하게 됩니다. CPM에서는 특별한 특징을 계산하지 않고, 이전 단계 특징 맵의 receptive field 영역을 직접 사용하였습니다.
네트워크를 디자인할 때에는, 두번째 단계의 출력이 가지는 receptive field는 멀리 있는 파트까지 포함할 수 있도록 충분히 넓어야 합니다. 이전 단계의 출력을 따로 처리하지 않고 그대로 제공하게 되면, 컨볼루셔널 레이어는 자유롭게 가장 그럴듯한 특징을 골라서 그 정보를 이용하게 됩니다. 첫번째 레이어는 작은 receptive field를 가지지만, 여러 컨볼루셔널 레이어를 거침으로써 receptive field를 대폭 늘리도록 합니다. 여기에서는 8x로 다운 스케일된 히트맵을 출력하도록 설계하였습니다. 실험에서는 넓은 receptive field를 가질 수록 성능이 높아졌으며, 304x304이미지에서, 250픽셀 주변 영역 사용하게 되면 성능 향상이 멈추었습니다.
실험적으로 368x368 크기로 크롭하였을 경우에 가장 성능이 좋았으며, 두번째 단계에서 사용하는 첫번째 단계의 신뢰맵은 31x31크기를 가지게 하였습니다. 이 크기는 실제 이미지의 400x400영역과 동일한 것입니다. 이어지는 단계에서는 더욱 receptive filed가 커지며, 6단계까지 계산을 수행하였습니다.
3.3. Learning in Convolutional Pose Machines
각 단계에의 pose machine은 반복적으로 학습됩니다. 각 단계에서 로스 함수는 추정된 신뢰맵과 이상적인 경우의 신뢰맵 사이의 $l_2$ 거리를 최소화하도록 하였습니다. 이상적인 신뢰맵 $b_*^p (Y_p = z)$은 가우시안의 피크를 정답 위치에 놓도록 생성하였습니다. 단계 $t$에서의 로스 함수는 다음과 같습니다.
$$ f_t = \sum_{p=1}^{P+1}\sum_{z \in Z} || b_t^p (z) - b_*^p (z) ||_2^2$$
전체 목표 함수는 모든 단계에서의 로스를 더해서 계산합니다.
$$ \mathcal{F} = \sum_{t=1}^{T} f_t$$
이미지 특징은 모든 단계에서 같은 것으로 공유하였고, $t \geq 2$단계에서의 컨볼루셔널 레이어들도 파라미터를 공유하였습니다.
4. Evaluation
5. Discussion