선릉역 1번 출구

mini_project using Mediapipe(1) 본문

Project

mini_project using Mediapipe(1)

choideu 2021. 11. 17. 19:42

Mediapipe?

구글에서 제공하는 비전인식기능 서비스

 

이 mediapipe를 사용해서 인공지능 수업의 미니 프로젝트로 동작 인식 control service를 만들어보려고 한다.

 

먼저 mediapipe 홈페이지에 들어가서 내가 하고자하는 hands 부분을 읽어보자.

https://google.github.io/mediapipe/solutions/hands

 

Hands

Cross-platform, customizable ML solutions for live and streaming media.

google.github.io

1. Overview

구글의 mediapipe를 제공해 창의적인 활용 사례가 등장해 새로운 응용분야와 연구방안이 활성화되길 기대한다고 적혀있다. 그리고 play하는데 필요한 computing power가 더 적다고 한다.

3D 핸드 랜드마크는 서로 다른 색의 점으로 표시되고, 밝은 것은 카메라에 더 가까움

2. ML Pipeline

MediaPipe Hands는 함께 작동하는 여러 모델, 즉 전체 이미지에서 작동하고 방향이 지정된 손 경계 상자를 반환하는 손바닥 감지 모델로 구성된 ML 파이프라인을 활용합니다. 손바닥 감지기에 의해 정의된 자른 이미지 영역에서 작동하고 충실도가 높은 3D 핸드 키포인트를 반환하는 핸드 랜드마크 모델입니다. 이 전략은 안면 감지기와 안면 랜드마크 모델을 함께 사용하는 MediaPipe Face Mesh 솔루션에 사용된 전략과 유사합니다.


정확하게 잘린 손 이미지를 핸드 랜드마크 모델에 제공하면 데이터 확대(예: 회전, 변환 및 규모)의 필요성이 크게 줄어들고 대신 네트워크가 대부분의 역량을 좌표 예측 정확도에 전념할 수 있다. 또한 파이프라인에서 이전 프레임에서 식별된 손 랜드마크를 기반으로 작물을 생성할 수 있으며, 랜드마크 모델이 더 이상 손의 존재를 식별할 수 없을 때만 손바닥 감지가 작동하여 손을 다시 위치시킨다.

파이프라인은 핸드 랜드마크 모듈의 핸드 랜드마크 추적 하위 그래프를 사용하고 전용 핸드 렌더러 하위 그래프를 사용하여 렌더링하는 MediaPipe 그래프로 구현됩니다. 핸드 랜드마크 추적 서브그래프는 내부적으로 동일한 모듈의 핸드 랜드마크 서브그래프와 손바닥 감지 모듈의 손바닥 감지 서브그래프를 사용합니다.

참고: 그래프를 시각화하려면 그래프를 복사하여 MediaPipe Visualizer에 붙여넣으십시오. 연결된 하위 그래프를 시각화하는 방법에 대한 자세한 내용은 시각화 도구 설명서를 참조하십시오.

 

3. Model

손바닥 탐지 모델

초기 손 위치를 감지하기 위해 MediaPipe Face Mesh의 얼굴 감지 모델과 유사한 방식으로 모바일 실시간 사용에 최적화된 싱글샷 검출기 모델을 설계했다. 손을 감지하는 것은 결정적으로 복잡한 작업이다. 우리의 라이트 모델과 전체 모델은 이미지 프레임에 비해 큰 범위(~20배)로 다양한 손 크기에 걸쳐 작동해야 하며 가려진 손과 저절로 가려진 손을 감지할 수 있어야 한다. 얼굴은 예를 들어 눈과 입의 영역과 같은 높은 대비 패턴을 가지고 있지만, 손에 그러한 특징이 없기 때문에 시각적 특징만으로 신뢰성 있게 탐지하기가 상대적으로 어렵다. 대신 팔, 신체 또는 사람의 특징과 같은 추가적인 맥락을 제공하면 정확한 손 위치 파악에 도움이 된다.

 

우리의 방법은 다른 전략을 사용하여 위의 문제를 해결합니다. 첫째, 손바닥과 주먹과 같은 단단한 물체의 경계 상자를 추정하는 것이 관절 손가락으로 손을 감지하는 것보다 훨씬 간단하기 때문에 손 감지기 대신 손바닥 감지기를 훈련합니다. 또한 손바닥이 더 작은 물체이므로 최대가 아닌 억제 알고리즘은 악수와 같은 양손 자체 폐쇄의 경우에도 잘 작동합니다. 또한 손바닥은 다른 측면 비율을 무시하고 정사각형 경계 상자(anchors in ML terminology)를 사용하여 모델링할 수 있으므로 앵커 수를 3-5배 줄일 수 있습니다. 둘째, 인코더-디코더 기능 추출기는 작은 개체에 대해서도 더 큰 장면 컨텍스트 인식을 위해 사용됩니다(similar to the RetinaNet approach). 마지막으로 높은 스케일 분산으로 인한 많은 양의 앵커를 지원하기 위해 훈련 중 초점 손실을 최소화합니다.

위의 기술을 통해 손바닥 감지에서 평균 95.7%의 정확도를 달성했다. 디코더 없이 규칙적인 교차 엔트로피 손실을 사용하면 86.22%의 기준선을 얻을 수 있다.

 

핸드 랜드마크 모델
전체 이미지에 대해 손바닥을 감지한 후 후속 핸드 랜드마크 모델은 회귀 분석을 통해 감지된 손 영역 내에서 21개의 3D 핸드 너클 좌표에 대한 정확한 키포인트 위치 파악, 즉 직접 좌표 예측을 수행한다. 이 모델은 일관된 내부 손 포즈 표현을 학습하며 부분적으로 보이는 손과 자가 오합에도 강하다.

실측 자료 데이터를 얻기 위해 아래와 같이 21개의 3D 좌표가 있는 약 30,000개의 실제 이미지에 수동으로 주석을 달았다(해당 좌표별로 존재하는 경우 이미지 깊이 맵에서 Z 값을 취한다). 가능한 손 포즈를 더 잘 커버하고 손 지오메트리의 특성에 대한 추가 감독을 제공하기 위해 다양한 배경에 고품질 합성 손 모델을 렌더링하고 해당 3D 좌표에 매핑한다.

 

4. Solution APIs

Configuration Options

Naming style and availability may differ slightly across platforms/languages.

-> naming 스타일과 availability는 플랫폼/언어마다 조금씩 다를 수 있음

 

MULTI_HAND_LANDMARKS
감지/추적된 손의 컬렉션으로, 각 손은 21개의 손 랜드마크 목록으로 표시되고 각 랜드마크는 x, y 및 z로 구성됩니다. x와 y는 각각 이미지 너비와 높이에 의해 [0.0, 1.0]으로 정규화됩니다. z는 손목의 깊이를 원점으로 하여 랜드마크 깊이를 나타내며, 값이 작을수록 랜드마크가 카메라에 가까울수록 표시됩니다. z의 크기는 x와 거의 동일한 척도를 사용합니다.

MULTI_HAND_WORLD_LANDMARKS
감지/추적된 손의 컬렉션으로, 각 손은 세계 좌표에서 21개의 손 랜드마크 목록으로 표시됩니다. 각 랜드마크는 다음으로 구성됩니다.

x, y 및 z: 손의 대략적인 기하학적 중심에 원점이 있는 실제 3D 좌표(미터).
가시성: 해당 multi_hand_landmarks에 정의된 것과 동일합니다.

 

MULTI_HANDEDNESS
감지된/추적된 손의 손 수집(즉, 왼손 또는 오른손). 각 손은 레이블과 점수로 구성됩니다. 레이블은 "왼쪽" 또는 "오른쪽" 값의 문자열입니다. 점수는 예측된 손의 예상 확률이며 항상 0.5 이상입니다(반대 손의 예상 확률은 1 - 점수임).

입력 이미지가 미러링된 경우, 즉 이미지가 수평으로 뒤집힌 전면/셀카 카메라로 촬영된 경우 손이 결정된다는 점에 유의하십시오. 그렇지 않은 경우 응용 프로그램에서 handedness 출력을 교체하십시오.

 

손가락 솔루션 생성
min_detection_confidence
- 손가락 감지 최소 신뢰성 0.0 - 1.0
- 1.0에 가까울수록 확실한 확률이 높은 손가락만 감지


min_tracking_confidence
- 손가락 추적 최소 신뢰성 0.0 - 1.0
- 1.0에 가까울수록 추적율이 높은 것만 감지

'Project' 카테고리의 다른 글

google spreadsheet python 연동하기  (0) 2022.07.25
mini_project using Mediapipe(5)  (0) 2021.11.29
mini_project using Mediapipe(4)  (0) 2021.11.28
mini_project using Mediapipe(3)  (0) 2021.11.27
mini_project using Mediapipe(2)  (0) 2021.11.17
Comments