딥러닝

Mediapipe는 다중인식 되지 않는다. MoveNet을 이용해보자

lhg010524 2024. 8. 23. 16:54

지난번 Mediapipe로 간단한 LSTM을 거쳐 동작을 인식하는 것까지는 성공했지만, 프로젝트의 최종 목표: 다수의 사람들 사이에서 동작을 인식하는 것은 실패로 돌아갔다. 단일 객체만 인식하는 Mediapipe는 Openpose와 호환이 되지 않았고, Openpose 또한 일반적인 노트북에서 구동하기 무거운 사양이기에 다른 라이브러리를 찾아봤다. 

 

Multi detection이 가능하고, 가벼워야 한다. 이 조건을 모두 만족하는 모델, MoveNet을 사용하기로 결정.

 

Google Research에서 TensorFlow.js로 개발한 경량화된 자세 추정 모델이다. 기본 설명을 하자면, MoveNet은 17개의 관절, 또는 신체 특이점(눈, 코 등)을 감지해 17개의 KeyPoint를 제공한다. 정확도에 초점을 맞춘 Thunder 버전, 속도에 초점을 맞춘 Lightning 버전, 두 가지로 나뉘어 있다. 

 

Lightning 모드로 구동시켜봤다.

오. 잘 된다. 동작 인식은 크게 1). Bottom-up 방식과 2). Top-down 방식으로 이루어지는데, MoveNet은 Bottom-up 방식이다. 즉 이미지나 영상에서 사람을 먼저 찾는 것이 아니라, 이미지에서 관절(joint)을 먼저 찾고, 관절들의 상관관계를 분석해 자세를 추정하는 방식이다. 사람에 대한 Object Detection과 Bounding Box를 그리지 않아도 되기 때문에 속도가 빨라 실시간 처리에 가능하다. 

 

전체적인 구조는 다음과 같다.

2 stage 구조다. featrue extractor는 FPN(feature pyramid network)이 부착된 MobileNetV2를 사용하고, prdiction 단계는 4개의 파트로 구성된다. 

 

근데 FPN이 뭐지? 사실 필자도 자세히 모른다. 그래서 알아봤다. 이해한 걸 토대로 간략히 적으려 했는데 이것만으로 포스팅을 꽉 채울 분량이라 링크를 첨부한다.

https://herbwood.tistory.com/18

 

FPN 논문(Feature Pyramid Networks for Object Detection) 리뷰

이번 포스팅에서는 FPN 논문(Feature Pyramid Networks for Object Detection)을 리뷰해보도록 하겠습니다. 이미지 내 존재하는 다양한 크기의 객체를 인식하는 것은 Object dection task의 핵심적인 문제입니다. 모

herbwood.tistory.com

보고 이해가 갔다면, 지금 여기 간략히 정리한 말이 이해가 갈 것이다. 

 

1. 일반적인 신경망은 일반 이미지로부터 점점 더 작아지는 해상도의 피처 맵을 생성 하는데, 예를 들어 초기 레이어에서는 큰 해상도 피처 맵(저해상도), 깊은 레이어일수록 작은 해상도 피처 맵(고해상도)

2. FPN은 이 다양한 해상도의 피처 맵을 모두 활용. 그리고 이걸 피라미드 구조로 결합해 모든 크기의 객체에 대한 정보를 통합.

 

반드시 링크를 보고 이해하고 오길 바란다. 

 

이후 4단계로 예측을 하게 되는데, 위 사진대로 1. 중심 식별, 2. keypoint 초기값 생성. 3. 각 keypoint마다 heatmap 생성. 4. fine-tuning. 

 

모델의 간단한 구조를 알아봤고, 현재 mediapipe에서 실행한 것처럼 전체적인 동작 인식과 좌표 수집에는 성공했다. 문제는 single-detection 모드로 했다는 건데, 추워하는 모션의 데이터를 수집하고 학습시키려면 single detection을 먼저 해야 했기 때문이다. 

 

현재 가설은 single-detection으로 데이터 수집, 학습. 이후 multi-detection 모드에서 학습한 동작을 인식하는 것이 목표인데, 잘 될지 모르겠다. 잘 되길 바라고 있다.