stacked hourglass network는 이름의 의미와 같이 hourglass를 쌓은 형태입니다. upsampling을 진행하는 대부분의 기존 모델의 경우에는 hourglass를 하나만 사용하는 것과 대조되는 것을 알 수 있습니다.그러면 각 요소가 어떻게 구성되어 있고 어떤 역할을 하는지 한번 살펴보겠습니다.
위 그림은 hourglass module입니다. 하나의 block은 residual unit을 의미합니다. 입력값이 최소 resolution을 갖도록 residual unit을 통한 down sample을 거칩니다. 최소 resolution에 도달한 뒤에 Bilinear upsample 방식으로 원래 입력값 크기로 복원합니다. 또한 동일한 크기의 resolution 끼리 element-wise addition 연산을 수행합니다.
위와 같은 과정을 거치면, 최소 resolution이 지니고 있는 얼굴, 손과 같은 local 정보와 원래 입력 크기가 지니고 있는 몸 전체, 사람의 방향, 팔의 형태를 함께 이용할 수 있다고 합니다.

intermediate supervision은 hourglass module의 출력값을 다음 hourglass module로 전달하기 위해 사용합니다. 또한 위 그림에서 파란색 부분에 해당하는 heatmap을 생성하여 loss를 계산합니다.이전 hourglass 출력값에 1x1 conv를 거쳐서 두 개의 branch로 나뉘어 집니다. 하나의 branch는 heatmap을 생성하고, 다른 branch는 다음 hourglass module에 입력되기 위한 과정을 거칩니다. heatmap에서 loss를 계산한 뒤에 1x1 conv 연산을 수행하여 채널 수를 조정합니다. 다음 hourglass module에 입력되기 전에, 3개의 값이 addition 연산을 통해 하나의 값으로 결합됩니다.
이렇게 hourglass module을 여러번 거치면서 재평가의 효과가 있다고 합니다. 초기의 hourglass 출력값은 각 hourglass를 거치면서 재평가가 되고 중간중간 loss가 계산되기 때문에 점점 refinement가 되는 효과가 있습니다.
그리고 이렇게 maxpooling과 unsampling으로 이루어진 hourglass를 매우 많이 거쳐서 low resolution까지 쭉 내렸다가 다시 upsampling으로 다시 high resolution으로 올리면서 feature를 뽑아내는 과정을 여러번 반복하면서 보다 정확한 output을 얻어낸다고 한다.
출처)https://deep-learning-study.tistory.com/617
https://lswook.tistory.com/107