Stacked Hourglass Networks for Human Pose Estimation

sota
convolutional
pose-estimation

(Curtis Kim) #1

FLIC와 MPII 데이터 셋에서 당시 #sota 를 달성.

  • Stacked Hourglass Network
  • Repeated Error Feedback
  • Output은 Single Person에 대한 각 Joint Heatmap. L2 Loss.

두 가지의 조합으로 좋은 성능을 이끌어냈습니다.


Related Work

Segmentation 등의 Task에서 Hourglass와 같은 형태의 Architecture가 좋은 성능을 내는 경우들이 보고되던 때입니다. 특히 pixel-wise로 regression을 해야하는 segmentation 등의 task에서 그런 네트워크 구조를 사용했습니다. convolution 뒤에 이어지는 deconvolution 구조라던가, encoder-decoder 등이 대표적인 예입니다.

Hourglass Module

Convolution을 반복해서 수행함에따라 작아지는 size를 다시 deconvolution 등으로 키워가며 위와 같이 만들기 때문에 이를 Hourglass 라고 부릅니다.

논문에서는 deconvolution을 하지는 않았고, 단순히 nearest neighbor upsampling을 했습니다. 보이는 것처럼 같은 사이즈에 맞게 skip-connection도 추가했구요.

Hourglass는 여러 스케일의 정보를 모두 취합하겠다는 의도로 사용된 것입니다.

Hourglass 내에서는 위와 같이 Residual Module 형태로 되어 있습니다. 1x1 Convolution으로 채널을 줄인 후 Convolution하고 다시 채널을 늘리는 형태에, Skip-connection을 넣었습니다.

오른쪽 그림처럼, Heatmap을 출력하는 Output(파란 부분)을 만들고 나면 이를 다시 1x1 convolution으로 합쳐서 다음 모듈로 넘기는 형태입니다. 이는 다음 내용에서 자세히 이야기합니다.

Stacked Hourglass : Iterative Error Feedback

위에서 설명한 Hourglass Module을 위 그림처럼 여러번 반복해서 사용하는 구조입니다. 즉 1개의 Hourglass Module에서 나온 결과(Heatmap)을 다시 다음 모듈에 넘겨주고, 그 다음 모듈이 만든 결과를 또 그 다음 모듈이, 그렇게 마지막 모듈에 다다를때까지 반복되는 구조입니다.

이렇게하는 이유는 결과를 refine하기 위함인데, 이는 다르게 이야기하면 사람의 관절간의 관계 등을 네트워크가 학습하는 것이라고 이야기할 수 있습니다. 사람의 특정 관절은 그 주변의 지역적인 이미지만 가지고 판단할 수도 있지만, 사람의 모습이나 전체 관절 간의 관계 등을 통해서도 충분히 좋은 유추가 가능하기 때문에, 그러한 정보에 대해 학습할 수 있도록 네트워크 구조를 정의하였습니다.

Evaluation

Hourglass를 Stacking해서 사용하는 것이 결과에 매우 치명적임을 보여주는 그림입니다. 단순히 1개의 Hourglass만 사용한 경우가 가장 퍼포먼스가 좋지 않습니다.

Hourglass가 여러번 반복됨에 따른 성능 비교입니다. 왼쪽 그림에서도 잘못된 관절간의 관계를 교정하는 것을 확인할 수 있습니다.

오른쪽 그래프에서도 Hourglass가 반복됨에 따라 성능이 꽤 많이 오르는 것을 확인할 수 있습니다.

Conclusion

Hourglass 구조로 다양한 Scale에 대응할 수 있도록 네트워크 구조를 만들고, 이를 Stacking해 사람 자세에 대한 논리적인 refine이 가능하도록 설계한 네트워크 구조가 핵십인 논문입니다. 1명의 사람에 대해 관절 위치를 heatmap으로 출력하는 단순한 구조로, 좋은 성능을 report하였고, 반복되는 구조가 성능에 미치는 영향에 대해 분석한 점이 재미있습니다.