Human Pose Estimation
Human Pose Estimation(이하 HPE)은 크게 2D와 3D로 나뉜다.
3D HPE는 2D 이미지에서 (x,y,z) 3차원 좌표들을 찾아내는 기술
Pose 와 face landmark
face landmark
- 얼굴 인식에서는 물리적으로 거의 고정되어있다.
Pose
- 팔, 다리가 상대적으로 넓은 범위와 _자유도_를 갖는다.
- 자유도를 높다는 것은 데이터분포를 특정하는데에 어려움이 있다는 뜻이고, 더 복잡하다.
접근법
1. Top-down
- 사람들의 key-point를 정확하게 찾기 위해 object detection을 사용
- crop 한 이미지 내에서 keypoint를 찾아내는 방법으로 표현
- detector가 선행되어야 하고 사람 숫자마다 알고리즘을 적용해야 하기 때문에 느리다.
2. Bottom-up
- detector가 없고 keypoint를 먼저 검출
- 한 사람의 keypoint를 clustering
- detector가 없어서 속도 느려짐이 크지않다. 그러나 keypoint 검출 범위가 넓어 성능이 떨어진다.
Human keypoint detection 1. top-down
자유도가 높은 사람의 동작
human pose estimation은 keypoint의 localization을 찾는점에서 비슷하지만 손목, 팔꿈치 등의 joint keypoint 정보는 얼굴의 keypoint보다 훨씬 다양한 위치와 변화를 보인다.
모든 keypoint가 영상에 담기지않는걸 볼 수 있다.
DeepPose
딥러닝 이전의 전통적 pose estimation 모델은 한계가 있다.(graphical tree model은 같은 이미지에 두번 연산하여 연산효율이 떨어지고 그에 비해 성능이 부족하다 등.)
pose estimation 분야에 CNN을 적용한 방법이 나타나기 시작했는데 아래가 처음으로 딥러닝 기반 Keypoint localization 모델을 제안한 것.
https://arxiv.org/pdf/1312.4659.pdf
x,y 좌표를 직접적으로 예측하는 Position regression 문제로 인식하여 human detection을 통한 crop된 사람이미지를 이용하여 딥러닝 모델에 입력하고 x,y좌표를 출력하게 만든다. ==> 성능은 그닥 좋지않음(초기모델)
Efficient Object Localization using CNN
이 논문의 제안 아이디어
- key point의 위치를 직접 예측하기보다는 key point가 존재할 확률 분포를 학습을 하는 것.
https://nanonets.com/blog/human-pose-estimation-2d-guide/
human pose(keypoint)
위의 영상에서 Orig measured 영상을 보면 kalman filter를 적용한 영상보다 불안정하다는것을 알 수 있다.
매 이미지마다 몇 개의 픽셀씩 차이가 생기고 있는것인데 어떤 곳을 찍고싶은데 에러가 더해져서 저장되는 것.
자연상태에서 일어나는 확률 분포는 가우시안 분포일 가능성이 큰데, 이런점에 착안하여 label을 x,y좌표에서 x,y를 중심으로 하는 heatmap으로 변환했다. 딥러닝 모델은 이 heatmap을 학습한다.
"key point가 존재할 확률"을 학습하게 된 이후로 성능이 비약적으로 향상된다.
기존 FLIC데이터가 머리,어깨,팔꿈치,손목 정도의 적은 Keypoint를 가지고 있었다면, MPII는 몸의 관절부위 16개의 keypoint를 갖는다.
Tompson이 제안한 방법은 heatmap 학습뿐만 아니라 모델에서도 개선을 이뤘다.
https://arxiv.org/pdf/1411.4280.pdf
Tompson이 제안한 모델은 Coarse model과 fine model로 나뉘어지는데, 두 모델 간에 관계는
coarse model에서 32X32 heatmap을 대략적으로 추출한 후 multi resolution 입력을 coarse heatmap 기준으로 crop한 뒤 fine model에서 refinement를 수행한다는 관계를 갖고있다.
논문에서 wight sharing이 적용된 부분에서는 coarse model과 fine model이 같은 모델이며 weight를 공유한다.
목적이 같기 때문에 빠른 학습이 가능하고 메모리, 저장공간을 효율적으로 사용가능.
Human keypoint detection 2.
Convolutional Pose Machines
CVPR 2016에 발표된 CPM은 완전히 다른 multi-stage 구조를 제안.
원래 multi-stage 방법들은 DeepPose에서 지속적으로 사용되어 왔는데, crop 연산 등 비연속적이고 미분 불가능한 stage단위로 나눠져있었기 때문에 학습과정을 비효율적으로 여러번 반복하는 방법을 사용해왔다.
CPM은 end-to-end로 학습할 수 있는 모델을 제안.
Stage 1은 image feature를 계산하는 역할.
Stage 2는 keypoint를 예측하는 역할.
g1, g2 모두 heatmap을 출력하게 만들어서 재사용이 가능한 부분은 weight sharing 할 수 있도록 한다.
stage 1 구조는 고정, stage 2 부터는 stage 2 구조를 반복해서 추론
stage 2 부터는 입력이 heatmap이 되기 때문에 stage 단계를 거칠수록 keypoint가 refinement되는 효과
↓
단점은 multi-stage 방법을 사용하기 때문에 end-to-end로 학습이 가능하더라도 그대로 학습하는 경우는 높은 성능을 내기 어렵다.
따라서 stage단위로 pretraining을 한 후 다시 하나의 모델로 합쳐서 학습을 한다.
CPM을 다루는 이유는 성능때문이다. receptive field를 넓게 만드는 multi stage refinement 방법이 성능향상에 크게 기여.
주황색 실선이 Tompson알고리즘.
Stacked Hourglass Network
논문 : https://arxiv.org/pdf/1603.06937.pdf
Hourglass
Stacked Hourglass Network의 기본적인 구조는 아래와 같다.
Conv layer와 pooling으로 이미지를 인코딩하고 upsampling layer를 통해 feature map의 크기를 키우는 방향으로 decoding한다.
feature map의 크기가 작아졌다가 커지는 구조여서 hourglass 라고 표현한다.
기존 방법들과 차이점은
- 1. feature map upsampling
- 2. residual connection
pooling 으로 image 의 global feature를 찾고 upsampling 으로 local feature를 고려하는 아이디어가 hourglass의 핵심.
hourglass는 U-Net(https://arxiv.org/abs/1505.04597)과 비슷하다.
MPII에서 처음으로 90%를 넘는 성능
SimpleBaseline
https://arxiv.org/pdf/1804.06208.pdf
SimpleBaseline 에서는 간단한 encoder-decoder 구조를 설계한다.
이 구조로 73.7%의 성능을 COCO에서 달성하였으며, ECCV'18에 출판되었다.
hourglass와 직접 비교해보면 아래와 같은 결과가 나온다.
resnet50만 사용한 간단한 구조가 hourglass와 같은 SOTA를 이겼다는 성과를 이루었다.
구조가 간단하므로 코드와 함께 살펴본다.
Deep High-Resolution Network (HRNet)
논문 : https://arxiv.org/pdf/1902.09212.pdf
HRNet은 SimpleBaseline 저자가 참여한 모델이기때문에 같은 철학을 공유
Stacked hourglass, Casecaded pyramid network 등은 multi-stage 구조로 이루어져있으므로 학습 및 추론 속도가 느리다.(단, 하이퍼파라미터를 최적화 할 경우 1-stage 보다 성능이 좋다).
SimpleBaseline과 같은 HRNet은 간단함을 추구하므로 1-stage를 고수한다. 구조도 간결하고 사용하기도 쉽다.
(a) : hourglass
(b) : CPN(Cascaded Pyramid Networks)
(c) : SimpleBaseline - transposed conv
(d) : SimpleBaseline - dilated conv
SimpleBaseline과 다른 알고리즘의 구조 공통점/차이점
구조 공통점
high resolution -> low resolution인 encoder와 low resolution -> high resolution인 decoder구조
구조 차이점
hourglass : encoder와 decoder 비율이 비슷
SimpleBaseline : encoder가 무겁고 decoder는 가벼운 모델
(a), (b)는 skip connection이 있고, (c)는 없다.
※ 여기서 잠깐, skip connection은 왜 사용할까?
- pooling 할 때, 소실되는 정보를 high level layer에서 사용하여 detail한 정보를 학습하기 위하여 사용한다.
- 성능이 좋게나온다.
아이디어 : HRNet에서는 down sample layer를 만들고 작아진 layer feature 정보를 다시 upsampling해서 원본 해상도 크기에 적용하는 모델을 제안
- CPM이나 hourglass에서는 heatmap supervision이 필요했지만, HRNet은 필요 없다.
- heatmap을 regression하는 방식으로 학습하고 MSE loss를 이용.
결과
- AP성능을 보면 기존의 모델들보다 4% 성능향상
학습이 간단하면서 성능도 좋아 많이 사용되는 모델이다. 재생산성도 높음.
'DeepLearning|MachineLearning' 카테고리의 다른 글
DeepLearning 기초 개념 : batch_size, steps, epoch, iteration (0) | 2022.04.28 |
---|---|
TTA(Test-Time Augmentation) (0) | 2022.04.28 |
Face Detection (0) | 2022.01.13 |
OCR(Optical Character Recognition) (0) | 2022.01.06 |
Segmentation (0) | 2022.01.05 |