Stacked Hourglass Network for Human Pose Estimation
1 Introduction
사람의 자세를 추정하기 위해서 정통적으로 ConvNets 기반의 방법이 많이 사용되고 있습니다. 이러한 연구의 연장선으로 이 논문에서는 stacked hourglass 네트워크 디자인을 제안합니다. 이 네트워크는 모든 스케일 정보를 고려하도록 설계되었습니다. 다른 컨볼루셔널 구조와 마찬가지로 hourglass 또한 매우 낮은 해상도까지 출력을 생성한 다음, 업샘플링과 여러 해상도의 특징을 통합하는 과정을 거치게 됩니다.
2 Related Work
3 Network Architecture
3.1 Hourglass Design
Hourglass는 모든 스케일의 정보를 얻기 위해서 디자인되었습니다. 얼굴이나 손과 같은 국소적인 부분의 특징을 잡아내는 것도 중요하지만, 최종 자세를 추정하기 위해선 신체 전체에 대한 정보가 필요합니다. 어떤 연구들에서는 여러 스케일에 대한 정보를 따로 구한 다음 이들을 통합하여 사용하는 것들도 있으나, 여기에서는 skip-layer를 이용하여 각 해상도의 지역 정보를 유지하게 함으로서 하나의 파이프라인으로 구성할 수 있었습니다. 네트워크는 4x4까지 해상도를 줄인다음 이를 활요하게 됩니다.
Hourglass는 다음과 같이 구성하였습니다. 컨볼루셔널과 max polling 층을사용해서 특징을 낮은 해상도로 줄입니다. 각 max pooling 단계에서 분기를 만들어 pooling 하기 전의 해상도에서 컨볼루션을 더 수행합니다. 가장 낮은 해상도까지 줄였으면, 다시 업샘플링 과정을 거칩니다. 한번 업샘플링 할 때마다 이전의 컨볼루션한 특징을 결합하여 사용합니다. 두개의 해상도를 합치는 방법은, Tompson의 방법에 따라 낮은 해상도의 특징을 nearest neighbor로 업샘플링한 뒤에 elementwise로 더해서 사용합니다.
최종적으로 네트워크의 출력부까지 도달하면 두번의 1x1 컨볼루션을 계산하여 마지막 출력을 계산합니다. 출력은 각 픽셀에 대한 히트맵을 의미합니다.
3.2 Layer Implementation
Hourglass 구조를 사용하고 있지만, 아직 레이어를 변화시킬 수 있는 여지가 있습니다. 논문에서는 residual 모듈을 확장해서 사용하였습니다. Hourglass의 모듈에서 나온 출력을 분기해서 1x1 컨볼루션을 적용하여 히트맵의 동일한 채널로 맞추어 줍니다. 이것과 hourglass의 입력되었던 것과 출력을 조합하여 다음 hourglass에 입력됩니다. 3x3보다 큰 필터는 사용하지 않고, bottlenecking의 수를 조절하여 메모리 사용을 제한하였습니다.
실제 이미지는 256x256이지만, 메모리를 고려하여 Hourglass의 입력은 64x64로 정하였습니다. 전체 네트워크는 7x7, stride2의 컨볼루셔널 레이어로 시작하며, residual 모듈과 max pooling을 거쳐 256을 64로 해상도가 줄어들게 됩니다.
3.3 Stacked Hourglass with Intermediate Supervision
이러한 hourglass들을 쌓아서 전체 네트워크 구조를 만들었습니다. 한 hourglass의 출력이 다음 hourglass로 입력되는 구조입니다. 계산된 중간 히트맵들을 모두 로스 계산에 적용할 수 있습니다.