[Paper Review] HRNet for Human Pose Estimation 논문 이해하기
『 Deep High-Resolution Representation Learning for Human Pose Estimation. CVPR. 2019. 』
나는 HRNet 논문을 읽었다고 생각했다. 실제로 블로그 리뷰도 올린적이 있었고 코드 사용하는데에도 문제가 없었으니까. 그런데 얼레 이후 논문들을 보다가 인용된 Reference를 보다보니 이상한점이 좀 있었다. 논문 이름이 다르네....?
그렇다 나는 멍청했던 것이다. 내가 사용한 Pose Estimation Task 속에서의 HRNet은 이 논문에서 시작된 것이라는 걸... 그래서 Pose Estimation 분야를 정복하기 위해 이논문을 제대로 읽고 이전에 리뷰했던 내용도 재검토 해보기로 마음을 먹었다. 같은 실수를 반복하지 않기 위해 이제는 논문 뒤에 for ~를 주의 깊게 보는 습관을 들이고 있다(알고보니 HRNet 시리즈로 논문을 많이 내셨더라...).
그럼 지금까지도 Pose Estimation Task에서 좋은 성능을 보이고 있는 HRNet for Human Pose Estimation 논문을 정말로 분석해보도록 하자 😄
Github
https://github.com/HRNet/HRNet-Human-Pose-Estimation
0. Abstract
본 논문에서는 고해상도 Representation을 학습하는 것에 중점을 두고 Pose Estimation 문제에 접근한다. 대부분의 기존 방법은 이미지를 고해상도에서 저해상도로 변환한 후 다시 저해상도에서 고해상도로 복원하는 네트워크 구조를 가진다(Hourglass, CPN 등등 모두 이러한 구조). 따라서 본 논문에서는 네트워크의 전체 과정에서 고해상도 Representation을 유지 할 수 있도록 구조를 설계한다.
고해상도에서부터 Layer가 진행될 수록 SubNetwork를 달아 더 많은 Stage를 형성하며 다중 해상도 SubNetwork를 병렬로 연결-융합하여 고해상도에서 저해상도로 이어지는 Representation이 다른 Parallel Representation에서 정보를 계속 받아들이도록 설계하였다.
이를 통해 풍부한 고해상도 Representation을 얻을 수 있었고 COCO, MPII 데이터 셋에서 좋은 성능을 낼 수 있었다.
1. Introduction
본 논문은 단일 인물의 Pose Estimation에 중점을 두고 있다.
지금까지 대부분의 방법들은 Input 이미지를 고해상도에서 저해상도로 만든 다음 다시 해상도를 높이는 방식을 채택했다. 예를 들어 Hourglass는 대칭적인 형태로써 고해상도-저해상도-고해상도로 이어지는 구조이며, Simple Baseline은 몇 개의 Transposed Convolution layer를 사용하여 고해상도 Representation을 만들었다.
하지만 이러한 구조는 전체 네트워크에서 고해상도 Representation을 유지할 수 없기 때문에 본 논문에서는 이러한 단점을 보완한 HRNet(High-Resolution Net)을 제안한다. 네트워크 구조는 Figure 1에서 볼 수 있듯이 고해상도에서 저해상도로 이어지는 SubNetwork를 하나씩 추가해 더 많은 Stage를 형성하며 다중 해상도 SubNetwork를 병렬로 연결한다. 이렇게 만든 병렬 다중 해상도 SubNetwork는 정보를 서로 반복적으로 교환하며 Multi-Scale Fusion을 수행한다.
여기 부분은 Abstract에 나온 내용과 거의 일치하지만 Introduction 파트에서의 설명이 더 디테일하다.
이러한 네트워크 구조에는 2가지 이점이 존재한다.
- 기존 대부분의 솔루션은 고해상도에서 저해상도로 이어지는 SubNetwork를 직렬로 연결하지만 HRNet에서는 SubNetwork를 병렬로 연결하기 때문에 고해상도를 Representation을 유지할 수 있어 공간적으로 더 정밀한 Heatmap을 생성한다.
- 대부분의 기존 Fusion 방식은 Low-level과 High-level Representation을 결합하지만 HRNet에서는 저해상도 Representation으로 고해상도 Representation을 강화하기도 하고, 고해상도 Representation으로 저해상도 Representation을 강화하기도 하면서 더 풍부한 Representation을 만드는 Multi-Scale Fusion을 수행한다. 이를 통해 더 정확한 Heatmap을 생성한다.
여기까지만 읽고 드는 의문 : 고해상도 Representation을 유지한 것은 좋은데 이러면 계산량이 너무 많아지지는 않나?
2. Related Work
최근 발달한 CNN 기반의 Pose Estimation 기법에는 2가지 주요 방법이 존재한다. 하나는 Keypoint의 위치를 Regression하는 방법이고 다른 하나는 Keypoint Heatmap을 추정한 후 가장 높은 Heat 값을 가진 위치를 Keypoint로 선택하는 방법이다. Heatmap 추정 기법들의 대부분은 이미지를 고해상도에서 저해상도로 낮춘다음 고해상도로 높이면서 Heatmap을 추정하는 과정을 채택한다.
고해상도에서 저해상도, 저해상도에서 고해상도로 만드는 과정은 Hourglass와 후속 연구들에서 진행되었으며 저해상도로 가는 과정에서는 ResNet과 같이 Feature Map을 생성하는 모델들이, 고해상도로 가는 과정은 Bilinear-Upsampling이나 Transpose Convolution layer로 이루어진다.
Multi-Scale Fusion의 경우 가장 간단한 방법은 Multi-Scale 이미지 각각을 별도의 네트워크에 입력하고 출력을 합치는 것이다. HRNet은 이러한 점과 Hourglass에서 Low-level Representation을 동일 해상도의 High-level Representation과 합치는 아이디어에서 영감을 받았다(Skip Connection을 의미하는 것으로 보임). 또한 중간 Heatmap을 SubNetwork의 입력 또는 입력의 일부로 처리하는 Intermediate Supervision 기법도 존재했다(Hourglass 참고).
Figure 2에는 Hourglass, CPN, Simple Baseline 모델의 구조가 나타나 있다. 확실히 직렬로 이루어져 있고 해상도가 작아졌다가 커지는 구조로 디자인 된 것을 알 수 있는데, 이와 반대로 HRNet은 병렬적이고 SubNetwork에서 생성된 Representation을 반복적으로 융합하여 고해상도 Representation을 만들도록 디자인되었다. Intermediate Supervision을 사용하지 않았음에도 정확도가 우수하고 계산 복잡도, 파라미터 면에서 효율적인 특징을 가진다.
기존에 Multi-Scale 네트워크에 대한 연구가 있었지만, 성능이 좋지 않았고 본 논문에서는 해당 연구들에서 영감을 받아 네트워크를 디자인하였다.
Transposed Convolution
https://gaussian37.github.io/dl-concept-transposed_convolution/
3. Approach
본 논문에서는 Pose Estimation Task를 K개의 Heatmap을 추정하는 문제로 접근하며 2개의 Strided Convolution으로 이루어진 Stem, Input Feature Map과 동일한 해상도로 Feature Map을 출력하는 Main Body, Keypoint 위치를 선택하고 전체 해상도로 변환 시켜주는 Regressor로 구성된 파이프라인을 따른다. 본 논문에서는 특히 Main Body 설계에 중점을 두었다.
Sequential multi-resolution subnetworks
기존 Pose Estimation 네트워크는 고해상도에서 저해상도로 가는 직렬 형태로 디자인되었다.
Parallel multi-resolution subnetworks
하지만 HRNet은 고해상도 SubNetwork에서 시작하여 점진적으로 저해상도 SubNetwork를 하나씩 추가하여 새로운 Stage를 형성하고 Multi-Scale SubNetwork를 병렬로 연결하였다. 그 결과 뒷 단계의 병렬 SubNetwork의 해상도는 이전 단계 SubNetwork들의 해상도로 구성된다(일 자로 이어지는 화살표).
Repeated multi-scale fusion
HRNet에서는 평행한 SubNetwork간에 Exchange Unit을 도입하여 반복적으로 정보를 주고받는다.
하나의 Exchange Block 안에 Convolution Unit + Exchange Unit이 있다고 생각
- $s$ : s번째 Stage
- $b$ : b번째 블록
- $r$ : r번째 해상도
- $k$ : k번째 Keypoint
- $\mathcal{C}^b_{sr}$ : s번째 Stage의 b번째 블록의 r번째 해상도에서의 Convolution Unit
- $\mathcal{E}^b_s$ : s번째 Stage의 b번째 블록의 Exchange Unit
- ${X_1, X_2, ... , X_s}$ : s개의 Input Feature Map
- $Y_k = \sum_{i=1}^{s}a(X_i, k), {Y_1, Y_2, ... , Y_x}$ : s개의 Output Feature Map
- $Y_{s+1} = a(Y_s, s+1)$ : Exchange Unit이 가지는 Extra Output Map
- $a(X_i, k)$ : 해상도 i에서 k번째 Keypoint의 해상도로 $X_i$를 Upsampling 또는 Downsampling하는 기능
- $a$는 즉 해상도를 맞추어주는 함수라고 생각
Downsampling에는 Strided 3x3 Convolution을 사용하고 Upsampling에는 Nearest Neighbor Sampling과 1x1 convolution을 사용한다. $i=k$인 경우 $a(X_i, k)$는 $X_i$가 된다.
Downsampling 시 2배 Downsampling 하려면 Stride=2인 하나의 3x3 Convolution, 4배 Downsampling 하려면 Stride=2인 2개의 3x3 Convolution을 사용한다.
Heatmap estimation
마지막 Exchange Unit에서 출력된 고해상도 Representation에서부터 Heatmap을 Regress한다. Loss Function으로는 예측 Heatmap과 정답 Heatmap 간에 MSE로 정의되며 여기서 정답 Heatmap은 Keypoint의 실제 위치를 중심으로 표준 편차 1 pixel의 2D Gaussian으로 만들어진다.
Network instantiation
본 논문에서는 RestNet이 설계된 규칙에 따라 Stage의 깊이나 각 해상도에 대한 채널의 숫자를 배분하였다. HRNet은 4개의 평행한 SubNetwork를 가진 4개의 Stage로 구성되어 있으며 SubNetwork가 하나 내려갈수록 해상도는 절반으로 줄어들고 채널 수는 두 배로 증가한다.
"ResNet이 설계된 규칙에 따랐다"는 말은 ResNet이 해상도가 낮아질수록 채널 수를 증가시킨 점이나 ResNet-50, ResNet-101처럼 여러 개의 Layer로 구성되어 있는데 이를 각 Stage로 잘 나누었다는 것을 의미하는 것 같다.
첫번째 Stage는 4개의 Residual Unit을 가지며 각 Unit은 ResNet-50과 동일하게 64개의 Channel을 가진 BottleNeck 구조로 구성된다. 이후 3x3 Convolution을 통해 Feature Map의 크기를 $C$로 줄여준다.
2, 3, 4번째 Stage에서는 각각 1, 4, 3개의 Exchange Block을 가진다. 각 Exchange Block은 4개의 Residual Unit으로 구성되며 각 Unit은 해상도 별 2개의 3x3 Convolution과 해상도 간에 Exchange Unit을 포함한다. 요약하자면 총 8개의 Exchange Unit이 있어 8번의 Multi-Scale Fusion이 수행된다.
Stage 별로 Exchange Block이 1, 4, 3개인 이유는?
실험에서는 마지막 3개 Stage 중 가장 고해상도인 SubNetwork의 Channel 수를 기준으로 HRNet-W32, HRNet-W48 2가지 모델로 실험을 진행하였다. HRNet-W48 모델이 더 큰 모델이며 HRNet-W32의 다른 3개 SubNetwork Channel 수는 64, 128, 256이고 HRNet-W48의 경우에는 96, 192, 384이다(위에서 해상도가 하나 내려갈 수록 채널 수는 2배).
본 논문에서는 일반적으로 사용하는 Channel을 Width로 표기하였다. 헷갈림을 방지하기 위해 이번 리뷰에서는 Channel로 통일하여 서술하였다. 도식 (2)를 참고하였을 때 Stage는 Column, SubNetwork는 Row로 인지하면 좋을 것 같고 고해상도가 유지되는 맨 위 Network의 Channel 수를 기준으로 모델 이름을 지었다는 의미로 보인다.
4. Experiments
4.1. COCO Keypoint Detection
데이터로는 COCO 데이터 셋을 사용하였다. 17개의 Keypoint로 200,000장의 이미지에 250,000명 이상의 사람이 라벨링 되어 있는 데이터이다. Train 데이터로는 57000장 속 150000명의 사람, Test 데이터로는 5000장 속 20000명의 사람으로 테스트를 진행하였다.
사용한 Metric은 OKS(Object Keypoint Similarity)이며 이에 대한 Precision과 Recall을 계산하였다. Top-Down 방식의 모델이기 때문에 Detection 결과를 Height : Width=4:3으로 맞추었고 이 때의 이미지 크기는 256x192 or 384x288이 된다. 자세한 Train Detail은 논문을 참고.
Test 과정에서는 Simple Baseline이 제공하는 Detector를 가지고 동일하게 실험하였으며 Hourglass 모델에서 그랬던 것 처럼 original 이미지와 flipped 이미지를 가지고 나온 Heatmap을 평균하여 사용하였다. 또한 Simple Baseline 모델에서 그랬던 것 처럼 최종 예측 전에 가장 점수가 높은 Response에서 두번째로 높은 Response 방향으로 1/4 Offset이 적용된다.
COCO validation, test-dev 데이터 셋으로 평가한 결과 기존 모델들 대비 좋은 성능을 낸 것을 확인할 수 있다.
4.2. MPII Human Pose Estimation
실험에 사용한 두번째 데이터는 MPII Human Pose 데이터 셋이다. COCO 데이터 셋과 테스트 절차는 동일하며 Detected Person 박스를 사용하지 않고 제공된 Person 박스를 사용하였다. Metric으로는 PCKh(head-normalized probability of correct keypoint)를 사용하였다.
PCKh
Ground Truth head bounding box의 대각선 길이의 60% $l$과 특정 상수 $a$를 곱한 $al$을 허용 픽셀로 두어 Joint의 Ground Truth 위치에서 $al$ 거리 안쪽으로 위치하면 Correct로 판정. 본 논문에서는 $a$=0.5인 PCHh@0.5를 사용하였다.
위 Table 3에서 볼 수 있듯이 대부분의 관절에서 좋은 성능을 보였고 Table 4에서처럼 파라미터와 GFLOPs도 모두 적었다.
HRNet-W48도 같은 92.3의 결과를 보였다고 한다. 근데 왜 굳이 표시를 안했지?
4.3. Application to Pose Tracking
PoseTrack 데이터 셋에서도 좋은 성능을 보임.
4.4. Ablation Study
COCO 데이터 셋을 가지고 Ablation Study를 진행하였다. 이때 Input size는 256x192.
Multi-Scale Fusion이 네트워크 성능에 미치는 영향을 분석하기 위해 3가지 변형된 Method를 사용하여 실험하였다.
- (a) : 마지막 Stage에서만 Multi-Scale Fusion이 이루어짐. 중간 단계 Fusion X (1 Fusion)
- (b) : 각 Stage 내에서는 Multi-Scale Fusion이 없고 Stage 간에만 Fusion이 이루어짐 (3 Fusion)
- (c) : Stage 간에서도, Stage 내에서도 Multi-Scale Fusion이 이루어짐
실험 결과 Multi-Scale Fusion이 많을 수록 성능이 향상됨.
Figure 5는 Representation 해상도가 성능에 미치는 영향을 알아본 실험 결과이다. 고해상도에서부터 저해상도까지 각 해상도에서 추정된 Heatmap을 평가하였으며, 실험 결과 저해상도에서 추정된 Heatmap의 성능이 가장 떨어지는 것을 확인할 수 있다.
Input Size 변화에 따른 실험 결과 모든 해상도에서 HRNet의 성능이 기존 Simple Baseline 모델의 성능을 뛰어 넘었다. 결국 이러한 실험들을 통해 HRNet의 디자인이 다중 해상도 정보를 효율적으로 결합하고 있다는 것을 알 수 있었다.
가장 분석해보고 싶었던 HRNet for Human Pose Estimation 논문 리딩을 마쳤다. CNN 기반의 방법론으로 최근까지도 좋은 성능을 이어져 오고 있는 모델이며 코드상으로 가장 많이 활용해본 모델이기에 핵심 기법들을 파악하는데에 초점을 맞추었다. Hourglass, CPN 등의 모델들이 결국 고해상도 Feature 정보에 핵심적인 내용이 들어있다는 점에 착안하여 고해상도 정보를 네트워크 전체에서 유지하려는 방법이 좋은 성능의 비결이지 않을까 싶다.
HRNet 모델을 기반으로 변형하여 성능을 올리려 하는데, 아마 비슷하게 생각해서 이미 여러 변형 모델이 등장해 있을거라 생각한다. 이후에는 Pose Estimation 기법들과 HRNet 변형 논문들을 위주로 찾아 읽어보려 한다.
세 줄 요약
1. 고해상도 Representation을 전체 네트워크동안 유지하여 좋은 성능을 낸 HRNet 모델을 제안하였다.
2. Stage 마다 다중 해상도 Representation을 Fusion하여 신뢰할 수 있는 고해상도 Representation을 만들었다.
3. COCO와 MPII 데이터 셋에서 SOTA 성능을 기록하였으며 Tracking 데이터에서도 좋은 성능을 보였다.