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

  • 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 - 07: 중간 점검 및 추후 방향성 검토
  • Part 8 - 08: 중간 보고서
  • Part 9 - 09: Yolov3 사용
  • Part 10 - This Post
  • Part 11 - 11: Face Recognition with Tracking
  • Part 12 - 12: 중간 정리
▼ 목록 보기

Feature Apperance Model 변경

DEEPSORT (2)DeepSort flowchart

물체 추적을 담당하는 Deepsort의 구조는 위와 같다. 새롭게 탐지된 객체들의 매칭을 수행하기 위해 Matching Cascade라는 방법을 사용한다. 가장 적합한 객체와 새롭게 탐지된 객체를 매칭하기 위해서는 이를 표현할 Metric이 필요하다. 위 논문에서는 다음과 같은 Feature Appearance Model을 사용하여 해당 그림를 표현하는 128차원 벡터를 추출한다.

image

image

2개의 Conv layer와 Residual 네트워크를 사용하여 128차원 Vector를 추출하였다. 하지만 기본적으로 Deep sort는 보행자를 구분하기 위해 제작된 바, 입력의 크기가 128x64로 세로로 긴 직사각형의 형태를 띈다. 이는 현재 제작하려는 Face Tracker에 문제가 되는 부분이다. 얼굴의 형태는 보행자의 모양처럼 2:1의 aspect ratio를 가지지 않는다. 1:1에 비율에 맞는 input size에 대해 Feature extraction을 하는 것이 보다 이 과제에 적합한 방향이다.

Arcface

Arcface는 Face Recognition을 위해 제작된 Feature Extractor이다. Resnet34를 backborn으로 사용하고, 이를 기반으로 Additive Angular Margin Penalty 기반으로 학습을 진행하여 512차원의 벡터를 추출한다.

image

이러한 방법을 사용했을 때, 기본 Softmax를 사용했을 때 보다 각각의 id를 구분하는 Feature가 생성된다고 한다. 얼굴의 특징을 추출하고, 이를 구분하기 위해서는 보다 정확한 feature extractor가 필요하다고 판단, 현재 구성된 보행자 기반 모델을 이를 사용하여 대체하는 작업을 진행했다.

DEEPSORT_with_Arcface

순서는 다음과 같다.

  1. 정적인 파일로 존재하는 사진으로 부터 파일을 읽는다.
  2. 이를 Yolov3를 통과하여 얼굴을 탐지한다.
  3. 탐지된 Detection box를 기반으로 이미지를 patching한다.
  4. patching된 이미지를 바탕으로 Arcface를 통해 Feature Extraction을 진행한다.
  5. 이를 지정된 얼굴의 이름을 기반으로 Key-map 구조로 가지고 있는다.
  6. Track 객체가 생성될 때, Feature를 이미지의 Feature와의 Cosine 값을 구한다.
  7. 이 값들 중 가장 작은 값(이전 프레임으로부터 생성된 Feature들과 이미지 Feature가 가지는 가장 작은 값 = 넣은 input이미지와 가장 비슷했을 때 유사도)을 추출한다.
  8. 7번의 값이 일정 threshold보다 작을 경우 face_name을 추가한다.

작동

image image image

KakaoTalk_Photo_2021-05-10-21-00-33

하지만 잘 작동이 되지 않았다. 다른 Track 객체가 생성되었을 때, cosine 유사도를 검증했을 때, 대부분 0.3근처의 값이 도출되었다. 두 가지 문제라 생각할 수 있다. 1) Metric을 매칭하는 방법이 잘못되었다, 2) 객체가 생성될 때 face_name을 매칭하는 것이 오류를 부르는 방법이다. 추가로 이러한 방향을 테스트하여 Identification이 되는 Tracker를 제작한다.

오류 해결 추가 방향

  1. Track 객체가 생성될 때 비교하지 말고, Matching이 되었을 때 비교한다.
  2. Cosine metric이 가장 작을 때가 아닌 다른 metric을 사용하여 face_name을 매핑한다.
  3. 다른 영상에도 적용하여 결과를 파악한다.