개발 환경 : Ubuntu 18.04
Human Key Point Detection
이 프로젝트에서는 사람 한 명의 동작을 추정하는 것이 중요하기 때문에 사람을 먼저 인식한 후에 key points를 추출하는 Top-down(하향식) 방법을 이용할 계획이다.
먼저 Segmentation을 통해 영상의 이미지에서 사람이 있는 영역만 RoI로 지정을 해줄 것이다.
보통 Human key point tracking을 할 때, CNN(Convolutional Neural Networks)을 기반으로 한 특징 추출 model을 이용하는데, 프로젝트의 목표가 pose estimation system을 기반으로 하기 때문에 Mask R-CNN을 사용할 것이다.
여기서 Mask R-CNN은 하향식 keypoint estimation model로 ResNet을 확장시킨 framwork를 말한다. 표준적인 기반이 CNN²인 ResNet으로 구성되며 이미지의 특징을 추출하는데 사용된다. Mask R-CNN의 구조는 다음과 같다.
① Resize Input image
기존 Segmentation을 만들어진 Mask R-CNN³에서는 backcone으로 ResNet-101을 사용하는데 ResNet 네트워크에서는 input image의 size가 800~1024일 때 성능이 좋다고 알려져 있다. 따라서 이미지를 binear interpolation⁴을 사용해 resize 해주고 네트워크 input size(1024 x 1024)에 맞게 나머지 값들은 zero padding⁵으로 채워준다.
② Backbone ResNet-101
Mask R-CNN에서는 Backbone으로 ResNet-101 모델을 사용한다.
모델의 layer가 너무 깊어질수록 오히려 성능이 떨어지는 현상이 발생하는데, 그 이유가 gradient vanishing/exploding 문제 떄문에 학습이 잘 이루어지지 않기 때문이다.
여기서 gradient vanishing이란 layer가 깊어질수록 미분을 점점 많이 하기 때문에 backpropagation을 해도 앞의 layer일수록 미분값이 작아져 그만큼 output에 영향을 끼치는 weight 정도가 작아지는 것을 말한다. 이 문제를 해결하기 위해 고안된 것이 ResNet이다.
ResNet이전의 이미지 classification과 같은 문제의 경우 x에 대한 타겟값 y는 사실 x를 대변하는 것으로 y와 x의 의미가 같게끔 mapping해야 한다. 즉, H(x)-x 를 최소화하는 방향으로 학습을 진행해야 하는 것이다.
이 때, F(x) = H(x) - x 를 잔차라고 하며 이 잔차를 학습하는 것을 Residual learning이라 한다.
위의 두 가지 그림을 보자. 왼쪽 그림처럼 네트워크의 output이 x가 되도록 한다. 하지만 오른쪽 그림은 마지막에 x를 더해주어 네트워크의 output이 0이 되게끔 하는 것을 볼 수 있다. ResNet은 오른쪽 그림과 같이 mapping해서 최종 output이 x가 되도록 학습한다.
네트워크는 0이 되도록 학습시키고 마지막에 x를 더해서 H(x)가 x가 되도록 학습하면 미분을 해도 x자체는 미분값 1을 갖기 때문에 각 layer마다 최소 gradient로 1은 갖도록 한 것이다.
③ FPN (Feature Pyramid Network)
마지막 layer의 feature map⁶에서 점점 이전의 중간 feature map들을 더하면서 이전 정보까지 유지할 수 있도록 한다. 이렇게 함으로써 모두 동일한 scale의 anchor를 생성하게 되고, 작은 feature map에서는 큰 anchor를 생성하여 큰 object를, 큰 feature map에서는 다소 작은 anchor를 생성하여 작은 object를 detect할 수 있도록 설계되었다.
특히 마지막 layer에서의 feature map에서 이전 feature map을 더하는 것은 아래와 같이 Upsampling⁷을 통해 이루어진다.
2배로 upsampling을 한 후 이전 layer의 feature map을 1x1 Fully convolution 연산을 통해 filter개수를 똑같이 맞춰준 후 더함으로써 새로운 feature map을 생성한다.
④ RPN (Region Proposal Network)
RPN의 input 값은 이전 CNN 모델에서 뽑아낸 feature map인데, 각 feature map에서 1개 scale의 anchor를 생성하므로 결국 각 pyramid feature map마다 scale 1개 x ratio 3개 = 3개의 anchor를 생성한다. Region proposal을 생성하기 위해 feature map위에 nxn window를 sliding window를 시키면서 object의 크기와 비율이 어떻게 될지 모르므로 k개의 anchor box를 미리 정의해놓는다.
여기서 나온 anchor box가 bounding box가 될 수 있기 때문에 미리 box 모양 k개를 정의해놓는 것이다. (위의 사진에서는 가로세로길이 3종류 x 비율 3종류 = 9개의 anchor box를 이용한다.)
여기서 나온 anchor box를 이용하여 classification과 bbox regression(delta)을 먼저 구하고 이 값에 anchor 정보를 연산해서 원래 이미지에 대응되는 anchor bounding box 좌표값으로 바꿔주게 된다.
⑤ NMS (Non-maximum-suppression)
원래 이미지에 anchor 좌표를 대응시킨 후에는 각각 normalized coordinate로 대응시킨다. (FPN에서 이미 각기 다른 feature map 크리를 갖고 있기 때문에 모두 통일되게 정규좌표계로 이동시키는 과정) 그러면 결과는 아래의 왼쪽 사진과 같이 나타난다.
각 object마다 대응되는 수십개의 anchor 중에서 장 classification score가 높은 anchor를 제외하고 다른 anchor들을 지운다.
NMS알고리즘은 anchor bounding box들을 score순으로 정렬시킨 후 score가 높은 bounding box부터 다른 bounding box와 IoU(Intersection Over Union)를 계산한다.
이때 IoU가 해당 bounding box와 0.7이 넘어가면 두 bounding box는 동일 object를 detect한 것이라 간주하여 score가 더 낮은 bounding box는 지우는 식으로 동작한다. 최종적으로 각 객체마다 score가 가장 큰 box만 남게되고 나머지 box는 제거하게 되면 오른쪽 사진과 같이 하나의 bounding box만 남게 되는 것이다.
⑥ RoI align
RoI pooling을 진행했을 때 발생하는 위치정보 왜곡 문제를 해결하기 위해 align을 이용한다. align은 각각의 RoI 영역에 대해 4개의 sample point에 대해 bilinear interpolation을 수행하고, 그 결과에 대해 max 또는 average로 합치는 것을 말한다.
<참고 자료>
- “작심삼일 끝! 홈트레이닝에 실패하는 이유와 해결책”, 정운경(운동전문가), 2021.02.05
https://www.hidoc.co.kr/healthstory/news/C0000577681
운동, 작심삼일 넘어서려면, 코메디 닷컴 (이용재 기자), 2021.03.15.
Simple Baselines for Human Pose Estimation and Tracking, Microsoft Research Asia, University of Electronic Science and Technology of China (21 Aug 2018)
Detect-and-track: Efficient Pose Estimation in Videos, The Robotics Institute, Carnegie Mellon University (2 May 2018)
Deep High-Resolution Representation Learning for Human Pose Estimation, University of Science and Technology of China (25 Feb 2019)
[Pose Estimation] Human Pose Estimation 최신 연구 동향
https://eehoeskrap.tistory.com/329
신경망을 이용한 인간 행동인식(action recognition) 연구동향 2D CNN / 3D CNN
Overview of Human Pose Estimation Neural Networks — HRNet + HigherHRNet, Architectures and FAQ — 2d3d.ai
Convolution, 멈춤보단 천천히라도
https://webnautes.tistory.com/1044
MASK R-CNN 정리
https://mylifemystudy.tistory.com/82
Faster R-CNN
(논문리뷰) R-CNN 설명 및 정리
https://ganghee-lee.tistory.com/35
CNN(Convolutional Neural Network)
https://hobinjeong.medium.com/cnn-convolutional-neural-network-9f600dd3b395
CNN, Convolutional Neural Network 요약
(논문리뷰&재구현) Faster R-CNN 설명 및 정리
https://ganghee-lee.tistory.com/37
Object Tracking 이란?
https://mickael-k.tistory.com/26
ResNet
https://ganghee-lee.tistory.com/41
선형 보간법(linear, bilinear, trilinear interpolation)
https://darkpgmr.tistory.com/117
Upsampling
할당 문제 & 헝가리안 알고리즘 (Assignment Problem & Hungarian Algorithm)
https://gazelle-and-cs.tistory.com/29
탐욕(그리디) 알고리즘(greedy algorithm)
https://www.zerocho.com/category/Algorithm/post/584ba5c9580277001862f188
Anchor box
https://jungnamgyu.tistory.com/54
detection 연구 Anchor box ? region proposal 자세한 원리
컴퓨터비전에서의 기본 용어 및 개념 정리
https://ganghee-lee.tistory.com/33
딥러닝에서 이미지 classification, localization, detection, segmentation
http://egloos.zum.com/javalove/v/1227428
Cython
https://cython.readthedocs.io/en/latest/src/quickstart/overview.html
Easydic
https://romillion.tistory.com/53
PyYAML
https://rfriend.tistory.com/540
Pandas
https://doorbw.tistory.com/172
올바른스쿼트자세 힙업운동 시작하세요!
https://m.blog.naver.com/topilsan5189/221278110905
'BARAM 동아리 프로젝트 > 홈피트니스 서포트 시스템' 카테고리의 다른 글
프로젝트 기획 (0) | 2021.08.05 |
---|