brunch

You can make anything
by writing

C.S.Lewis

by 서진호 Aug 18. 2020

미디어파이프 BlazePose를 사용한 실시간신체추적

2020년 8월 13일(목)-구글 AI 리서치 블로그

비디오의 포즈 추정은 증강 현실에서 물리적 세계 위에 디지털 콘텐츠와 정보들을 놓는 데 중요한 역할을 하며, 수화 인식, 전신 제스처 제어, 심지어 요가, 댄스 및 피트니스 애플리케이션의 기초를 형성할 수 있는 신체 운동을 정량화합니다. 피트니스 애플리케이션의 포즈 추정은 다양한 포즈(예: 수백 개의 요가 아사나), 수많은 자유도, 폐색(예: 신체 또는 기타 물체가 카메라에서 볼 수 있는 팔다리를 폐색함) 및 다양한 외모 또는 의상으로 인해 특히 어렵습니다.

[그림 1] BlazePose는 피트니스 및 댄스 사용 사례에 대한 결과 (사진 포함)

오늘날 우리는 CVPR 2020CV4ARVR 워크숍에서 발표한 인체 자세 인식에 대한 새로운 접근 방식인 BlazePose발표합니다. 우리의 접근 방식은 머신러닝(ML)을 사용하여 인간 자세 추적을 제공하여 33개의 단일 프레임에서 본 몸체의 2D 경계 부분(landmark)을 추론합니다. 표준 COCO 토폴로지를 기반으로 하는 현재 포즈 모델과 달리 BlazePose는 더 많은 키포인트를 정확하게 현지화하여 피트니스 애플리케이션에 고유하게 적합합니다. 또한 현재의 최첨단 접근 방식은 추론을 위해 주로 강력한 데스크톱 환경에 의존하는 반면, 우리의 방법은 CPU 추론을 통해 휴대폰에서 실시간 성능을 달성합니다. GPU 추론을 활용하면 BlazePose는 초 실시간 성능을 달성하여 얼굴 또는 손 추적과 같은 후속 ML 모델을 실행할 수 있습니다.

[그림 2] MediaPipe의 상체 BlazePose 모델

토폴로지

현재 인체 포즈의 표준은 COCO 토폴로지로, 몸체, 팔, 다리 및 얼굴에 걸쳐 17 개의 경계부분(landmark)로 구성됩니다. 그러나 COCO 키포인트는 발목 및 손목 지점에만 국한되며 손과 발에 대한 스케일 및 방향 정보가 부족하므로 피트니스 및 댄스와 같은 실제 응용 프로그램에 필수적입니다. 더 많은 키포인트를 포함하는 것은 손, 얼굴 또는 발과 같은 도메인 별 포즈 추정 모델의 후속 적용에 중요합니다.


BlazePose를 통해 우리는 COCO, BlazeFace 및 BlazePalm 토폴로지의 상위 집합 인 33 개의 인체 키포인트의 새로운 토폴로지를 제시합니다. 이를 통해 얼굴 및 손 모델과 일치하는 포즈 예측만으로 신체 의미를 결정할 수 있습니다.


[그림 3] BlazePose 33 키포인트 토폴로지 (COCO (녹색 색상) 슈퍼 세트)


개요: 포즈 추적을 위한 ML 파이프라인

포즈 추정을 위해 검증된 2 단계 detector-tracker ML 파이프라인을 사용합니다. 이 파이프 라인은 감지기를 사용하여 먼저 프레임 내에서 포즈 관심 영역 (ROI)을 찾습니다. 추적기는 이후 이 ROI에서 33 개의 포즈 키포인트를 모두 예측합니다. 동영상 사용 사례의 경우 감지기는 첫 번째 프레임에서만 실행됩니다. 후속 프레임의 경우 아래에 설명된 대로 이전 프레임의 포즈 키포인트에서 ROI를 도출합니다.

[그림 4] 사람의 포즈 추정 파이프 라인 개요

BlazeFace를 확장하여 포즈 감지

포즈 감지 및 추적 모델로 구성된 전체 ML 파이프라인의 실시간 성능을 위해서는 각 구성 요소가 프레임 당 몇 밀리 초만 사용하여 매우 빨라야 합니다. 이를 달성하기 위해 우리는 몸통의 위치에 대한 신경망에 대한 가장 강력한 신호가 사람의 얼굴(고대비 기능과 비교적 작은 외형 차이로 인해)이라는 것을 관찰합니다. 따라서 우리는 1인 사용 사례에서 머리를 볼 수 있어야 한다는 강력한 가정(많은 모바일 및 웹 애플리케이션에 대해 유효함)을 만들어 빠르고 가벼운 포즈 디텍터를 획득합니다.


결과적으로 우리는 밀리 초 미만의 BlazeFace 모델에서 영감을 얻은 얼굴 감지기를 포즈 감지기의 프락시로 훈련했습니다. 이 모델은 프레임 내에서 사람의 위치만 감지하며 개인을 식별하는 데 사용할 수 없습니다. 예측된 키포인트에서 ROI를 도출하는 Face Mesh 및 MediaPipe Hand 추적 파이프라인과는 달리, 인간 포즈 추적의 경우 인체 중심, 회전 및 배율을 원으로 확실하게 설명하는 두 개의 추가 가상 키포인트를 명시적으로 예측합니다. 레오나르도의 비트루비안 남성에서 영감을 받아 사람의 엉덩이 중간점, 전체 사람을 둘러싸는 원의 반경, 어깨와 엉덩이 중간 점을 연결하는 선의 경사 각도를 예측합니다. 따라서 특정 요가 아사나와 같이 매우 복잡한 경우에도 일관된 추적이 가능합니다. 아래 그림은 접근 방식을 보여줍니다.

[그림 5] BlazePose 감지기에서 예측한 두 개의 가상 키포인트와 얼굴 경계 상자를 통해 정렬된 비트루비 안 남자

추적 모델

파이프라인의 포즈 추정 구성 요소는 각각 3 개의 자유도(x, y 위치 및 가시성)와 위에서 설명한 2 개의 가상 정렬 키포인트를 사용하여 33 개의 모든 키포인트의 위치를 예측합니다. 계산 집약적인 히트맵 예측을 사용하는 현재의 접근 방식과 달리, 우리 모델은 아래와 같이 모든 키포인트의 결합된 히트맵 / 오프셋 예측으로 감독되는 회귀 접근 방식을 사용합니다.

[그림 6] 네트워크 아키텍처 추적 : 히트맵 주도를 통한 회귀

특히, 훈련 중에 먼저 히트 맵과 오프셋 손실을 사용하여 네트워크의 중앙 및 왼쪽 타워를 훈련합니다. 그런 다음 히트맵 출력을 제거하고 회귀 인코더 (오른쪽 타워)를 훈련하므로 히트 맵을 효과적으로 사용하여 경량 임베딩을 주도합니다.


아래 표는 다양한 훈련 전략으로 인한 모델 품질의 절제 연구를 보여줍니다. 평가 지표로 20 % 허용 오차 (PCK@0.2)의 정확한 포인트 백분율을 사용합니다 (2D 유클리드 오차가 해당 사람의 몸통 크기의 20 % 보다 작은 경우 포인트가 올바르게 감지된다고 가정). 사람의 기준선을 얻기 위해 우리는 어노테이터에게 여러 샘플에 중복 주석을 달도록 요청했고 평균 PCK@0.2 인 97.2를 얻었습니다. 훈련 및 검증은 균일하게 샘플링된 다양한 포즈의 지리적으로 다양한 데이터 세트에서 수행되었습니다.

고객의 다양한 하드웨어를 충당하기 위해 속도와 품질의 균형이 다른 라이트와 전체 2개의 포즈 추적 모델을 소개합니다. CPU 성능 평가는 XNNPACK을 사용합니다. 모바일 GPU의 경우 TFLite GPU 백엔드를 사용합니다.


애플리케이션

인간의 포즈에 따라, 피트니스와 요가 추적기 등 다양한 응용 프로그램을 만들 수 있습니다. 예를 들어, 스쿼트와 푸시 업 카운터를 제공합니다. 이들은 사용자의 통계를 자동으로 계산하고, 실행된 운동의 품질을 확인할 수 있습니다. 이러한 유스 케이스는 추가적인 classifier 네트워크를 사용하거나 정규화된 포즈 공간에서 가장 가까운 포즈에 일치하는 간단한 조인트 페어 와이즈 거리 조회 알고리즘을 사용하여 구현할 수 있습니다.

[그림 7] 검출된 몸의 자세에 따라 실행된 운동 카운터의 수. 왼쪽 : 스쿼트(쪼그리고 일어서기). 오른쪽 : 팔 굽혀 펴기

결론

Android, iOS, Python으로 실행되는 MediaPipe 상체의 유스 케이스를 타겟으로 한 버전의 BlazePose을 출시했습니다. BlazePose는 ML Kit의 이후 릴리스에서 Pose detection API를 통해보다 폭넓은 모바일 개발자 커뮤니티에서도 사용할 수 있게 됩니다. 모바일 도메인과는 별도로, Web 기반의 브라우저 버전도 미리 봅니다. 이 인간의 포즈 인식 기능을 더 넓은 연구 개발 커뮤니티에 제공하여 창조적인 유스 케이스의 외관, 새로운 응용 프로그램의 자극, 새로운 연구의 길이 열릴 것으로 기대하고 있습니다.


우리는 이 기술을 좀 더 견고하고 안정된 추적에서 더욱 다양한 인간의 포즈와 활동으로 확장할 예정입니다. 제공된 모델 카드는 이러한 모델의 사용은 Google의 AI 원칙과 반드시 일치하도록 용도 제한 모델의 공정성에 대해 자세히 설명하고 있습니다. 이 기술을 공개하여 연구 개발자 커뮤니티의 멤버 전체가 새로운 창조적인 아이디어와 응용 프로그램에 자극을 줄 수 있는 우리는 믿고 있습니다. 우리는 당신이 그것을 사용하여 무엇을 구축할 수 있는지를 보고 흥분하고 있습니다!

[그림 8] 요가 사례에서 BlazePose 결과

감사의 말

Fan Zhang, Artsiom Ablavatski, Yury Kartynnik, Tyler Zhu, Karthik Raveendran, Andrei Vakunov, Andrei Tkachenka, Marat Dukhan, Raman Sarokin, Tyler Mullen, Gregory Karpiak, Suril Shah, Buck Bourdon, Jiuqiang Tang, Ming Guang Yong, Chuo-Ling Chang, Juhyun Lee, Michael Hays, Camillo Lugaresi, Esha Uboweja, Siarhei Kazakou, Andrei Kulik, Matsvei Zhdanovich 및 Matthias Grundmann 등 우리와 함께 기술 작업에 참여한 모든 팀원에게 특별히 감사드립니다. 



원본 제목: MediaPipe BlazePose를 사용한 온 디바이스 실시간 신체 자세 추적(On-device, Real-time Body Pose Tracking with MediaPipe BlazePose)
게시자 : Valentin Bazarevsky 및 Ivan Grishchenko, Google Research 연구원
원본 링크: https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html


Real-Time AR Self-Expression with Machine Learning 블로그(영문): https://ai.googleblog.com/2019/03/real-time-ar-self-expression-with.html

Using AI for Sign Language 비디오(영문): https://www.youtube.com/watch?v=N0Vm0LXmcU4
Move Mirror: You move and 80,000 images move with you 블로그(영문): https://blog.google/technology/ai/move-mirror-you-move-and-80000-images-move-you/
RepNet: 비디오의 반복 계산하기 블로그(한글): https://brunch.co.kr/@synabreu/85
MediaPipe BlazePose 솔루션 프레임워크: https://google.github.io/mediapipe/solutions/pose
BlazePose: On-device Real-time Body Pose tracking 논문: https://arxiv.org/abs/2006.10204
Fourth Workshop on Computer Vision for AR/VR: https://www.mixedreality.cs.cornell.edu/workshop/2020/papers
CVPR2020 : http://cvpr2020.thecvf.com
COCO 2020 Keypoint Detection Task: https://cocodataset.org/#keypoints-2020
MediaPipe Face Detection 솔루션 프레임워크: https://google.github.io/mediapipe/solutions/face_detection
MediaPipe Hands 솔루션 프레임워크: https://google.github.io/mediapipe/solutions/hands
 On-Device, Real-Time Hand Tracking with MediaPipe 블로그(영문): https://ai.googleblog.com/2019/08/on-device-real-time-hand-tracking-with.html
BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs 논문: https://arxiv.org/abs/1907.05047
BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs 논문: https://arxiv.org/abs/1907.05047
XNNPACK 라이브러리 오픈소스: https://github.com/google/XNNPACK 
TensorFlow Lite GPU Delegate: https://www.tensorflow.org/lite/performance/gpu
MediaPipe 솔루션 프레임워크: https://mediapipe.dev
MLKit : https://developers.google.com/ml-kit/
Pose detection for MLKit: https://developers.google.com/ml-kit/early-access/pose-detection
Model card of MediaPipe BlazePose Upper-Body: https://drive.google.com/file/d/1tW-O4wE0SsluKNE7TLfRUgCxVFopwa1k/view
이 블로그는 2018년 8월 31일(목), Google AI 리서치 블로그 기사를 영한 번역한 것입니다. 또한 이 번역 글은 정보 공유 목적으로만 작성했으므로 어떠한 상업용으로 사용할 수 없으며, 원본 저작물 모두 구글에게 저작권이 있음을 알려 드립니다. (First Draft Version)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari