DeepLabCut
DeepLabCut
-
Human Pose Estimate에 비해 Animal Pose Estimate는 라벨링된 데이터의 수가 적고, 신체 구조 역시 인간과 달라 같은 모델을 사용하는데 어려움이 있다.
-
DeepLabCut은 50~200프레임 정도의 최소한의 학습데이터만으로 다양한 종의 포즈를 트래킹할수 있다.
사용 개요
-
config.yaml을 수정하여 bodyparts, skeleton등을 대상에 맞추어 변경
-
동영상을 올려 프레임을 뽑아냄
-
라벨링 실시
-
트레이닝 할때 사용할 backbone CNN 알고리즘 선택[1]
-
트레이닝 및 모델 생성
-
데이터 넣어서 추론. 결과를 보고 라벨링 툴을 이용하여 미세조정.
-
결과가 불만족스럽다면, 다시 1번부터 반복
이론
- DeepLabCut의 기반이 되는 모델인 Deepercut은 Bottom-up[2]방식의 pose estimation 모델이다.
Integer Linear Program (ILP)
-
CNN 모델을 통해 모든 joint를 찾아내고, 찾은 모든 joint를 잇는 dense graph를 생성.
-
body parts의 후보 위치인 점을 $d,d’$로, body parts를 $c,c’$로 정의한다.
-
이때, body parts 후보 위치인 점들은 CNN 네트워크를 통해 선별한다.
- $x(d,c) = 1$일때, body part $d$는 객체 $c$에 속한다.
- $y(d,d’) = 1$일때, body part $d,d’$는 같은 사람의 것이다.
- $z(d,d’,c,c’) = x(d,c)x(d’,c’)y(d,d’)$로 표현되는 이 수식은 정수 선형 계획법 문제로, 가지치기를 통해 풀수있다[3].
- $z(d,d’,c,c’) = 1$일때, $d$ 점은 $c$ body parts, $d’$점은 $c’$ body parts이며, $d$와 $d’$는 같은 사람의 몸이다.
프로젝트 및 데이터와의 비교.
-
이번 반려동물 행동 예측 프로젝트의 경우, AI HUB 데이터 특성상 단일 객체에 대한 포즈 예측이 주로 이루어질것 같다.
-
다중 객체에 대한 part labeling 및 pose estimation이 주를 이루는 DeeperCut은 그런 관점에서 보았을때, 이번 프로젝트와 크게 연관이 없을 가능성이 높아보인다.
-
또한, AI HUB 데이터의 경우 joint에 전부 라벨링이 되어있으므로, 해당 데이터를 구하기 위해 반복하여 라벨링 툴을 사용하는 경우 역시 드물것으로 예상된다.
-
그러나, 실 모델을 서비스에 적용할때 친절히 라벨링해둘것이라 기대되지는 않으므로, 모델의 test과정에서 들어온 데이터를 자동으로 라벨링할때 사용될것으로 보인다.
결론.
- 프로젝트와 별개로 좋은 공부 한 셈 치기로 했다.
- Multiple Human Pose estimation같은건 CCTV 이상탐지등 많은 가능성을 가지고 있으니, 알아두면 언젠가 쓸일이 생길것 같다.
참고한 글
Sik-Ho Tsang님의 Review: DeepCut & DeeperCut — Multi Person Pose Estimation (Human Pose Estimation)
[1] : ResNet, Mobilenet 지원.
[2] : 영상에서 키포인트를 찾고, 키포인트에서 관계를 분석하여 자세를 추정하는 방식.
객체를 detecting한 후 해당 bounding box 내부에서 자세를 추정하는 Top-Down방식과 달리 객체를 detecting하는 과정이 생략되어 빠른 실행속도를 보인다.
따라서, Real-time 모델에 적합하다.
[3] : By substituting z(d,d’,c,c’)=x(d,c)x(d’,c’)y(d,d’), the objective is converted to Integer Linear Program (ILP), and solved by branch-and-cut.