한국의 개발자들을 위한 Google for Developers 국문 블로그입니다.
TensorFlow Lite를 사용해서 몸동작 인식한 중국 국민체조 앱의 케이스를 소개합니다
2019년 11월 29일 금요일
<블로그 원문은
이곳
에서 확인하실 수 있으며 블로그 번역 리뷰는 송호연(MachineLearning GDE)님이 참여해 주셨습니다>
게스트 게시자: Keith Chan, Vincent Zhang(OliveX Engineering 팀 소속)
팔단금이란? 8가지 순서로 나뉘어진 단련 법을 의미하는 것으로서 중국에서 공식 공인된 운동법으로 현대 스트레칭의 효시로 불립니다.
소개
OliveX
는 홍콩에 본사를 두고서 피트니스 관련 소프트웨어에 주력하는 회사로, 2018년 회사 창립 이래로 200만 명 이상의 사용자에게 서비스를 제공하고 있습니다. 사용자 대부분은 노년층이며, Baduanjin 앱은 사용자의 부상 가능성을 최소화하면서도 팔단금(Baduanjin)을 수련하도록 도와줍니다. 이런 목적을 달성하기 위해, 우리는 스마트폰 앱에 최신 인공지능 기술을 활용하여 팔단금 수련 동작을 자동으로 탐지하여 사용자에게 알맞은 피드백을 제공합니다.
목표와 요구사항
팔단금은 8가지 종류의 팔다리 동작과 호흡 조절법으로 이루어진 대중적인 운동입니다. 정신과 육체의 건강을 모두 개선해주는 팔단금 수련을 위해서는 정확한 동작과 호흡 조절이 매우 중요합니다.
사용자는 'Smart Baduanjin' 앱을 통해 자신의 동작을 추적하는 AI를 사용하여 수련 동작을 올바로 취하고 있는지 확인할 수 있습니다. 우리는 최신 머신러닝 기술을 활용하여 사용자가 단순히 운동 동영상을 보고 따라서 운동하는 기존의 학습 방식을 사용자가 자신의 몸동작에 관한 피드백을 실시간으로 받으면서 보다 즐겁게 운동할 수 있는 대화식 환경으로 바꾸기를 바랍니다. 또한 이런 기능으로 노년층 유저들이 팔단금을 더 효과적으로 수련하고 부상 위험도 줄이는 데 도움이 될 수 있기를 희망합니다.
우리는 목표를 분석하고 우선순위를 정한 후 다음과 같이 전반적인 제품 요구사항을 정의했습니다.
보통 실외에서 팔단금을 수련하면서 쓰는 용도이므로, 제품을 '모바일' 기반으로 만들 필요가 있음
팔단금을 수련할 때, 사용자는 보통 시연 동영상을 따라 동작을 취하면서 화면에 등장하는 코치의 동작을 모방하므로, 동영상을 소리와 함께 재생할 수 있는 제품이어야 함
사용자에게 귀중한 실시간 피드백을 제공하려면 전면 카메라로 사용자의 몸동작을 포착해야 함
특히 몸동작 인식에 관해, 우리는 알고리즘이 다음 작업을 수행하기를 바랍니다.
전체 수련 동작 순서에서 각각의 팔단금 동작 인식
사용자가 취하는 몸동작의 정확성을 기준으로 점수 부여
만족스럽지 못한 동작에 대한 교정 지도 기능 제공
기술 분석
ML 프레임워크 선택
위 요구사항을 바탕으로, 우리는 프로젝트 구현을 위해 적합한 딥 러닝 프레임워크를 선택해야 했습니다. 특히, 우리는 다음과 같은 특징을 가진 프레임워크를 찾고 있었습니다.
휴대기기를 위한 강력한 지원을 제공하고 중급부터 저급 스마트폰에서도 원활히 실행 가능함
친화적 API 디자인과 풍부한 디버깅 도구
성숙한 커뮤니티 지원과 리소스 사용 가능
우리는 종합적인 조사와 평가를 거친 후 TensorFlow Lite가 우리의 요구사항에 부합한다는 점을 깨달았습니다. 그 밖에도, Google은 인체의 다양한 포즈를 탐지하도록 특별히 디자인한 앱인
PoseNet
을 오픈소스로 공개하고 TensorFlow.js를 기반으로 하는 데모 코드를 제공했습니다(편집자 주: 우리는 최근에
TensorFlow Lite를 기반으로 하는 PoseNet 샘플
을 발표했음). Google은 우리가 오픈소스 코드의 도움을 받아 인체 포즈 인식을 위한 초기 작업을 완료하는 데 도움을 주었을 뿐 아니라, 우리의 동작 인식 알고리즘이 자바스크립트에서 훌륭한 성능을 발휘하므로 휴대기기에서 원활하게 작동할 수 있으리라는 확신도 주었습니다.
알고리즘
몸동작 인식
우리는 개발 초기 단계에서 기존의 몸동작 인식 알고리즘을 조사했습니다. 현재, 주류 알고리즘은 주로 순차적 동영상 프레임 분석을 기반으로 합니다. 이런 알고리즘이 우리의 요구사항을 충족할 수는 있겠지만, 네트워크가 상당히 복잡하고 이런 네트워크에서 추론을 실행하면 많은 계산 리소스가 소비됩니다. 하지만 휴대기기에서 모델을 실행해야 한다는 까다로운 요구사항이 있었으므로, 정확성과 성능 사이에서 절충점을 찾아야 했습니다.
우리가 택한 접근 방식은 PoseNet을 통해 주요 인체 관절을 먼저 포착한 다음, 인체 관절이 움직이는 순서를 기반으로 특정한 동작을 인식하는 것이었습니다. PoseNet은 17개의 인체 관절만 추적하므로, 전체 크기 이미지에 비해 계산량이 대폭 줄었습니다. 아래에서 알고리즘의 워크플로를 보여드리겠습니다. 우리는 먼저 PoseNet을 사용하여 입력 동영상에서 인체 관절 데이터를 추출한 다음, 인체 관절 데이터를 기반으로 동작을 분류했습니다.
주요 동작
기술적 접근 방식을 결정한 후에는 앱을 위해 인식할 주요 몸동작을 정의할 필요가 있었습니다. 우리는 이를 위해 몸동작 인식 문제를 전형적인 머신러닝 분류 문제로 변환했습니다. 아래는 주요 팔단금 동작을 정의한 방법의 샘플입니다.
우리는 일반적인 심층신경망을 훈련하여 사용자의 몸동작을 분류했습니다. 하이퍼 매개변수 조정과 훈련 데이터 최적화/확대를 여러 차례 반복한 후에 얻은 최종 모델은 아래 그림과 같이 훌륭한 정확도를 보여 제품 요구사항을 충족할 수 있었습니다.
휴대기기에서 해결해야 할 난제
딥 러닝 모델을 완성한 후, 우리가 다음으로 밟은 단계는 iOS 및 Android 휴대기기에 모델을 배포하는 작업이었습니다. 처음에는 TensorFlow Mobile을 사용해보았습니다. 하지만 인식 결과를 실시간으로 얻어야 했는데 TensorFlow Mobile은 이 요구사항에 부합하는 성능을 발휘하지 못했기에 적합한 옵션이 아니었습니다.
우리가 성능 문제를 해결하려고 한창 애쓰던 무렵, Google은 성능 측면에서 TensorFlow Mobile보다 크게 향상된
TensorFlow Lite
를 내놓았습니다. 이 두 솔루션을 아래와 같이 비교할 수 있습니다.
또한 아래 표는 모델에 대한 최초 벤치마크 결과를 나타낸 것입니다.
벤치마크 수치를 기준으로, 우리는 512x512 입력 크기를 기반으로 하는 대부분의 Android 기기에서는 실시간으로 몸동작을 인식할 수 없다는 결론을 내렸습니다. 이 문제를 해결하기 위해 머신러닝 모델을 프로파일링한 결과, PoseNet에 병목 현상이 발생해 계산 시간의 95%를 소비했다는 사실을 밝혀냈습니다. 그래서 우리는 PoseNet 입력 크기와 하이퍼 매개변수를 조정하고, 동작 인식 알고리즘을 다시 훈련하여 발생한 정확성 손실을 줄어든 입력 크기로 보상했습니다. 마침내, 우리는 Android에서 MobileNet을 위해 입력 크기로는 337x337 RGB, 너비 승수로는 0.5를 선택했습니다.
우리의 대상 사용자는 대부분 중장년층이므로, 주요 사용자가 대체로 저사양 기기를 보유한 경향이 있습니다. PoseNet 매개변수를 조정하여 성능을 개선했지만, 여전히 썩 만족스럽지는 않았습니다. 따라서 우리는 어느 스마트폰에나 있는 가속기인 GPU에 의지했습니다. Google에서 마침 그 무렵에
TensorFlow Lite GPU 대리자(시험용)
를 내놓았는데, 우리는 그 덕분에 많은 엔지니어링 리소스를 절약했습니다.
모바일 GPU 덕분에 모델 실행이 현저히 가속화되었습니다. 사용자들 사이에서 인기 있는 여러 기기에서 벤치마크를 실시한 결과가 아래 표에 나와 있으며, GPU 대리자를 사용한 경우와 그렇지 않은 경우를 비교할 수 있습니다.
노년층 사용자의 팔단금 동작 움직임은 비교적 느리므로, TensorFlow Lite GPU 대리자(시험용)를 통합한 후 대부분의 기기에서 우리 제품이 원활하게 작동할 수 있었습니다.
결론
우리는 iOS와 Android에서 모두 Smart Baduanjin 제품을 성공리에 완성해 테스트에 참여한 사용자들로부터 호평을 받았습니다. 우리는 ML 기술과 TensorFlow를 활용하여 팔단금 초보자가 시연 동영상을 따라 동작을 익힐 수 있도록 하기 위한 '가이드 모델'을 제공했습니다. 우리는 숙련된 팔단금 수련자가 실력을 더욱 키울 수 있도록 점수와 같은 소중한 피드백을 제공했습니다. 현재, ‘Smart Baduanjin’은
App Store
와
Google Play
에서 모두 무료로 제공됩니다.
한편, OliveX는 다른 피트니스 운동에 인체 포즈 추정을 적용할 방법을 적극적으로 연구하고 있습니다. 우리는 수련자 몸동작의 정확성이 매우 중요하다는 점에서 다른 많은 운동 수련 역시 팔단금과 마찬가지라는 점을 깨달았습니다. 올바른 몸동작은 신체 부상을 방지할 뿐 아니라, 운동의 효율성을 높이는 데도 도움이 됩니다. 따라서 우리는 팔단금 프로젝트에서 얻은 지식과 기술을 다른 영역에도 이전하고 싶습니다.
Contents
ML/Tensorflow
Android
Flutter
Web/Chrome
Cloud
Google Play
Community
Game
Firebase
검색
Tag
인디게임페스티벌
정책 세미나
창구프로그램
AdMob
AI
Android
Android 12
Android 12L
Android 13
Android 14
Android Assistant
Android Auto
Android Games
Android Jetpack
Android Machine Learning
Android Privacy
Android Studio
Android TV
Android Wear
App Bundle
bootcamp
Business
Chrome
Cloud
Community
compose
Firebase
Flutter
Foldables
Game
gdg
GDSC
google
Google Developer Student Clubs
Google Play
Google Play Games
Interview
Jetpack
Jetpack Compose
kotlin
Large Screens
Library
ma
Material Design
Material You
ML/Tensorflow
mobile games
Now in Android
PC
Play Console
Policy
priva
wa
wear
Wearables
Web
Web/Chrome
Weeklyupdates
WorkManager
Archive
2024
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2023
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2022
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2021
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2020
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2019
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2018
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2017
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2016
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2015
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2014
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2013
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2012
12월
11월
10월
9월
8월
7월
6월
5월
3월
2월
1월
2011
12월
11월
Feed