이 포스팅은 Face Detection and Tracking with SSD Network 시리즈 12 편 중 7 번째 글 입니다.

  • Part 1 - 01: Overview & Plans
  • Part 2 - 02: Paper Research - SSD
  • Part 3 - 03: Paper Research - DeepSort
  • Part 4 - 04: Trial and Error
  • Part 5 - 05: Project Design
  • Part 6 - 06: Writing Code
  • Part 7 - This Post
  • Part 8 - 08: 중간 보고서
  • Part 9 - 09: Yolov3 사용
  • Part 10 - 10: Arcface
  • Part 11 - 11: Face Recognition with Tracking
  • Part 12 - 12: 중간 정리
▼ 목록 보기

동작 확인


KakaoTalk_Photo_2021-04-23-13-11-49 KakaoTalk_Photo_2021-04-23-13-11-55 KakaoTalk_Photo_2021-04-23-13-12-01 KakaoTalk_Photo_2021-04-23-13-12-06 KakaoTalk_Photo_2021-04-23-13-12-14 KakaoTalk_Photo_2021-04-23-13-12-20

문제점

  • Input video에 대해 detection 결과를 이끌어내는 과정까지가 너무 오래걸린다.
    • MTCNN 사용시 1장 당 inference 약 0.5초
    • detection 결과를 기반으로 feature extraction 시간 역시 소요
  • 보행자와 달리 얼굴을 여러 각도로 돌리기 때문에 Feature를 좀더 명확하게 뽑을 필요가 있다.
  • 또한 가려짐 효과를 적용하기 위한 Track 객체의 생애주기를 늘려야 할 필요가 있다.

해결 방안 탐색

  • MTCNN 말고 다른 네트워크를 사용한다.
    • inference 시간이 더 필요하다. gpu는 사용하고 싶지 않다.
  • C로 구현된 것을 찾아본다.
    • 가장 좋은 판단이다.
    • ncnn을 기반으로 구현된 오픈 소스가 있다.MTCNN-NCNN

추후 구현 방안

목표 : 실시간으로 돌아가는 face tracker를 제작한다.

  1. Feature extraction cbtxt로 저장, 후 로드 이해
    1. 저장이 된다면 저장한 후에 로드해서 돌려보기
    2. 저장이 안되면.. 모르겠다 일단.
  2. 지금 face detection 만들 파일로 C++ 딥소트 돌려보기
    1. 문제가 발생한다 -> MTCNN만 돌려서 python 기반 실시간 구현으로 방향 전환
    2. 잘 된다. -> 소스코드를 뜯어서 이미지 한장 단위로 들어갈 수 있는지 확인한다.
      1. 한장 단위로 inference가 불가능하다. -> Python으로 간다.
      2. 한장단위로 가능하다. c++ 시도

6월 이전 완성을 고려하면, MTCNN만 C++로 변경한 뒤, 실시간 방법을 고민하는 것이 현실적이다.

  • Detection 속도를 줄이기 위해, C++ 기반 딥러닝 아키텍쳐인 ncnn을 기반으로 MTCNN 결과를 추출한다.
  • 이후 Python에서 c++ 함수를 사용할 수 있도록 조치한다.
  • Feature Extraction을 가중치 파일로 변환한다.
  • 실시간 로직을 짠다.
  • 추가로 정확도를 높히기 위해 Model을 훈련하여 저장해둔다.
  • Inference time 체크하여 실시간인지 확인한다.