목차
안녕하세요 윤도현입니다. 오늘 소개할 논문은 2019년 CVPR에 개제된 CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark 이라는 논문입니다. 이 논문을 리뷰하게된 이유는 다음과 같습니다. 최근 물체끼리 서로 간섭하는 상황(ex, 군중데이터)에서 Top-down 방식의 PE 모델을 사용하였고 PE 성능이 떨어지는 문제가 발생하였습니다. 그 원인은 bbox 내에 여러 인물이 포함되었기 때문이었고, 이 논문은 이러한 문제를 해결한 최초의 논문이었기 때문에 리뷰하게 되었습니다. 리뷰에 앞서 이 논문을 한마디로 정리하면 다음과 같습니다.
Detector를 건드리지 않고 Pose Estimator만으로 군중 데이터 상황에서 PE 성능을 끌어올린 논문
1. Introduction
앞서 설명드린 내용과 동일하기 때문에 생략하겠습니다.
2. Related Work
기존 연구에 대한 내용이므로 아래 글을 참조해주시면 감사하겠습니다.
https://dohyeon.tistory.com/121
[논문리뷰]2D Human Pose Estimation: A Survey
안녕하세요 윤도현입니다. 오늘 소개할 논문은 2022년 Multimedia System이라는 저널에 개제된 2D Human Pose Estimation: A Survey 이라는 논문입니다. 이 논문을 리뷰하게된 이유는 최근 회사에서 Fish Pose
dohyeon.tistory.com
3. Method
본 논문에서 제안하는 방법은 다음과 같습니다.
- Human Detection: 이미지 내에서 인간 영역의 bbox를 탐지합니다.
- Joint-candidate SPPE: 각 bbox 내 Joint 마다 여러 개의 Joint 후보 위치를 생성합니다.
- Person-joint Graph:사람과 관절 후보들 간의 연결 관계를 그래프 형태로 표현합니다.
- Globally Optimizing Association: 그래프 모델에서 최적의 Joint Association을 찾습니다.
(논문 구성과 다르게 방법론 순서대로 설명해보겠습니다.)
3.1 Human Detection
- 이미지 내에서 인간 영역의 Bounding Box를 탐지합니다.
- 이 논문에서는 YOLOv3 모델을 사용하여 bbox를 탐지하였습니다.
- 탐지된 bbox는 다음 단계인 Joint-candidate SPPE의 입력으로 사용됩니다.
3.2 Joint-candidate SPPE
- SPPE는 Human Detection 단계에서 생성된 각 bbox 내에서 사람의 관절 위치를 추정합니다.
- 기존 SPPE와 달리, 이 논문에서는 bbox 내 각 Joint에 대해 여러 개의 후보군을 생성합니다.
- 이는 bbox 내 여러 인물이 포함되는 상황에 대응하기 위해서라고 설명합니다.
- 생성된 Joint 후보군들은 각각의 신뢰도 점수(Response Score)를 가지며, 다음 단계인 Person-joint Graph의 입력에 사용됩니다.
- Joint-candidate SPPE 모듈은 훈련 과정에서 Joint-candidate 손실함수를 사용합니다.
- 이 손실함수는 Target Joint(정답)에 가까워지도록, Interference Joint(간섭,오류)에 멀어지도록 설계되었습니다.
$$ Loss_i = \frac{1}{K}\sum_{k=1}^{K} MSE[P_i^k, T_i^k + \mu C_i^k] $$
\(Loss_i\): i번째 Human Proposal에 대한 Loss 값
\(K\): 관절의 총 개수
\(MSE\): Mean Squared Error (평균 제곱 오차)
\(P_i^k\): i번째 Human Proposal에 대한 k번째 관절의 예측 Heatmap
\(T_i^k\): i번째 Human Proposal에 대한 k번째 관절의 Target Heatmap (정답 위치에 Gaussian 분포)
\(C_i^k\): i번째 Human Proposal에 대한 k번째 관절의 Interference Joint Heatmap (주변 Interference Joint 위치에 Gaussian Mixture 분포)
\(\mu\): 감쇠 계수 (Attenuation Factor), Interference Joint의 영향을 줄이는 역할 (0과 1사이의 값, 논문에서는 0.5 사용)
3.3 Person-joint Graph
- 이 단계에서는 Human Detection에서 얻은 bbox들과 Joint-candidate SPPE에서 얻은 Joint 후보군들을 연결하여 그래프를 구성합니다.
- 본 논문에서는 겹쳐진 bbox들이 동일한 Joint를 예측하는 경향을 고려해서 먼저 동일한 Joint를 나타내는 후보군들을 그룹화하여 Joint Node를 생성합니다.
Joint Node란?
Joint Node란 겹쳐진 bbox 내에서 동일한 Joint를 예측하는 문제를 해결하기 위해 동일한 Joint 후보들을 하나로 묶어주는 기능을 합니다. 예를 들어서 설명해보겠습니다.
1. Human Detection:
- 이미지 내에 매우 가깝게 위치한 3명의 사람이 존재합니다.
- Human Detection 결과, 3개의 Bounding Box (B1, B2, B3)가 생성됩니다.
- B1에는 3명이 모두 포함됩니다.
- B2, B3에는 각각 1명씩만 포함됩니다.
2. Joint-candidate SPPE (오른쪽 팔꿈치만 고려):
- 각 Bounding Box에 Joint-candidate SPPE를 적용하여 오른쪽 팔꿈치 Joint 후보군을 생성합니다.
- B1에 적용: 3명에 대한 오른쪽 팔꿈치 Joint 후보군 List1, List2, List3 생성
- B2에 적용: 1명에 대한 오른쪽 팔꿈치 Joint 후보군 List4 생성
- B3에 적용: 1명에 대한 오른쪽 팔꿈치 Joint 후보군 List5 생성
3. Person-joint Graph 및 Joint Node 생성:
- Joint 후보 그룹화: List1, List2, List3, List4, List5의 모든 Joint 후보들을 모아서, 클러스터링 기준(수식 (2))을 만족하는 후보들끼리 그룹화합니다. 예를 들어, List1의 후보들과 List4의 후보들이 서로 가깝고, Gaussian Response 크기 등을 고려했을 때 같은 팔꿈치를 나타낼 가능성이 높다면, 이들을 같은 그룹으로 묶습니다.
- Joint Node 생성: 클러스터링된 Joint 후보들을 바탕으로 Joint Node를 생성합니다. 만약 List1, List4의 후보들이 하나의 그룹으로 묶였다면, 이들을 대표하는 Joint Node (Node1)이 생성됩니다. List2, List3, List5의 후보들도 마찬가지로 클러스터링 기준을 만족하는 후보들끼리 그룹화되어 각각 Node2, Node3 등의 Joint Node를 생성할 수 있습니다.
- Person-joint Graph 연결: 각 Human Proposal(B1, B2, B3)과 Joint Node(Node1, Node2, Node3 등)를 연결합니다. 예를 들어, B1에서 생성된 Joint 후보(List1, List2, List3)들이 Node1, Node2, Node3 생성에 기여했다면, B1은 Node1, Node2, Node3 모두와 연결됩니다. B2에서 생성된 Joint 후보(List4)가 Node1 생성에 기여했다면, B2는 Node1과 연결됩니다.
- bbox와 Joint Node 간의 연결은, 해당 Joint Node가 해당 bbox에서 생성된 Joint 후보를 포함하는 경우에 진행됩니다.
- 이때, 연결 강도는 해당 Joint 후보의 신뢰도 점수를 가중치로 사용합니다.
3.4 Globally Optimizing Association
- 앞서 구성한 그래프에서 최적의 연결을 찾아 각 bbox에 가장 적합한 Joint를 연결합니다.
- 이는 그래프 매칭 문제인데, 전체 그래프에서 Edge 가중치 합이 최대인 조합을 찾아서 연결합니다.
- 가중치 합이 최대인 조합을 찾는 방법은 Kuhn-Munkres 알고리즘을 사용합니다.
- 알고리즘의 수식은 다음과 같습니다.
\(\max_d G = \max_d \sum_{i,j,k} w_{i,j}^{(k)} \cdot d_{i,j}^{(k)}\)
s.t. \(\sum_j d_{i,j}^{(k)} \leq 1, \forall k \in \{1, ..., K\}, \forall i \in \{1, ..., M \}\)
\(\sum_i d_{i,j}^{(k)} \leq 1, \forall k \in \{1, ..., K\}, \forall j \in \{1, ..., N_k \}\)
\(d_{i,j}^{(k)} \in \{0, 1\}, \forall i, j, k\)
\(G\): Person-Joint 그래프
\(w_{i,j}^{(k)}\): Person Node i와 Joint Node j 사이의 k번째 Joint에 대한 연결 가중치 (Response Score)
\(d_{i,j}^{(k)}\): Person Node i와 Joint Node j 사이의 k번째 Joint 연결을 유지할지 여부를 나타내는 이진 변수 (0 또는 1)
\(K\): Joint 타입의 총 개수
\(M\): Human Proposal의 총 개수
\(N_k\): k번째 Joint 타입의 Joint Node 총 개수
- 또한 이렇게 계산된 Globally Optimizing Association 계산복잡도는 NMS와 동일하여 실시간 추론에 적합하다는 것을 증명하였습니다.
4. CrowdPose Dataset
이 장에서는 저자가 구축한 CrowdPose Dataset에 대해 소개합니다. 논문에서 말하는 "혼잡한 장면"이 정확히 뭔지 정의하고, 데이터를 어떻게 수집했는지, 데이터셋 통계에 대해 설명합니다.
4.1 Crowding Level Definition
- 기존 데이터셋들은 이미지 내 사람 수를 기준으로 붐비는 정도를 측정했지만 본 논문에서는 객체들끼리 가려지는(occlusion) 정도를 기준으로 붐비는 정도를 측정하였습니다.
- 붐비는 정도를 나타내는 Crowd Index의 수식은 다음과 같습니다.
\text{Crowd Index} = \frac{1}{n} \sum_{i=1}^{n} \frac{N_b^i}{N_a^i}
\(n\): 이미지 내 총 사람 수
\(N_a^i\): \(i\)번째 사람 bounding box 내에, \(i\)번째 사람에게 속하는 joint의 수
\(N_b^i\): \(i\)번째 사람 bounding box 내에, \(i\)번째 사람이 아닌 다른 사람에게 속하는 joint의 수
\(\frac{N_b^i}{N_a^i}\): \(i\)번째 사람 인스턴스의 군중 비율 (crowd ratio)
즉, 각 사람 bounding box에서 자기 자신에게 속한 joint 수 대비 다른 사람에게 속한 joint 수의 비율을 평균낸 값입니다. 이 값이 클수록 군중으로 인한 가려짐이 심하다고 판단할 수 있습니다.
- 기존 MSCOCO, MPII, AI Challenger와 같은 기존 public benchmarks는 겹치지 않는 사람이 많아 붐비는 정도가 낮았습니다. 따라서 기존 연구들이 붐비는 상황에서의 pose estimation 성능이 떨어졌습니다.
- 따라서 제안하는 CrowdPose 데이터셋은 Crowd Index가 0과 1사이에서 균등 분포를 갖도록 설계되어, 다양한 군중 환경에서의 성능을 평가할 수 있도록 하였습니다.
4.2 Data Collection
- 본 논문에서는 실제와 유사한 다양한 환경에서 모델을 평가하기 위해 혼잡한 장면뿐만 아니라 일상적인 장면도 포함하였습니다.
- 기존 벤치마크 데이터셋(MSCOCO, MPII [2], AI Challenger [30])의 이미지를 Crowd Index에 따라 20개의 그룹으로 나누었습니다. Crowd Index는 0부터 1까지의 값을 가지며, 각 그룹 간 간격은 0.05입니다.
- 결과적으로 총 30,000장의 이미지를 각 그룹에서 균등하게 샘플링했습니다. 이는 다양한 혼잡도를 가진 이미지들을 벤치마크에 포함시키기 위해서 입니다.
4.3 Image Annotation
- 기존 데이터셋에도 annotation 되어 있었지만, 데이터셋마다 label 형식이 일관되지 않았습니다.
- 예를 들어, MSCOCO는 17개, MPII는 16개, AI Challenger는 14개의 keypoint를 annotation 했습니다. 또한, 혼잡한 장면에서는 사람 annotation 작업자가 실수를 할 가능성이 더 높았습니다.
- 그래서 본 논문의 저자들은 새롭게 annotation을 진행하였습니다.
- 14 Keypoint 정의 및 annotation: 30,000개의 이미지에 대해 14개의 keypoint와 full-body bounding box를 annotation 했습니다.
- 이미지 품질 분석 및 선택: 새로운 annotation을 기반으로 30,000개의 이미지에 대한 Crowd Index를 다시 분석하고, 20,000개의 고품질 이미지를 선택했습니다.
- Interference Keypoint annotation: 이미지 내의 각 사람을 crop한 후, 각 bounding box에서 interference keypoint를 annotation 했습니다.
- Cross annotation: 최소 두 명의 annotation 작업자가 각 이미지에 대해 annotation을 수행했습니다. 두 annotation 간의 편차가 큰 경우 오류로 간주하고 해당 이미지를 다시 annotation 했습니다. 마지막으로, 각 keypoint 위치의 평균값을 사용하여 annotation 품질을 확보했습니다.
'논문 리뷰' 카테고리의 다른 글
[논문리뷰]2D Human Pose Estimation: A Survey (0) | 2025.03.12 |
---|---|
[논문리뷰]HRNet for Human Pose Estimation: 고해상도 표현을 이용한 포즈 추정 (3) | 2025.01.31 |
[논문리뷰]Tracking Persons-of-Interest via Unsupervised Representation Adaptation: 제약없는 동영상에서 얼굴 추적 (0) | 2024.12.29 |
[논문리뷰]FaceNet: Face Recognition의 기본모델 (2) | 2024.12.12 |
[논문리뷰]UniDepth: 일반화된 Monocular Metric Depth Estimation! (2) | 2024.11.20 |