개발 환경 : Windows10

 

이때 당시 딥러닝에 대한 지식이 전무하였고 참고자료가 부족하여 힘들었던 경험으로 남아있습니다. 하지만 무한 삽질의 결과 성공했습니다!

 

1. Open Pose란 무엇인가

 OpenPose는 딥러닝의 CNN기반으로 이미지 혹은 영상을 입력값으로 하여 객체의 위치와 방향을 감지한다. 출력 영상에서 사람을 인식하고, 움직이는 관절 부위들을 탐지하여 미리 정해진 skeleton을 분할해서 투영해준다. 0부터 17까지의 18개의 Key Point가 존재하고, 각각의 점을, 미리 훈련된 딥러닝 모델로 씌워주는데, 여기에는 아래의 3가지 과정이 존재한다.

(1) 객체(사람)를 탐지해서 바운딩 박스를 그림
(2) 추출된 바운딩 박스의 좌표들을 통해, ROI를 선정하여, 사람 부분만 따로 떼어 냄
(3) 추출된 사람 사진(영상)에서 미리 훈련된 모델로, Key Point를 생성함

 

 이때 모델링은 신뢰도 추정방식의 분류모델로, 각각 CNN으로 특징을 추출하고 해당 부분이 어떤 신체부위인지에 픽셀별로 판단한 신뢰도 맵을 출력해준다. 그리고 신뢰도와 선호도 맵을 받아들여서, 각 사람별로 Key Point를 찍어준다. (데이터 셋마다 Key Point의 숫자에 의미가 있다.)

COCO Output Format
Nose – 0, Neck – 1, Right Shoulder – 2, Right Elbow – 3, Right Wrist – 4, Left Shoulder – 5, Left Elbow – 6, Left Wrist – 7, Right Hip – 8, Right Knee – 9, Right Ankle – 10, Left Hip – 11, Left Knee – 12, LAnkle – 13, Right Eye – 14, Left Eye – 15, Right Ear – 16, Left Ear – 17, Background – 18

 

MPII Output Format
Head – 0, Neck – 1, Right Shoulder – 2, Right Elbow – 3, Right Wrist – 4, Left Shoulder – 5, Left Elbow – 6, Left Wrist – 7, Right Hip – 8, Right Knee – 9, Right Ankle – 10, Left Hip – 11, Left Knee – 12, Left Ankle – 13, Chest – 14, Background – 15

 

Open Pose Key Points detection 결과

 

2. Open Pose를 사용하면서 느낀 점

(물론 제가 제대로 사용을 못한 걸수도 있습니다. ㅠㅠ)

 

<장점>

  • 다양한 예제코드를 제공해주기 때문에 활용하기 용이하다.
  • 높은 인식률!

 

<단점>

  • 프로그램이 너무 무겁다. (너무 너~무 느려요.) 
  • 오픈소스 이해할 수 없다(복잡함). 저는 당시 c++을 공부하면서 진행했기에 코드 내용 이해하는 것 자체도 힘들었습니다. (python도 사용가능한 걸로 알고 있습니다.)
  • 활용수준까지는 가능할지도 모르겠으나 공부가 많이 되었는지는 잘 모르겠습니다.
  • 환경구축하기 너무 힘들다. 2020년 여름당시 참고할 수 있는 글이 많이 부족했습니다…ㅠㅠ
  • 여러 사람이 겹쳐있을 경우 인식이 잘 안 될 수 있다. 사용 환경이 제한될 수밖에 없는 것 같다.

 

3. 필요조건

  • Visual Studio 2017
  • OpenCV 4.1.0 (4.1 버전 미만은 안됩니다. 당시 4.1.0이 가장 최신 업데이트였음)
  • CUDA 11 이상
  • cuDNN

+ Recent posts