본문 바로가기

논문 읽기/한 가지 논문 깊게읽기

[ICCVW'23] DW pose: Effective Whole-body Pose Estimation with Two-stages Distillation (24.11.05)

 

[1]

 

연구실에서 Human Pose Estimation 프로젝트를 진행하게 되어, 관련 논문을 읽고 있다. 이번 기회에 공부도 할 겸, 공부하고 있는 내용을 블로그에 선별적으로 정리하고자 한다.

 

Human Pose Estimation은 3차원 비전 분야에서도 오래된 주제이자 매우 중요한 연구 분야다. 그 중 DW pose 논문은 실사용이 가능할 정도의 FPS를 확보하면서도 준수한 추론 성능을 보여준다. 물론 최근에는 사피엔스나 그보다 더 강력한 모델들이 등장했지만, 이들 모델이 어떤 방식으로 성능을 향상시켰는지 살펴볼 만 하다. 본 컨퍼런스는 아니기에, 담겨 있는 contribution이 다소 간단하다.

 

한 줄 평:

더보기


" Knowledge distillation 쓸만하다. 모델 간에도 하고, 스스로도 하자. 두 번 하자 (실험적 결론)."

 

 

 

1 | Introduction

본 논문은 'Whole body pose estimation' 문제를 풀고자 한다.

이는 'Body pose estimation'을 수행하는 것보다 어렵다. 

 

내 생각엔, 아무래도 일반적으로 눈에 보이는 사람 관절은 대략 20~30개 수준이며, 눈에 예측 가능하다.

다만, 해당 문제에서는 얼굴의 랜드마크, 손가락 관절까지 추론해야 하는 문제가 있기 때문이다.

 

코드 기준, 대략적인 개수는 아래와 같았다. (실제와 조금 다를 수 있다.)

# Body: 0~17 idx 
# Foot: 18~23 idx
# Faces: 24~91 idx
# Hands: 92~112 idx
# hands: 113~133 idx 

 

실제로 추론해야 하는 관절 개수만 해도, 단순 몸의 전체를 풀 때 보다 훨씬 많고,

손가락 관절, 얼굴의 랜드마크는 카메라에서 작게 보이기(= 적은 픽셀을 차지하고) 때문에, 문제가 어렵다.

 

저자는 크게 네 가지 이유를 드는데, 

  1. the hierarchical structures of the human body: 일반적으로 사람 관절을 추정할 때, 각 관절을 떨어져 있게 추론하는 건 현실적이지 않다. 사람의 관절은 연결성이 있고, 각 관절의 위치가 인접한 관절의 위치에 영향을 주기 때문이다. 근데 보통 추론할 때 이러한 계층적 구조를 고려하게 끔 되어 있지 않다. 
  2. the small resolutions of hand and face: 앞서도 말했듯, 예측 가능한 내용이다.
  3. the complex body parts matching for multiple persons in image: 일반적으로 포즈 추정을 위해선 바운딩 박스를 먼저 추론하고, 각 작은 이미지를 자르고 모델에게 입력하는 방식(top-down)으로 주로 푼다. 포즈 추정 문제가 어려워지면 (1) 바운딩 박스 추론 혹은 (2) 포즈 추정에 문제가 생겨서 그런 듯 하다.
  4. data limitation, especially for diverse hand pose and head pose for the whole-body images: 말 그대로, 아무래도 조건이 점점 많아져서 필요한 데이터가 부족하기 때문일거라고 생각한다.

 

여기까지가 본 논문에서 말하는 관련 연구의 일반적인 맥락이다.

이러한 추정을 하면서 경량화(lightweight) 된 모델을 활용해야 한다고 하는데, 뭐 크게 논리에 동의가 되진 않는다.

 

물론, 지식 증류(?, Knowledge distilation)나 여타 방법으로 신경망을 경량화한다면, 추론 환경에서 도움이 되는 건 동의한다.

다만, 해당 논문에서 말하는 왜 해당 문제를 풀 때, 경량화해야 하는 가는 크게 동의하진 않는다.

(지극히 개인적인 의견이다.)

 

2 | Related Work

맥락상 선행 연구 분야는, (1) 'Whole body pose estimation'과 (2) 'Knowledge distilation' 라고 한다.

 

(1)은 위에서 충분히 말했으니, (2)를 간단하게 정리하자면,

 

Knowledge Distilation

기존에 충분히 학습되어 있는 모델이 있다고 가정할 때, 이를 선생(teacher)라고 지칭한다.

선생(teacher) 모델이 출력하는 결과 logit을 soft label로 삼거나, 신경망의 중간 층(layer)의 특징을 학습 대상으로 삼아,

제자(student) 모델이 학습하는 방식을 말한다. 

 

이는 더 파라미터를 갖는 모델로의 전이를 위해서 많이 사용한다고 한다.

 

https://towardsdatascience.com/knowledge-distillation-simplified-dd4973dbc764

 

해당 논문에서는 'COCO-WholeBody' 데이터셋에 학습된 'RTMPose' 논문의 모델을 근간 모델로 활용한다.

구체적으로는 'RTMPose-x'모델의 중간 층 특징과 'RTMPose-l' 모델의 출력 logit을 활용한다.

 

3 | Method

제안 방법론이 분량도 적고, 다소 간단해서, 두 가지 분류로 나누어서 쉽게 설명이 가능하다.

따라서, 실험 환경 (데이터셋 통계, 모델 파라미터 등), 실험 결과 (성능 향상 추이 등)를 좀 더 세밀하게 확인하면 좋겠다.

 

크게는 아래 두 가지로 나뉘고, 그에 따라 논문도 단락을 구분했다.

  1. Stage1, 학습된 모델에서의 *KD: 선생(teacher) 모델의 중간층 특징 및 최종 출력 Logit을 기준으로 학생 모델을 학습한다.
  2. Stage2, 스스로 추가학습을 위한 KD: 학생(student) 모델이 스스로 추가적인 학습을 진행한다.

* KD: Knowledge Distillation

 

 

 

3.1 The First-stage distillation

기존 학습된 모델에서의 KD를 수행한다. 세 가지 손실 함수로 표현할 수 있는데, 각각은 간단하다.

 

 

3.1.1 Feature-based distillation

선생(teacher) 모델에서 특정 레이어에서 출력하는 특징 벡터를 학생 모델이 모방하는 손실 함수다.

 

신경망의 중간 층에서 출력하는 벡터의 차원만 맞아도 사용할 수 있는 손실 함수라고 생각하는데, 

선행 연구의 모델인 'RTMPose-x' 에서 추출된 특징을 가이드로 한 듯 하다.

 

Q. 어떤 층에 연결하는 게 타당한가?

어느 층에서 연결하는 게 타당할지는 의문이다. 예를 들어, 일반적으로 CNN의 1, 2번째 층에서는 패턴을 학습하는 것으로 보지만, 3번째 층 이상이 되면 특징들이 조합되면서 사람이 이해하기 어려운 형태로 학습된다고 이해하면 좋은데, 실제로 이렇게 특징의 각 픽셀 수준의 가이드를 준다면, 어떤 모달리티를 사용하는 지, 어떤 층에 연결하는 지도 중요할 수 있다.

 

Q. 실제로 어떤 모델을 KD로 학습했는 가? 

논문 내용을 보니, 'RTMPose-x'를 추출된 특징으로 활용할 땐 같은 모델을 사용해야 가능할 것 같다. 동일한 모델을 쓴다는 언급이 있다. 실험 별로는 동일한 모델이기에 다양한 모델을 바꿔 가면서 적용이 가능할 듯 하다.

 

 

3.1.2 Logit-based distillation

Logit의 distillation을 보여주기 위해서는 두 가지 손실함수(loss function)을 설명할 수 있다.

 

첫째, keypoints를 추론하기 위한 손실함수 (KD가 없는 선행연구와 같다). 일반적으로 사람 관절을 추정하기 위해선 각 조인트 별로 히트맵을 만들고 채널 개수 만큼의 히트맵 위치를 추정하는 방식으로 신경망을 학습한다. 명확한 조인트 좌표를 뱉는 방법도 있지만, 대체적으로 히트맵을 사용하는 편이 성능이 좋은 걸로 알고 있다. 다만, 본 제안 방식의 근간이 되는 RTM pose에서는 X, Y 축으로 차원을 줄여서 두 차원의 분류 문제처럼 신경망을 학습하고 있다는 게 특징이다. 따라서, 제안 논문에서도 해당 손실함수를 그대로 유지한다. $N$은 배치 내 사람의 수, $K$는 각 조인트의 개수 (133일 거다.), $W$는 관측 가능한 조인트 마스크이다. $L$은 X, Y의 픽셀 길이다. 

 

둘째, 선생 모델이 추론한 keypoints를 제자 모델이 따라가기 위한 손실함수. 위에서 언급한 $L_{ori}$와 형태는 유사하다. 위와 동일하고, 차이는 선생 모델이 추론한 Logit을 따라가게끔 한다는 점만 다르다.

 

Q. 왜 Pesudo label이 학습에 도움을 줄까?

학습 데이터가 증가하는 게 주요 이유라고는 하지만, 기 학습된 모델을 활용하기에 왜 정확히 그렇게 작동하는 지는 잘 이해가 안된다.

 

 

3.1.3 Weight-decay strategy for distillation

점진적으로 Logit loss와 feature loss가 줄어들게끔 하여, 신경망이 라벨 정보에 집중하게 하는 decay 방식이다. 당연히, 선생 모델을 모방하는 데만 집중하면 충분히 신경망을 학습 시키기 어려울 듯 하다. 따라서, 점진적으로 시간이 지나면서 정답 레이블을 잘 맞추도록 하는 $L_{ori}$가 강하게 반영되는 방식이다. $t$는 뭘까?  $\alpha, \beta$는 가중치로 손실함수 크기를 조절하는 파라미터 인 듯 하다. $t$는 각 epoch 이고, 분수 꼴이라서 시간이 지남에 따라서, 최종 출력 값이 0에 가까워진다.

 

 

3.2 The Second-stage distillation

두 번째 스테이지로, teacher-student 구조가 아니라 스스로 추가적인 학습 (KD)을 한다. 학습 레이블 없이 스스로의 $L_{logit}$만을 사용하는 게 특징적이다. ablation study에 의하면, 대체적으로 어떤 모델에 붙여도 성능이 높아졌다고 한다. $\gamma$는 가중치로 손실함수 크기를 조절하는 파라미터 인 듯 하다.

 

 

4 | Experiments

개인적으로 흥미로웠던 실험만 선별적으로 다룬다.

성능이 많이 증가했다.
각 스테이지 모듈을 붙이고, UBody 데이터를 사용하는 편이 성능이 좋다는 Ablation study이다.
Stage 2를 시행했을 때, 다양한 모델에서 스스로 성능이 높아진다. 다만 매우 크게 상승하는 건 아니라서, 범용적으로 다루기엔 애매한 방식인 듯 하고, 왜 그렇게 되는 가에 대해 분석이 부족해서 아쉽다.

 

 

학습을 위한 파라미터로는,

  • 학습 데이터로는 COCO 데이터셋(train2017/val2017)을 써서, 양 12만 장의 라벨된 이미지 사용.
  • UBody 데이터셋은 약 100만 장의 라벨된 이미지인데, 뭐 영상에서 나눠서 썼다고 한다 (수치는 부정확). 
  • 기존 RTMpose 학습 대비 5분의 1 소요 됐다고 하고,
  • 위에서 $\alpha$, $\beta$를 각각 0.00005, 0.1 정도로 써서, distillation은 크게 영향은 없는 듯 하다.
  • 네트워크 파라미터는 정확히 모르겠다.

 

 

5 | Reference

제안 논문 및 관련 코드

  1. https://openaccess.thecvf.com/content/ICCV2023W/CV4Metaverse/papers/Yang_Effective_Whole-Body_Pose_Estimation_with_Two-Stages_Distillation_ICCVW_2023_paper.pdf
  2. https://github.com/IDEA-Research/DWPose