Analysis of Pets Using Keypoint Detection and Skeleton-Based Action Recognition.
(2021.07.05~2021.08.23)
ASAP(AI State Analysis of Pets)는 반려동물의 행동을 분석해주는 서비스입니다.
본 프로젝트의 목표는 국내에서 양육되는 다양한 개의 품종에 대해 행동을 분석하는 범용적인 모델을 제시하고, 최종적으로 영상 속 반려동물에 대해 10가지 행동 분석을 제공하는 서비스를 제작하는 것입니다. 행동 분석을 위해서는 먼저 반려동물을 촬영한 영상 속 반려동물의 관절 키포인트를 검출한 후, 관절 키포인트를 기반으로 형상한 반려동물의 뼈대를 통해 행동 유형을 분류합니다.
반려동물을 담은 영상을 올릴 시 키포인트 인식을 기반으로 행동을 알려줍니다.
AI-Hub에서 제공하는 반려동물 구분을 위한 동물 영상 데이터 중 개(반려견)의 데이터만을 사용하여 모델 학습을 진행하였습니다.
Keypoint Detection 모델 학습시 영상 데이터(영상의 프레임 별 이미지)를, Action Recognition 모델 학습시 라벨 데이터를 사용하였으며 각 학습 데이터의 형식은 다음과 같습니다.
-
Keypoint Detection
Original Keypoint Label 0: 코
1: 이마 정 중앙
2: 입꼬리(입끝)
3: 아래 입술 중앙
4: 목
5: 앞다리 오른쪽 시작
6: 앞다리 왼쪽 시작
7: 앞다리 오른쪽 발목
8: 앞다리 왼쪽 발목
9: 오른쪽 대퇴골
10: 왼쪽 대퇴골
11: 뒷다리 오른쪽 발목
12: 뒷다리 왼쪽 말목
13: 꼬리 시작
14: 꼬리 끝키포인트 감지 모델 학습을 위해서는 키포인트 좌표 데이터가 필요합니다. 다음과 같은 csv 파일 형식으로 이미지의 경로와 키포인트 정보를 구성해 주세요.
-
Action Recognition
행동 분류 모델의 학습을 위해서는 키포인트 좌표값과 각 포인트에 대한 confidence score, 영상의 라벨인 action class 정보가 필요합니다. 다음과 같은 형식의 json 파일을 각 영상에 대해 구성해 주세요.{ "data":[ {"frame_index":1, "skeleton":[ {"pose":[x.xxx, x.xxx, x.xxx, ...], // keypoint "score":[x.xxx, x.xxx, x.xxx, ...] // confidence score }] }, {"frame_index":2, "skeleton":[ {"pose":[x.xxx, x.xxx, x.xxx, ...], "score":[x.xxx, x.xxx, x.xxx, ...] }] }, ...,] "label": "걷거나 뜀", "label_index": 5 ... }
영상의 각 프레임별 스켈레톤 정보로부터 '앉기', '두 앞발을 들어 올림', '앞발 하나를 들어 올림', '몸을 턴다', '엎드리기', '걷거나 뜀', '꼬리를 위로 올리고 흔듦', '빙글빙글 돈다', '마운팅', '꼬리가 아래로 향함' 과 같은 행동 분류를 진행하였습니다.
- [Keypoint Detection] Keypoint RCNN - Mask-RCNN, 2017 (Kaiming He, Georgia Gkioxari, Piotr Dollár, Ross Girshick)
- [Keypoint Detection] HRNet - Deep High-Resolution Representation Learning for Visual Recognition, 2019 (Jingdong Wang, Ke Sun, Tianheng Cheng, Borui Jiang, Chaorui Deng, Yang Zhao, Dong Liu, Yadong Mu, Mingkui Tan, Xinggang Wang, Wenyu Liu, Bin Xiao)
- [Action Recognition] ST-GCN - Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition, 2018 (Sijie Yan, Yuanjun Xiong, Dahua Lin)
해당 모델들은 모두 Pytorch 프레임워크를 사용하여 학습하였습니다.
학습시 모델의 용량 문제로 인해 GPU 환경에서 실행하기를 권장합니다.
Google Colab을 활용할 시 [런타임] - [런타임 유형 변경] - [GPU]로 설정을 바꿔주세요.
git clone https://github.com/Taehee-K/ASAP.git
cd ASAP
cd KeypointRCNN
pip install -r requirements.txt
python train.py
cd HRNet
pip install -r requirements.txt
python train.py
cd ST-GCN
pip install -r requirements.txt
python torchlight/setup.py install
python main.py recognition -c config/st_gcn/kinetics-skeleton/train.yaml --device 0
cd demo
pip install -r requirements.txt
python torchlight/setup.py install
// Test
python test_final.py recognition -c work_dir/stgcn_demo.yaml
// Streamlit Demo
streamlit run app.py
Streamlit 라이브러리를 통해 서비스 프로토타입을 제작하였습니다.
- pytorch/vision
- yysijie/st-gcn
- leoxiaobin/deep-high-resolution-net.pytorch
- MaiHon/dacon-motion-keypoints
![]() 김태희 |
![]() 양원재 |
![]() 정성경 |
![]() 최미소 |
![]() 황채원 |
![]() 황혜정 |