본문 바로가기
딥러닝(Deep Learning)/논문 paper 리뷰

[Paper Review] CPN 논문 이해하기

by rahites 2024. 9. 4.

Cascaded Pyramid Network for Multi-Person Pose Estimation. CVPR. 2018. 

이번에 소개할 논문은 FPN 구조를 발전시켜 Multi-Person Pose Estimation Task에 적용시킨 CPN 논문이다. 

이번 논문 리딩은 빠른 이해를 위해 아래의 참고자료 블로그를 한번 쭉 읽고 난 후 논문 리딩을 시작하였다. 여러 모델의 핵심 기법들을 합쳐 더 좋은 성능을 내는 모델을 만들었다는 특징을 가지며 그렇기에 논문의 내용이 그렇게 어렵지 않았다.

 

참고자료

https://velog.io/@haejoo/Cascaded-Pyramid-Network-for-Multi-Person-Pose-Estimation-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC

 

Cascaded Pyramid Network for Multi-Person Pose Estimation 논문 정리

Human pose estimation과 관련된 논문을 하나하나 정리하고 있는데 Multi human pose estimation 중에서는 제일 먼저 읽었던 Cascaded pyramid network, CPN이다. 1. Introduction Human pose

velog.io

 

Github

https://github.com/GengDavid/pytorch-cpn

 

GitHub - GengDavid/pytorch-cpn: A PyTorch re-implementation of CPN (Cascaded Pyramid Network for Multi-Person Pose Estimation)

A PyTorch re-implementation of CPN (Cascaded Pyramid Network for Multi-Person Pose Estimation) - GengDavid/pytorch-cpn

github.com


0. Abstract

Multi-Person Pose Estimation 분야가 최근 많이 발전했음에도 어려운 Keypoint(Occluded, invisible, complex background)에 대한 예측이 아직 잘 이루어지지 않고있다. 따라서 본 논문에서는 이러한 어려운 Keypoint 문제를 해결하기 위한 CPN(Cascaded Pyramid Network) 모델을 제안한다.

 

CPN 모델은 GlobalNetRefineNet 2가지 단계로 구성되는데 GlobalNet은 눈이나 손같이 간단한 Keypoint를 찾는데에 사용되고 RefineNet은 어려운 Keypoint를 찾는데에 사용된다. Top-Down 파이프라인을 사용하였으며 RefineNet에서는 OHKM(Online Hard Keypoint Mining) Loss를 사용하여 모델 성능을 높일 수 있었다.

 

1. Introduction

Multi-Person Pose Estimation은 최근 CNN을 도입하여 많이 발전하였으며 Convolutional Pose Machine, Part Affinity Fields같은 방법들이 제안되었다. 하지만 아직 어려운 Keypoint에 대한 성능 이슈가 존재하는데, 본 논문에서는 그 이유를 아래 2가지로 보았다.

  1. 어려운 Joint는 외형의 특징만으로 쉽게 인식되지 않는다 ex. 몸통(torso)
  2. 어려운 Joint를 학습 과정에서 명시적으로 다루지 않는다.

이러한 문제를 해결하기 위해 본 논문에서는 CPN(Cascaded Pyramid Network) 모델을 제안한다. 이 모델의 네트워크는 GlobalNetRefineNet 2단계로 구성된다. GlobalNet은 FPN(Feature Pyramid Network)를 기반으로 Occluded되거나 Invisible한 관절에 대한 충분한 Context 정보를 얻을 수 있으며 RefineNet은 OHKM(Online Hard Keypoints Mining) Loss를 기반으로 어려운 Keypoint를 명시적으로 다룬다.

 

또한 Top-Down Pipeline을 사용했기 때문에 Human Detector 이후에 CPN이 작동하여 Person Detector와 Data Preprocessing의 효과를 탐구하였다. 본 논문의 Contribution은 다음과 같다.

  • GlobalNet과 OHKM을 기반으로 한 RefineNet을 통합한 CPN 모델을 제안한다.
  • Top-Down Pipeline에서 Multi-Person Pose Estimation에 기여하는 여러 요소들의 효과를 탐구하였다.
  • COCO Multi-Person Keypoint 데이터셋에서 좋은 성능을 얻을 수 있었다.

 

2. Related Work

Multi-Person Pose Estimation

최근 인기를 얻고 있지만 Occlusion, Various Gesture 등의 어려움이 존재한다. Bottom-Up, Top-Down 2가지의 접근방식으로 나뉜다.

 

Bottom-Up Approaches

DeepCut, OpenPose 등의 방법론 소개

 

Top-Down Approaches

Top-Down은 Detection + Pose Estimation을 결합한 방식이다 + 관련 논문들 소개

 

Single Person Pose Estimation

DeepPose 이후에 발전된 CNN 기반의 Pose Estimation을 설명. 

 

Human Detection

해당 논문이 등장한 시점에 인기있었던 Detection 방법인 RCNN 계열의 모델을 설명. 본 모델에서도 RCNN 계열의 Detector를 사용함(Mask R-CNN, FPN).

 

3. Our Approach for Multi-person Keypoints Estimation

person을 perosn으로 적어둔 오타가 제목에 있다.... 이걸 못봤나..?

본 논문에서 채택한 방법론은 Top-Down 방식이다(Human Detector + Pose Estimation).

3.1. Human Detector

본 논문에서 사용한 Detector는 FPN(Feature Pyramid Network) 기반의 Object Detector이다. 기본 FPN 구조는 동일하게 둔 상태에서 ROI Pooling 대신 Mask RCNN의 ROI Align을 가져와 사용하였다.

원래 FPN이 소개될 때 Faster RCNN에 적용하여 ROI Pooling이 사용된 것같은데 Mask RCNN을 사용해서 ROI Align을 사용한 것 같다. Mask RCNN의 모듈을 그대로 가져다 쓴 것일까?

3.2. Cascaded Pyramid Network (CPN)

Stacked Hourglass 논문을 보면 8개의 모듈을 쌓았을때가 2개의 모듈만을 쌓았을 때보다 훨씬 더 좋은 성능을 보인다고 말하고 있지만, 본 논문의 연구자들은 2개의 Hourglass를 쌓는 것만으로 8개의 모듈을 쌓은 것과 유사한 성능을 얻을 수 있다고 이야기한다.

여기서 2개의 Hourglass는 RefineNet에 사용(Figure 1의 BottleNeck)

 

GlobalNet

GlobalNet에서는 ResNet Backbone을 기반으로 하며 4개의 Convolution layer(C2 ~ C5)에 대해 3x3 Filter를 적용한다. C2와 C3같이 해상도가 높은 Feature에서는 위치를 정확하게 파악할 수 있지만 인식에 필요한 의미적 정보가 적다. 한편 C4, C5와 같이 깊은 Feature는 많은 의미적 정보를 포함하지만 해상도가 낮다는 특징이 있다(Figure 2 왼쪽 부분에서 위부터 C2 ~ C5로 생각).

 

이러한 문제점을 극복하기 위해 본 논문에서는 U자형 구조를 가지는 FPN 모델을 활용하였다. 약간의 다른점은 Upsampling 과정에서 Element 합 이전에 1x1 Convolution을 진행한다는 점이다. GlobalNet에서는 Figure 2에서 볼 수 있듯이 많은 Context 정보가 필요한 Hip같은 Keypoint를 잘 잡아내지 못한다. 따라서 이러한 어려운 Keypoint들을 잘 잡아내기 위해 RefineNet을 사용한다.

 

RefineNet

GlobalNet이 생성한 Feature Pyramid를 바탕으로 RefineNet에서는 어려운 Keypoint들을 명시적으로 처리한다. Stacked Hourglass와는 다르게 RefineNet에서는 Hourglass 모듈 끝에 모든 Pyramid Feature를 연결한다. 네트워크가 간단한 Keypoint에 집중하고 어려운 Keypoint에는 중요성을 덜 부여하는 경향이 있어, OHKM Loss를 사용하여 선택된 키포인트에서만 Gradient를 역전파시킨다.

결국 이 논문에서 제안하는 모델은 여러 모델의 기법들이 짬뽕된 것으로 보인다(FPN + MaskRCNN + ResNet + Hourglass)

 

4. Experiment

CPN 모델의 실험은 Top-Down 접근 방식을 따르며 이 때 사용한 Detector로는 SOTA 모델을 사용하였다. 이 때 한 Bounding Box 안에는 한 명의 사람이 들어있다고 가정하고 Pose Estimation을 진행하였다.

4.1. Experimental Setup

실험에 사용한 데이터는 MS COCO trainval, minival, Test 데이터이며 Metric은 OKS(Object Keypoint Similarity)기반의 mAP이다. Detection을 거쳐 나온 Bounding Box는 256x192(height x width) 크기로 Resize하여 Input으로 사용하였다. 더 자세한 디테일은 논문을 참고.

 

4.2. Ablation Experiment

이 절에서 진행한 실험은 MS COCO minival 데이터 셋을 사용하였고 모델 입력은 256 x 192에 동일한 데이터 증강을 사용하였다.

 

Person Detector

Detector의 NMS threshold에 따른 성능 변화에 대한 실험 결과와 Detection AP와 Keypoint AP의 연관성을 실험한 결과이다. Detection 성능이 올라갈 수록 Keypoint의 성능도 올라가지만 성능이 높아질 수록 그 정도가 약해지는 것을 확인할 수 있다. 이를 바탕으로 논문에서는 Bounding Box의 성능도 중요하지만 어려운 Keypoint를 잘 찾는 것이 중요하다고 말하고 있다.

 

Cascaded Pyramid Network

Table 3을 보면 CPN 모델이 8-stage Hourglass 모델이나 Dilation을 적용한 ResNet 모델보다 AP와 FLOPs 모두에서 성능이 더 좋은 것을 확인할 수 있다. OHKM을 사용하였을 때 성능이 더 좋았던 것 또한 확인할 수 있다.

 

Table 4는 CPN 모델의 디자인 별 실험 성능을 나타낸다. GlobalNet과 RefineNet 구조를 같이 사용하였을 때의 성능이 가장 좋았으며 GlobalNet의 출력으로 생성되는 4가지 Feature Map($C_2 ~ C_5$)을 모두 사용하였을 때 가장 성능이 높은 것을 확인하여 더 많은 수준의 Feature를 사용할 수록 그 성능이 높아지는 것을 알 수 있었다(Table 5)

 

Online Hard Keypoints Mining

GlobalNet에서는 L2 Loss를 사용하지만 RefineNet에서는 어려운 Keypoint를 학습하기 위해 OHKM Loss를 사용한다. 이 방법은 OHEM에서 영감을 받았지만 차이점이 존재한다.

OHKM Loss를 적용한 방식은 다음과 같다.

  • 한 사람에 대한 N개의 Keypoint(COCO의 경우 17개) 중 상위 M개의 Keypoint Loss를 Penalty로 설정(M < N)
  • Table 6를 참고하면 M=8일 때의 성능이 가장 좋았던 것을 알 수 있다.

Loss가 높은 M개의 Keypoint를 어려운 Keypoint라고 설정하고 해당 Keypoint에 대해서만 Penalty를 주는 것으로 보인다.

실험 결과 GlobalNet에서는 L2 Loss를, RefineNet에서는 OHKM Loss를 사용할 때의 성능이 가장 좋았다.

 

OHKM Loss 코드 참고

https://github.com/HRNet/HRNet-Human-Pose-Estimation/blob/master/lib/core/loss.py

 

HRNet-Human-Pose-Estimation/lib/core/loss.py at master · HRNet/HRNet-Human-Pose-Estimation

This repo is copied from https://github.com/leoxiaobin/deep-high-resolution-net.pytorch - HRNet/HRNet-Human-Pose-Estimation

github.com

다양한 Input Size에 대한 실험도 진행했고,

최종적으로 COCO 데이터 셋으로 실험 성능을 평가한 결과도 좋은 성능을 보였다.

본 논문에서는 FPN+MaskRCNN이라는 좋은 Detector의 성능에 힘입어 OHKM Loss를 사용해 어려운 Keypoint를 잘 잡아내는 모델인 CPN을 제안하였다. 기존에 존재하는 좋은 기법들을 다 가져다 써서 성능을 높인 느낌이들며 그만큼 여러 실험을 통해 본인들이 제안한 구조의 장점이 잘 나타나는 것 같다(마치 METER 논문과 비슷한 느낌이다). 

OHKM Loss는 "어려운" Keypoint를 찾는다는 점에서 개인적으로 진행하는 연구에서 활용할 수 있을 개념일 것 같고 결국 Pose Estimation 분야도 여러 해상도의 존재하는 정보를 잘 합치는 것이 성능향상에 주된 역할을 하였다는 걸 보여준 논문이라고 생각한다. 

세 줄 요약

1. 어려운 Keypoint를 잘 예측하기 위한 CPN(Cascaded Pyramid Network) 모델을 제안
2. CPN은 모든 해상도의 정보를 잘 집약할 수 있는 FPN 구조를 활용한 GlobalNet, Hourglass와 OHKM Loss를 사용한 RefineNet을 결합한 구조를 띈다.
3. 실험을 통해 CPN 네트워크가 왜 이렇게 구성되었는지를 잘 설명하였으며 COCO 데이터 셋에서 좋은 성능을 보였다.

댓글