Mediapipe를 사용하면서 CPU에서도 실시간 inference가 가능할 정도로 가벼운 pose estimation 모델이 있다는 것이 신기했다.
Pose estimation은 아직 다른 도메인처럼 모델 발전 역사가 체계적으로 정리돼있지 않아 일단은 SOTA, 오픈 라이브러리가 있는 모델을 우선으로 리뷰해볼 예정.
0. Abstract
BlazePose는 모바일에서도 human pose estimation에 대한 real-time inference가 가능하다. Google Pixel 2 기준으로 30fps로 33개의 keypoint를 출력한다.
BlazePose의 novel solution은 heatmap과 regression을 모두 이용해 lightweight pose estimation을 한다는 점이다.
1. Introduction
최근 pose estimation 모델은 heatmap을 이용해 각 관절에 대한 heatmap을 생성해 각 관절 좌표에 대한 offset을 수정하는 방식이 일반적인 접근이었다. Heatmap 기반 접근 방식은 multi people일 경우 최소한의 overhead로 적용 가능하지만, single person에 대한 real-time inference를 하기에는 모델이 너무 크다는 단점이 있다.
Regression 기반 모델은 컴퓨팅 리소스가 저렴하고 확장성이 크나 occlusion에 취약하다는 단점이 있다. Hourglass network를 stack해 적은 parameter로도 성능을 상당히 높인 Newell의 방식을 착안해, BlazePose는 1) encoder-decoder network로 모든 관절의 heatmap을 예측한 후, 2) 다른 encoder로 regression을 이용해 각 관절의 좌표를 예측했다. Inference할 때엔 heatmap 부분을 제외해 모바일에서도 돌릴 수 있을 정도로 가볍게 만들었다.
2. Model Architecture and Pipeline Design
2.1. Inference pipeline
Pipeline은 lightweight body pose detector와 pose tracker 순서로 구성된다. Tracker는 keypoint 좌표, 사람 존재 유무, 현재 프레임의 ROI를 예측한다. Tracker에서 사람이 없다고 판단할 경우 다음 프레임에서 detector를 재실행한다.
2.2. Person detector
최근 object detection solution은 대부분 NMS(Non-Maximum Suppression)으로 후처리를 한다. 하지만 NMS는 포옹이나 악수 같은 keypoint가 겹치는 복잡한 동작에서는 오작동이 일어난다는 단점이 있다.
얼굴은 명확한 feature가 있고 상대적으로 편차가 적다는 장점이 있어 detector의 기준을 얼굴로 정했다. Detector가 가볍고 빠르게 동작하기 위해 single person일 경우 머리는 항상 화면 안에 있을 것이라는 가정을 했다.
Face detector로는 BlazeFace를 이용해 사람의 골반 중앙값, 사람을 포함하는 원의 크기, 사람의 기울기 등 추가적인 alignment parameter를 예측했다.
2.3. Topology
Topology는 BlazeFace, BlazePalm, Coco의 합집합인 33개의 keypoint를 제시했다.
OpenPose, Kinect와는 달리 회전, 크기와 ROI의 위치를 추측하기 위해 최소한의 keypoint만을 사용했다.
2.4. Dataset
기존 heatmap 방식과 달리 tracking based solution은 initial pose aligment가 필요하다. 이를 위해 데이터셋은 사람 전체가 보이거나, 골반과 어깨 keypoint가 명확하게 annotation 될 수 있는 경우로 제한했다. 모델이 데이터셋에 없는 occlusion도 잘 잡아낼 수 있다는 것을 증명하기 위해 occlusion을 가정하는 augmentation을 적용했다.
데이터셋은 1인 혹은 적은 사람이 일반적인 포즈를 하고 있는 이미지 60K, 1인이 피트니스 동작을 하고 있는 이미지 25k로 구성되고 annotation은 모두 사람에 의해 만들어졌다.
- Pose alignment: face detector에서 예측한 골반 중앙값, 기울기 등의 alignment parameter
2.5. Neural network architecture
BlazePose는 heatmap, offset, regression을 결합한 방식을 이용했다.
Heatmap과 offset loss는 train에만 이용하고 inference할 때엔 output layer를 제거해 경량화하여 regression encoder에서 활용할 수 있도록 했다. 해당 방식은 Newell의 Stacked Hourglass에 영감을 받아, encoder-decoder heatmap-based network 뒤에 regression network가 따라오는 구조를 stack하는 방식으로 적용했다.
Skip-connection은 적극적으로 사용해 high-low level feature 간의 밸런스를 유지할 수 있도록 했다. 하지만 regression encoder의 gradient는 heatmap feature로 backpropagate 되지 않게 해 heatmap prediction과 regression accuracy를 높일 수 있었다.
Heatmap branch로 backpropagate하는 skip connection이 없다면 heatmap branch의 학습은 어떻게 하는 것일까?
- Heatmap 방식의 output은 어떻게 학습하는지 찾아보기
2.6. Alignment and occulusions augmentation
BlazePose는 지원하는 angle, scale, translation의 범위를 일부로 제한해 network의 용량을 줄여 컴퓨팅 리소스를 적게 사용하면서도 빠르게 만들 수 있었다.
Detection stage나 이전 프레임 keypoint에 기반해, 이미지가 neural network의 input으로 들어갈 때 골반 중앙값이 이미지의 중앙으로 오도록 사람을 정렬했다. 이를 위해 rotation은 골반 중앙값과 어깨 중앙값을 이은 L line이 y축과 평행하게, scale은 모든 body point가 bbox에 들어올 수 있도록 계산했다. 또한 10% scale과 shift augmentation을 적용해 tracker가 프레임과 왜곡된 정렬 사이에서도 잘 작동할 수 있도록 했다.
보이지 않는 keypoint에 대한 예측을 보강하기 위해 train 도중 여러 색깔로 된 직사각형을 무작위로 만들어 occlusion을 가정하고, 각 keypoint가 occlusion 됐는지와 각 예측이 정확한지 판정하는 각 포인트별 visibility classifier를 추가했다. 이를 통해 사람의 상체 부분만 보인다든가, 신체의 대부분이 보이지 않는다든가 하는 경우에도 사람을 잘 추적할 수 있었다.
3. Experiments
- 베이스라인: OpenPose
- 데이터셋: 1~2명의 사람이 포함된 1000장의 이미지
- AR dataset: 모든 자세
- Yoga/Fitness dataset: 요가/피트니스 자세
- Metric: PCK@0.2
- 일관성을 위해 MS Coco 기준 17개 keypoint만 사용
BlazePose는 capacity를 다르게 해 2가지 모델을 학습시켰다.
- BlazePose Full: 6.9 MFlop, 3.5M Params
- BlazePose Lite: 2.7 MFlop, 1.3M Params
AR dataset에서는 성능이 약간 떨어지는 반면, Yoga/Fitness dataset에서는 성능이 더 뛰어나고, 속도는 25~75배 더 빠르다는 것을 확인할 수 있었다.
4. Applications
BlazePose는 on-device, single person specific pose estimation model이기 때문에 수화, AR, 요가/피트니스 등 다양한 분야에 쓰일 수 있다. 이 모델은 모바일 CPU로도 33개의 keypoint를 real-time으로 inference하기 때문에 이후에 hand pose, facial geometry estimation의 backbone이 될 수 있다.
더 많은 keypoint, 3D, 다양한 keypoint 속성 등은heatmap/offset map을 기반으로 하지 않기 때문에 각 feature마다 추가적인 full-resolution layer를 필요하지 않아 그러한 방향으로 후속연구를 확장할 수 있을 것이다.
'개발 및 공부 > Pose Estimation' 카테고리의 다른 글
Pose Estimation 모델 정리 (0) | 2022.04.13 |
---|---|
OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields 논문 리뷰 (0) | 2022.01.25 |