Duplicate

Lecture 15 | 2D Human Pose Estimation

수강 일자
2023/03/04

2D Human Pose Estimation

Inout: 2D RGB Image, Output: 2D Keypoints
kk 개의 keypoints 들을 정의하면, output 은 k×2k\times2 matrix 임 (x,yx,y coorcinate)
인간은 다양한 pose 를 가지기 때문에 challenging 한 문제임.
Template Matching - An Early Approach
많은 templates 들을 준비하여, 해당 template 와 이미지의 특정 부분이 matching 되는지를 확인하여 pose 를 알아내는 방법론
Scale changes 나 rotation 을 고려해야 하고, 많은 template 들을 준비해야 하며, 좋은 matching 확인 방법을 만들어야 하기 때문에 어려운 방법임.

Idea: Detecting Each Pary by a Local Patch

Human 의 각 특징점들을 나누어서 찾을 수 있음.
하지만, 단순한 방법으로는 잘못된 matching 이 발생할 수 있고 이를 해결하기 위해서 human 이 일반적으로 가지는 spatial arrangement 에 기반하여 이런 mismatching 을 해결할 수 있음.

Pictorial Structure Models

Local Part 에 대한 pattern matching 을 하면서 human 의 configuration 을 (flexibility 를 어느정도 가지면서) 따르는 구조를 강제하고 싶어 만들어진 모델
좋은 예시로 Deformable Part Model (DPM) 이 있음.
Local pattern 과 pattern 간의 pairwise relation 을 정의하고 이 pattern relation 을 잘 만족하면서도 local detail 에 잘 match 되는 구조를 찾는 방법론
다음과 같은 수식으로 최적화된 local patch 의 matching 의 위치를 찾음.
S(I,L)=iVαiϕ(I,li)+ijEβijψ(li,lj)S(I,L) = \sum_{i\in V}\alpha_i \cdot \phi(I,l_i) + \sum_{ij \in E}\beta_{ij} \cdot \psi(l_i,l_j)
일반적으로 structure, edge 에 집중하기 위해서 이미지에서 color term 을 다 날리고 시작함.
lil_i 위치에 있는 local image 의 HoG Feature: ϕ(I,li)\phi(I,l_i)
Human local part ii 에 대한 Unary Template: αi\alpha_i
앞 항은 local matching, 뒷 항은 Human Configuration (tree structure) 에 대한 항목임.

Limitation of “Classic” (Hand-designed) Approaches

Double Counting Issue
일반적인 Tree Structure Model 로는 좌측 다리와 우측 다리를 구분할 수 있는 능력이 없음.
딥러닝의 필요성이 대두되고 변화가 시작됨.

DeepPose

Input: Image, Output: Coordinate of Each Joint
딥러닝 기반 방법론이기에 Feature 와 Structure, Spatial Relation 에 대해서 엔지니어가 고민할 필요가 없음.
이러한 방법론이 가능했던 이유는 Large Scale Datasets 가 등장하고 사용 가능해졌기 때문임.
MPII (2014): 25K Images from 40K people
COCO (2017): 79K Trainging Images, 13K Validation Images (Multi-Person)
COCO-WholeBody (2020): 250K Humans, Body + Hand + Face (133 keypoints)
전체 이미지를 통해 처음 keypoint 의 coorinate 를, 그 주변을 다시 한 번 통과시켜 keypoint 의 보정된 위치를 찾는 식으로 정확한 keypoint 를 찾아감.
기존에는 output 이 regression 을 통해 얻어낸 2D coordinate 였는데, coordinate 는 origin 이 필요함. Stage 가 거듭되면서 Input 의 범위가 달라지면서 coordinate 의 origin 이 달라지는 문제가 생김. → 학습이 어렵고 CNN 기반이 아니라서 별로였음.

Convolutional Pose Machines

2D Coordinate 값을 직접적으로 regression 하는 것이 아닌, 픽셀값에 strength 를 주는 방식
즉, output 은 heatmap 들의 집합이 됨. 찾으려는 keypoint 의 개수만큼 heatmap 을 산출하면 됨.
size:h×w×(P+1){\rm size}: h'\times w' \times (P+1)
Keypoint 의 수보다 하나 많은 (P+1)(P+1) Heatmap 을 산출하는 이유는 모든 keypoint 를 제외한 영역만을 highlighting 하는 heatmap (background) 를 산출하기 때문임.
Heatmap 의 크기는 Input 과 다를 수 있음.

Convolutional Pose Machines: Structure

여러 stage 로 이루어져 있고, 각 stage 는 heatmap 을 산출함.
이전 stage 에서 산출한 heatmap 이 spatial infromation 을 담고 있기 때문에 다음 stage 에서 process 된 representation 에 concatenate 되어 stage 가 가면 갈수록 더 정확한 heatmap 을 산출하게 됨.
Ground Truth heatmap 은 정해진 keypoint 위치 근처에 gaussian kernel 을 이용해서 근처의 값을 높여주는 작업을 진행하여 생성할 수 있음.
전체적인 학습 프로세스는 다음과 같음.
1.
Stage 1 에서 FC + Conv 로 이루어진 layer 를 통과하여 heatmap 을 산출하고 ground truth heatmap 과의 비교를 통해 loss f1f_1 을 산출함.
2.
Stage 2 에서 마찬가지로 FC + Conv 로 이루어진 layer 를 통과한 representation 과 이전 단계에서 온 heatmap 을 concatentate 하고 다시 좀 더 큰 receptive field 를 가진 (entire body part 를 봐야 왼팔, 오른팔을 구분할 수 있음…) Conv 에 태워 heatmap 을 산출하고 ground truth 와의 비교를 통해 loss f2f_2 를 산출함.
3.
2 를 반복함.
4.
f1,f2,f_1, f_2,\cdots 등을 이용해 최종 loss 를 정의하고 gradient descent 를 걸어 intermediate 한 부분에서도 gradient 가 흐르게 하여 gradient vanishing 문제를 해결함.
Heatmap + Intermediate Supervision + Large Receptive Field 의 사용이 이 방법론의 핵심임.
점점 recpetive field 을 늘리는 세팅이 DPM 에서 tree structure 를 통해 spatial configuration 을 고려하려고 했던 것을 달성할 수 있게 하는 역할을 함.

Stacked Hourglass

각 scale 마다 뽑아낸 정보를 propagation 시키는 approach 인데, 결과가 잘 나왔음.

Evaluation

만든 방법론이 얼마나 잘 되는지를 확인하기 위해서 metric 이 필요함. → 2D Human Pose Estimation 분야에서는 PCKh Metric (Percentage of Correct Keypoints) 을 주로 사용
일반적인 Pixel Error 를 사용하면, 이미지의 크기가 작으면 일반적으로 작은 경향이 생기므로, normalize 하는 과정이 필요함. → 머리 크기를 reference 로 하여 normalize 하려는 시도를 진행함.
Normalize 이후에는 pixel error 가 특정 threshold (보통 headsize 기준으로 정함) 보다 작은 joints 들을 correct 로 힘. → Correct 한 joint 의 비율이 PCKh Metric 임.

Multi-Person Pose Estimation

지금까지는 Single-Person Pose Estimation 인데, 이를 Multi-Person 에 적용하기 위해서는 naive 하게는 bounding box 를 모두 지정하면 되지만, 매우 time consuming 하고 occlusion 등에 정확하지 않음.
먼저 모든 점들을 찾은 다음에 사람 형태를 찾아 연결하는 방법에 대한 아이디어를 낼 수 있었음.
OpenPose 는 네트워크가 part 들에 대한 픽셀값 뿐만 아니라 conection 또한 산출하는 형태를 제안함.
각 픽셀 별로 방향성을 추가로 산출하여 연결된 body part 의 위치를 나타내도록 함. 이를 Part Affinity Field (PAF) 라고 부름.
기존 네트워크가 비슷하지만, PAF 를 추가로 산출하고 이 정보 또한 다음 단계로 갈 때 추가로 concatentate 되어 다음 heatmap 과 PAF 를 산출하는데 모두 사용되는 형태임.

Human Keypoint Datasets

보통은 Human Keypoint detection 과 같은 분야에서 Face → Body 순서로 문제를 해결함.
손의 경우는 아무도 안함…
데이터셋만 있으면 네트워크랑 방법론 다 있는데 하기만 하면 될듯해서 교수님이 직접 annotate 하심.

How to Make a Good 2D Hand Pose Detector

같은 이미지인데 annotation 이 완전히 다름.
처음에는 instruction 을 많이 주었지만 (Joint 가 맞고 아님을 자세히, 정확히 주었음.) 잘 안되었음.
돔 안에서 multiview 를 suprevision 으로 주는 방법을 사용해봄.
Mutiview 이미지에서 Corresponding Point 를 찾고 이를 기반으로 Triangulation 을 사용해 3D reconstruction 을 진행함.
몇몇의 annotation 이 잘 된 것들은 해당 joint 와 3D reconstruction 된 joint 가 matching 이 잘 되지만 그렇지 않은 것들은 그렇지 않음.
이 방법을 통해서 잘못된 annotation 을 찾을 수 있고 버릴 수 있음.
잘못된 annotation 은 반대로 완성한 3D reconstruction 에서 projection 을 통해 생성하게 됨.
이 방법으로 기존의 annotator 에서 실패하는 경우에서도 annotate 하여 데이터셋을 생성할 수 있었음.

DensePose

일반적인 keypoint 는 sparse 한데, dense 한 keypoints 들에 대한 detection 을 생각해볼 수 있음.
Dense Keypoint 를 정의하는 방법 ?
어떻게 해당 점을 설명할 수 있을까 ? → Keypoint 가 찍힌 Sample Image 를 준비하고 해당 Keypoint 들과 동일한 점을 다른 이미지에서 찾으라고 명시해주는 방법을 사용함.
Keypoint define 을 visual 로 진행함.
다양한 이미지에 대해서 해당 point 들을 찾는 방법으로 DensePose dataset 을 만들어 Mask-RCNN 으로 학습하여 일반적인 이미지에서 해당 keypoints 들을 찾을 수 있도록 함.