민프
[AI | ML][HPE] MoveNet에 대해서 알아보자 (with Tensorflow Lite) 본문
오늘은 TensorFlow Lite에서 제공되는 MoveNet, PoseNet, BlazePose 중 MoveNet에 대해서 알아보겠습니다.
소개
Movenet은 2021년 Google I/O에서 발표되었고,
TensorFlow.js에서 사용할 수 있는 초고속 및 정확한 모델로, 실시간으로 인체의 17개 키포인트를 감지할 수 있습니다.
해당 모델은 Lightning과 Thunder 두 가지 버전으로 제공되며,
Lightning은 지연 시간이 중요한 애플리케이션용이고
Thunder는 높은 정확도가 필요한 애플리케이션용입니다.
MoveNet의 예측 방식은 CenterNet의 기본 구조나 아이디어를 사용하되, 특정 부분을 수정하고 최적화 하여서 사용했고,
MobileNetV2를 특징 추출기로 사용하여서, 경량화 된 모델로써 모바일 디바이스에서 빠르게 동작할 수 있도록 설계 되었습니다.
다음으로 아키텍쳐에 대해서 알아보겠습니다.
아키텍쳐 분석
MoveNet은 Feature extraction + prediction (2 Stage) 구조를 이루고 있습니다.
여기에서 Feature extraction는 FPN(Feature pyramid network)이 부착된 MobileNetV2를 사용하고,
prediction head는 4개 파트로 구성되어있습니다.
위 사진들을 참조하여 설명해보겠습니다.
1. Person center heatmap
모델은 먼저 "person center heatmap"을 사용하여 프레임 내의 모든 사람의 인스턴스의 중심을 예측합니다.
각 사람의 중심은 해당 사람에 속한 모든 키포인트의 산술 평균으로 정의되고,
프레임 중심에서의 역거리에 의해 가중치가 부여된 최고 점수를 가진 위치가 선택됩니다.
2. Keypoint regression field
객체 중심에 해당하는 픽셀에서 "keypoint regression output"을 슬라이싱하여 사람의 초기 키포인트 세트를 생성합니다.
이는 중심에서 외부로의 예측이며,
다양한 스케일에서 작동해야 하기 때문에, 회귀된 키포인트의 품질은 정확하지 않을 것입니다.
3. Person keypoint heatmap
키포인트 히트맵의 각 픽셀은 step 2에서 만들어진 회귀된 키포인트로부터의 거리에 반비례하여 가중치가 조정됩니다.
이는 특정 픽셀이 회귀된 키포인트에 가까울수록 더 높은 가중치를 받게 되며, 먼 거리에 있는 픽셀은 더 낮은 가중치를 받게 됩니다.
4. 2D per-keypoint offset field
각 출력 특징 맵 픽셀에서 각 키포인트의 정확한 하위 픽셀 위치까지의 로컬 오프셋을 예측합니다.
각 키포인트 채널에서 히트맵 최대값의 좌표를 검색하여 최종 키포인트 예측 세트를 선택합니다.
그런 다음 로컬 2D 오프셋 예측이 이러한 좌표에 추가되어 세련된 추정치를 제공합니다.
Training Datasets
MoveNet은 COCO Keypoint Dataset Validation Set 2017와
Google의 내부 데이터셋인 Active Dataset Evaluation Set 두 가지 데이터가 사용되었습니다.
COCO DataSet는 다양한 모션 블러를 나타내는 피트니스 및 댄스 애플리케이션에는 적합하지 않습니다.
따라서 유튜브의 요가, 피트니스, 댄스 영상에 키포인트(COCO 기준 17가지 키포인트 적용)를 라벨링하여 제작 된 Active Dataset을 학습을 하였습니다.
1. COCO Keypoint Dataset Validation Set 2017
이 데이터셋은 다양한 장면, 인스턴스 크기,
그리고 가림막이 있는 야외 이미지(자연 빛 아래에서 찍은 사진)를 포함하고 있습니다.
원래 검증 세트에는 총 5,000개의 이미지(이미지와 주석)가 포함되어 있고,
이 중 단일 인물이 포함된 이미지만이 MoveNet 모델의 평가 세트로 유지되며, 총 919개의 이미지가 있습니다.
이 데이터셋은 일반적인 야외 시나리오에서 모델의 성능을 평가하기 위해 선택되었습니다.
2.. Active Dataset Evaluation Set
이 데이터셋은 YouTube의 피트니스, 요가, 댄스 비디오에서 샘플링된 이미지를 포함하고 있으며, 사람들의 움직임을 캡처합니다.
다양한 자세와 움직임, 더 많은 모션 블러가 포함되어 있습니다.
또한 프레임에 단일 인물이 있는 1161개의 이미지가 포함되어 있고,
피트니스와 인간의 움직임과 같은 특정 도메인에서 모델의 성능을 평가하기 위해 선택되었습니다.
Performance (성능)
아래 사진은 각각의 데이터 셋의 인식률을 보여주고 있는데 COCO 데이터 셋만해도 절반 이상의 인식률을 보여주고 있는데
Active 데이터 셋은 확실히 더 좋은 인식률을 보여주고 있는 것을 확인할 수 있습니다.
따라서 위 데이터셋을 사용한 MoveNet 모델이 다용한 그룹과 환경에서 어떻게 성능을 발휘하는지 잘 보여주고 있는 성능표 입니다.
포즈 분류 동작
마지막으로 MoveNet과 Tensorflow Lite(TFLite)를 통하여 어떻게 포즈 분류를 할까?
쉽게 이야기 하자면
MoveNet은 키포인트 감지를 해주고
TFLite에서는 키포인트를 이용해 포즈 분류를 해주게 됩니다.
아래 사진을 보면서 설명해보겠습니다.
1. 키포인트 감지(MoveNet Zone)
입력으로 사진이 들어오게 되면
처리를 MoveNet이 이미지에서 키포인트(ex: 머리, 어깨, 팔, 다리 등의 위치)를 감지하고
출력으로 감지된 키포인트의 좌표를 알려줍니다.
2. 포즈 분류(Tensorflow Lite Zone)
입력으로 MoveNet에서 감지된 키포인트의 좌표 데이터가 들어오게 되면
처리를 Tensorflow Lite 모델이 키포인트 데이터를 분석하여 특정 요가 포즈와 메칭을 하게 되고,
출력으로 분류된 요가 포즈의 이름을 알려주게 됩니다.
참고링크
https://cocodataset.org/#keypoints-2020
https://storage.googleapis.com/movenet/MoveNet.SinglePose%20Model%20Card.pdf
https://www.includehealth.com/
https://www.tensorflow.org/hub?hl=ko
https://www.tensorflow.org/lite/examples/pose_estimation/overview?hl=ko