Computer Vision

Human Pose Estimation 기술 동향

햇농nongnong 2021. 5. 7. 16:50

[AI 콜로퀴움] 이경무 교수님의 'Human Pose Estimation 기술의 발전과 미래' 강연을 보고 정리한 글이다. 

(해당 강연은 www.youtube.com/watch?v=GBpnsFfLt2Q 에서 확인할 수 있다.)

 

< 딥러닝 이전의 휴먼포즈 추정기법 >

* 초창기 접근 방법 : pictorial structure model

 

- 사람의 신체를 신체부위(part)와 관계(spring)로 모델링. 영상에서 해당 부위를 매칭함으로써 포즈 추정. 최초의 휴먼포즈 추정 기법

- Mixture of parts : 더 작은 단위의 신체파트와 이들의 결합으로 표현. 유연성과 정확도 향상.

 

* 이미지 뿐 아니라 거리정보(depth) 기반 포즈 추정 기법 == Kinect (거리측정장비)

 

- Microsoft 가 개발한 단기간에 가장 많이 팔린 컴퓨터 하드웨어. Kinect 이용해 xbox 적용. 장비 없이 자기가 움직이면 그대로 게임에 적용가능.

 

* Kinect 을 가지고 human pose estimation 기법 == random decision forest

 

- 딥러닝이 나오기 전 random decision forest 가 머신러닝 쪽에서 가장 훌륭한 방법 중 하나였지만, 딥러닝 이후 지금은 random forest 별로 사용 x.

- Kinect 가 좋은 기술 만들었지만 사업적으로 성공하지는 못함 : privacy 문제(집안에 카메라 설치하는 거부감), 재미있는 응용소프트웨어 게임들이 많이 나오지 못해서 적용 불가. 결국 Kinect 단종.

 

딥러닝 기반 휴먼포즈 추정기법 >

 

* 2014년부터 딥러닝이 휴먼 포즈에 적용되기 시작함

 

- <DeepPose> by Toshev : 최초의 딥러닝 기반 2D 휴먼포즈 추정 기법의 논문.

- 몇 개의 간단한 CNN + Fully connected layer 달아서 이미지 들어오면 원하는 관절의 x, y 좌표 값이 나오게 함. 이 좌표 값을 가지고 원 영상으로 가서 estimated 된 좌표의 주위로 다시 crop 한 이후 조금 더 자세히 보고 더 정확한 x, y 좌표 값을 찾는 방식을 recursive 하게.

- 입력 RGB 영상에 대해 CNN-regressor 를 이용해서 점진적으로 신체 joint 2D 좌표를 추정. 하지만 결과는 기존의 classic 한 방법보다 크게 좋지 않음. (첫 딥러닝 휴먼포즈 논문임에도 불구 1487회 인용 밖에)

 

--> 이유 : 네트워크 구조 + output 자체를 x, y 포지션 값 직접 내려고 하는게 문제. 너무 정확한 값을 추정하라고 하니까 네트워크가 힘들어함.

 

- 그래서 2015년 뉴욕대 딥러닝의 3대 대가 얀 레쿤 그룹’ : output x,y 좌표 대신에 block 으로 하자. 확률을 나타내는 확률값으로 output 을 나타내자. == heatmap.

 

* Heatmap 의 이용

 

- 한 점이 아니고 좌표를 나타내는 확률값으로 하자. 여러 input variation 을 잘 cover하고 robust . Heatmap 중에서 가장 높은 확률을 주는 position output 으로 만들자. 실제적으로 이런 구조, heatmap 을 사용함으로써 (물론 네트워크도 다르지만) 엄청난 성능 향상.

- 좌표 대신 joint 가 나타날 확률 (heatmap) 을 추정함으로서 정확도 향상.

- 그래프 모델과 CNN 을 결합함으로써 joint 들간의 위치관계 사용

- 여전히 신체 구조적 정보 부족 : 여전히 신체가 갖는 독특한 정보. Human body 의 구조적 정보라던지 context 를 이용하지 못하는 단점이 있음.

 

< Context, Receptive field, local & global feature >

 

* Context 와 신체 구조 정보의 활용

- 작은 부위만 보면 잘 모르고, 전체(맥락)를 봐야 잘 알 수 있다. --> 맥락 정보를 사용하자!

 

- 2016년에 맥락을 활용한 논문이 나옴.

- CPM(convolutional pose machines) : body joint 들의 공간적 관계 정보 학습을 위하여 receptive field 를 이용

- context 를 본다는 것은 큰 영역을 봐야한다는 것.

- deep CNN 이 쭉 가면서 중간의 layer의 한 노드는 원 영상의 영역을 보게 되어있는데, 깊이 갈수록 점점 큰 영역을 보게됨. 이게 receptive field.

 

- Receptive field 를 크게 해야 전체 global context 정보를 얻을 수 있음. 따라서 굉장히 깊게 네트워크를 쌓음. 동시에 pooling 을 통해서 size 를 줄여가서 훨씬 더 큰 receptive field 를 얻을 수 있음.

이렇게 해서 원 영상의 정보와 context 정보를 활용해서 우리가 원하는 key point 를 찾을 수 있음.

- 순차적으로 receptive field 를 키우고 context 정보를 이용하여 joint 추정의 정확도를 높임

 

* 전역(global)과 지역(local) 특징 정보의 활용

 

- CPM 은 크게만 보자고 하는 것인데, 크게 보지만 정확한 position 을 찾으려면 local 한 지역적인 정보도 잘 봐야함. 따라서 크게도 보고 해당하는 위치에서의 정보도 둘다 잘봐야함. 이 전역특징, 지역특징을 모두 잘 활용할 수 있을까?

 

- 이게 2016년의 ECCV 에서 발표된 “a stacked hourglass network”

 

- 풀링과 업스케일링으로 이루어진 hourglass 네트워크를 연속으로 사용하여 다중 스케일에서의 전역과 지역적 특징을 모두 활용.

: 모래시계 형태의 하나의 모듈을 보면, 레이어의 사이즈가 점점 작아졌다가 다시 커지는 형태. 풀링을 하며 작아지고 다시 업 스케일링 하며 커지는 형태. Pooling 하면서 receptive field 를 크게 보는 효과가 있고, 업 스케일링 하면서 resolution 이 커지니까 local 한 정보를 다시 잘 보게 됨. 이렇게 해서 양쪽 정보를 같이 잘 활용할 수 있는 구조. 이런 네트워크를 여러 개를 연속사용함으로써 효과를 얻을 수 있음.

 

- CPM 보다 훨씬 좋은 결과를 가져옴.

- residual module + intermediate supervision

 

< Multi person 2D Pose >

- 지금까지는 한 사람 대상으로 pose 추정이었다면, 여러 사람 대상으로 pose 추정.

- 2017년에 CVPR 에 멀티 휴먼포즈 추정기법 OpenPose 가 처음으로 나오게 됨.

 

* 딥러닝 기반 2D 멀티 휴먼 포즈 추정 기법

 

- OpenPose : 최초의 딥러닝 기반 2D 멀티 휴먼 포즈추정 기법

- Bottom-up 방식 : 입력영상내의 모든 2D joint 들을 추정한 후, joint 들간의 관계성 (part affinity field) 정보를 이용하여 개별 사람의 포즈 검출

- 한 장의 영상에 여러 사람이 등장하고 일단 모든 가능한 body joint 를 다 찾음.

일단 찾은 후에 어떤 joint 가 어떤 사람것인지 알기 위해 이 논문이 제안한 방법은 “part affinity field” 정보 이용.

 

- 어떤 사람의 한 body point 가 있으면, 그 사람의 shoulder point 에서부터 그 사람의 팔 관절 point 가 어디에 있을까 하는 벡터를 같이 찾음.

그렇게 해서 다른 사람의 왼쪽 팔 관절이 있다고 하더라도 본인에 해당하는 팔의 관절을 잘 찾을 수 있음.

이렇게 두개의 정보를 따로 찾아냄으로써 개별 사람에 해당하는 body point 를 따로따로 그룹핑할 수 있음.

 

* 현재 SOTA 2D 다중 휴먼 포즈 추정 기법

 

- 현재 2D 멀티 휴먼 포즈 추정 기법 가장 최고의 성능을 나타내는 것은?

- COCO dataset 이라는 public benchmark. 그 안에 keypoint challenge 라는 리더보드(순위 점수판)가 있고, 거기에 학습데이터와 test data 가 있어서 본인이 개발한 알고리즘을 올리면 순위가 나오게 됨. 현재까지 1등인 방법이 Megvii. 네트워크를 살펴보면, hierarchical(계층적으로) 하게 scale space 에서 정보를 각각 뽑음(Global, local 정보를 활용하겠다는 것). refine network 를 각각 통과하고 다시 fusion 하고 또 한번 같은 네트워크를 recursive 하게 refine. Recursive 하게 refine 많이 해줌으로써 성능을 높임. 굉장히 큰 네트워크이고 성능면에서는 가장 우수한 네트워크.

 

* Refinement 기법 – PoseFix

 

- refine 관점에서 보면, 2019CVPR 에서 발표한 논문.

- PoseFix : 기존 시스템의 에러를 줄이는 후처리시스템

- 대부분의 휴먼포즈추정시스템은 공통적인 에러특성을 가지고 있으므로 실제 에러특성 확률 모델을 이용해 가상의 에러 데이터를 합성한 refine network 를 학습

: 어떤 네트워크는 당연히 에러를 가지고 있을텐데, 많은 pose estimation system 들에서 공통적인 에러 발견. 특정 왼쪽 shoulder point 는 특정한 error pattern 을 가지고 있고, 발목의 joint 들은 특별한 error distribution 을 공통적으로 가지고 있었음. 이런 것들을 통해서 joint 에 대해 statistical model 을 세울 수 있고, statistical model 을 통해 가상적인 에러 데이터를 만들 수 있음.

Ground truth 를 가지고 에러모델을 정의하면 에러 데이터가 나오고, 그럼 pair 가 생성되는 것.

가상으로 만든 에러와 ground truth 를 가지고 correction 하는 네트워크를 디자인해서 학습시켜버리면 correction network, refinement network 이 됨.

어떤 네트워크라도 기존의 네트워크에 이 네트워크를 붙여주면 error correction 해주게 됨.

기존의 모든 네트워크에 posefix 를 붙였더니 다 성능이 올라감(작게는 2.5 에서 7.3 까지 올라감, 굉장히 큰 것)

 

 

< 3D Human Pose >

- 실제는 3차원에서 사람들이 움직임. 3차원에서 해야지 의미가 있을 것임. 왼팔이 앞인지 오른팔이 앞인지는 z 축에서 구별할 수 있는 것이니까 실제로는 3차원으로 하는 것이 realistic 한 것.

- Depth 기반의 문제와 RGB 영상 기반의 문제로 나눌 수 있음.

 

* RGB 기반 2D 포즈로부터 3D 포즈 추정 기법

 

- 최초의 single 휴먼 3D 포즈 추정기법

- 3D 포즈 추정문제를 ‘2D 포즈 추정’ + ‘Lifting’ 문제로 분리 해결

: 이미지를 주었을 때 3차원 포즈 추정은 어떻게 할 것인가? 이 문제에 대해 처음으로 접근했던 것이 한 장의 RGB 영상이 들어오면 일단 2D pose 를 추정하고, 2D pose 가지고 lifting network 를 통해 3차원 pose 로 바꾸어 줌.

 

* RGB 기반 3D 다중 휴먼 포즈 추정 기법

 

- 단일 영상에서의 대상 사람의 실제 거리 측정의 모호성 존재

- 학습을 통하여 대상의 나이, 자세 등을 파악하여 영상 내 크기와 실제 거리와의 모호성을 해결

: 문제는 얼만큼 떨어져 있냐 알아야함. 사실 한 장 영상에서 보면, 사람을 detect 했을 때 detect window 가 생기는데, window 크기로 봐서는 그 사람이 실제로 어디에 있는지 알 수가 없음. 두 사람 중 어느 사람이 카메라에 가까운지 먼지 알기 어려움. Window 사이즈만 가지고는 어떤 사람이 더 가깝게, 멀게 있는지 알기 어려움.

-->대상의 나이, 자세 등의 정보 이용으로 모호성 해결

 

< 3D shape and pose >

- 이제는 pose 뿐만이 아니라 shape 까지 원함.

- 단일 RGB 영상으로부터 인체의 3D shape 과 포즈 정보를 동시에 추정하는 최초의 기법

: 하나의 영상이 주어졌을 때 사람의 3차원적인 pose 뿐만이 아니라 body3D shape 까지도 같이 복원하자는 연구가 최근에 많이 있음. 하나의 마라토너 영상이 들어오면 관절이 좌표 뿐만이 아니라 그 사람의 naked body shape 까지도.  

- parametric human 모델 (SMPL) 사용

: 특정한 parametric human model 을 가지고 있어서 그 모델을 들어온 영상 내 사람의 pose 에 맞도록 parameter 를 추정함.