공돌이 공룡의 서재

[논문 리뷰] Stacked Hourglass Networks for Human Pose Estimation 본문

딥러닝/Vision

[논문 리뷰] Stacked Hourglass Networks for Human Pose Estimation

구름위의공룡 2021. 9. 28. 22:11

[Stacked Hourglass Networks for Human Pose Estimation]

https://arxiv.org/abs/1603.06937

 

Pose estimation에서 중요하게 다뤄지는 개념인 heatmap을 iterative 한 구조 + scaling을 줄였다 늘였다 하는 구조로 더 정확하게 얻을 수 있는 방법을 소개하고 있다. 새로운 loss function이나 접근법 등에 대한 것보다는 구조 자체에 집중해서 보면 좋을 논문이다.

 


Introduction

pose estimation task에서 전반적인 설명을 하고 있다. 요약해서 나열해보면 다음과 같다.

  • person posture, limb articulation 등은 더 높은 수준의 task를 수행할 때 도움이 된다.
  • pose estimation 분야가 challenging 한 원인들
    • occlusion : 가려짐
    • severe deformation
    • rare & novel pose
    • invariant to changes in appearance : 조명, 등의 조건

Stacked Hourglass Network에 대한 소개를 하고 있다. 이 또한 요약하면 다음과 같다.

  • 이미지의 모든 스케일에 걸친 정보들을 잡아내고 통합할 수 있다.
  • 이는 low resolution까지 pooling한 이후 다시 키우면서 multiple resolution 정보들이 합쳐지는 구조를 갖고 있기 때문이다.
  • symmetric topology를 갖고 있다.
  • bottom-up, top-down inference가 반복되는 구조다.
  • 이는 conv-deconv, encoder-decoder 구조와 관련 있다.

Network Architecture

Hourglass Design

모래시계처럼 생긴 이런 구조를 어떤 이유에서 고려하게 되었는지에 대한 언급을 하고 있다. pose estimation task에서 local 정보는 손이나 얼굴 같은 feature들을 확인하는데 필요하고, full body 정보(global 정보라고 봐도 될 듯) 어떤 자세를 하고 있는지 아는데 필요하다.

 

그래서 단일 구조상에서 pooling을 하고 upsampling을 하되, skip connection을 이용해서, 각 해상도에서 공간적인 정보가 유지될 수 있도록 한다. (이전 방법들은 복잡한 구조를 택했다.)

 

low resolution으로 줄일 때는 Convolution layer와 max pooling을 사용한다. upsampling 시에는 nearest neighbor upsampling 방식을 사용해서 feature map의 크기를 키우고 그 결과와 skip layer에서 넘어온 map과 합친다.

그림에는 나타나 있지 않지만, 그림상 가장 오른쪽의 feature map에 1x1 convolution을 2번 적용한다. 그 결과, joint들이 어디에 분포하고 있을지 heatmap들의 집합이 주어지게 된다.

 

 

Layer Implementation

 

skip connection과 layer 구성에 대한 보충설명이 내용의 주를 이룬다.

 

convolution layer의 경우 5x5 conv layer 1개보다 3x3 conv layer를 2개가 더 좋다는 점(: 더 큰 공간적 context를 잡기 좋다. 연산량에서 유리)에서 이 논문에서도 이 방법을 선택했다.

 

Full input은 256x256 해상도지만, GPU 메모리의 한계로 hourglass 내부에서는 64x64를 가장 높은 해상도로 두었다. 이 정도 차이가 있어도 joint prediction의 정확도에는 영향을 주지 않는다고 한다. 논문을 읽으면서 resolution이 높아지면 더 좋아질 것 같은데? 싶어서 의아했던 부분이다.

 

 

Stacked Hourglass with Intermediate Supervision

 

모델 구조를 hourglass를 여러 개 쌓은 형태로 정할 수 있었던 것은 hourglass module 하나의 output을 다음 module의 input으로 볼 수 있기 때문이다. 이 말은 중간중간 나오는 결과에 대해 loss를 적용할 수 있다는 것을 의미한다. (intermediate supervision)

hourglass module을 하나만 사용해야 한다면 intermediate supervision을 어디에 두어야 할지 고려해야 하는데, 각 경우마다 장단점이 있다. 그런데 stack을 하게 되면 여러 한계들을 완화할 수 있게 된다.

이 stack 방법을 통해 네트워크상에서 크고 작은 scale을 왔다 갔다 하게 되는 것은 feature의 공간적 정보가 마지막 최종 localization 단계에서 중요하기 때문에 특히 중요하다고 한다.

이 부분에 대해서 내 나름대로 해석을 해보면, low resolution은 global 한 feature이면서 high-level feature고, high resolution info는 local feature들을 pixel마다 담고 있되 low-level feature다. FPN에서 이처럼 해상도가 다른 feature들을 다 합쳐서 더 좋은 feature map을 얻었듯이, 이 모델은 줄이고 합치는 과정들을 여러 번 반복하게 되는 것이 장점이 되는 것 같다.

 


Result

여기서 눈 여겨봤던 점은 3번 섹션에서 설명이 조금 부족하다 느껴졌던 intermediate supervision에 대한 연구다.

오른쪽에 나타난 5개의 모듈을 순서대로 12345번으로 라벨을 붙여보자.

 

1번이 가장 좋은 모듈인데 hourglass가 2개 stack 되어있고 supervision도 2번 진행한다. 밑의 2번과 비교해봤을 때, 같은 구조지만 마지막에 한 번만 적용하는 것보다는 hourglass 사이사이 supervision을 적용하는 게 더 좋다는 것을 확인해볼 수 있다.

 

1번과 5번을 비교해봤을 때 supervision이 많이 적용됐다고 해서 무조건 best가 되는 것이 아닌데 이는 다음 결과와도 비슷한 맥락에 있다.

오른쪽 맨 밑의 모델의 마지막 layer에서 나온 결과가 성능이 가장 좋다는 점에서 scale을 줄였다 늘이는 과정을 더 반복하는 것이 더 좋음을 알 수 있다.

 

이후의 내용들은 요약하면 다음과 같다.

  • occlusion과 multiple people에도 이전 모델들에 비해 더 robust 하다.
  • 중간에 얻은 output들을 놓고 비교했을 때, 이전에 잘 못 나온 결과들을 고치는 것을 수행할 수 있다. (작동방식이 고치는 것처럼 보인다.)

 

 

Comments