공돌이 공룡의 서재

[Overview] Multiple Object Tracking 이란 (2) 본문

딥러닝/Tracking

[Overview] Multiple Object Tracking 이란 (2)

구름위의공룡 2022. 4. 10. 16:00

1. DeepSORT

이전에 올린 글에서, SORT 는 결국 motion 을 기반으로 tracking 하는 방식이라고 설명했다. Kalman Filter 와 IOU cost 만을 사용하기 때문이다. 따라서 두 Track 이 겹칠 때에도 이 2가지만 사용하기 때문에, 생김새가 다름에도 불구하고 ID 가 바뀌는 경우가 빈번히 일어난다.

이 배경에서 등장한 것이 DeepSORT 이다. SORT 과정 앞에 Appearance 를 기준으로 1차 matching 을 한 다음, 여기서 matching 이 안 되는 Track 과 Detection box 들에 대해 SORT 방식으로 진행한다. 즉, Motion-based Tracker 인 SORT에 Appearance-based Tracker 가 추가된 것이다. Flowchart 는 다음과 같다.


이미지 출처 : [https://wansook0316.github.io/ds/dl/2021/03/14/computer-vision-17-DeepSort.html](https://wansook0316.github.io/ds/dl/2021/03/14/computer-vision-17-DeepSort.html)



저 Matching Cascade는 무슨 과정일까? 컨셉만 먼저 설명하자면 다음과 같다.



이전 프레임에 트랙이 3개 있고, 각 Track 은 자기 자신이 추적하고 있는 대상의 이미지를 crop 해서 CNN 에 넣은 결과를 feature로써 저장하고 있는다. 그 다음, 새로운 프레임이 들어올텐데 여기선 아직 Track 과 Box 사이 매칭이 안 된 상태다. Box들을 모두 CNN 에 넣어서 각 Box 마다 feature 를 갖게 될 것이다. 여기서 주의할 점은, CNN 의 output은 1차원 feature vector라는 점이다.



그 다음에는 Box 의 feature vector 와 각 Track 들이 갖고 있는 feature vector를 내적 (cosine distance) 로 값을 구해서, 그 값이 1에 가까운 Track 과 box가 매칭이 된다.

실제로는 Track 과 Box들이 여러개라서 1:N 매칭을 여러번 하는 것이 아니라, Matrix 를 이용해서 한 번에 연산이 이뤄진다.



Matching Cascade 를 좀 더 자세히 설명하면, 다음과 같다.

  • Matching Cascade Detail

    각 Track 마다 age가 있다. track 이 detection box 와 matching이 되어서 update가 되면 age는 0으로 설정되고, matching 이 안 되면 frame 이 바뀔 때마다 값이 1씩 늘어난다. 만약 Track의 age가 0으로 유지된다면 frame 내에서 계속 보이고 있는 object에 대해 추적하고 있는 것이다. 반면 age 가 늘어나고 있는 track은 과거에는 보였으나 지금은 계속 보이지 않는 object 에 대해 추적하고 있는 것이다.

    Matching Cascade 에서는 모든 Track 들 중 age가 0인 것부터 먼저 detection box와 matching 을 하고, 그 다음 age 값을 높여가며 해당하는 track과 detection box를 matching 하는 방식이다.


2. Person Re-Identification

DeepSORT 방식이 잘 동작하려면 Appearance 를 잘 잡아내는 CNN 이 필요하다. 여기서 이 CNN 에 대해 여러 질문을 할 수 있다.

  • 모델 구조는 어떻게 될까? Image Classification 에서 쓰는 모델로 충분할까? Task 에 맞는 더 좋은 모델이 있지 않을까
  • 학습은 어떻게 시킬까? 최종적으로 필요한 것은 classification label 이나 bounding box prediction 이 아닌, 다른 사람들에 대해서는 잘 구분해내고 같은 사람은 부분적으로 바뀌어도 여전히 같은 사람으로 인식할 수 있도록 해주는 feature vector다.
  • 어떤 Dataset 을 이용해서 학습을 시켜야할까

이런 질문들에 대한 답을 연구하는 분야가 바로 Person Re-Identification 이다. 우선 처음으로 Dataset 에 대해 알아보자.

2.1 Person Re-Identification Dataset

주로 쓰이는 Dataset 은

  • DukeMTMC
  • Market-1501
  • CUHK

등이 있다. 종류도 종류지만 데이터셋의 특징을 아는 것이 중요하다.

한 사람에 대해 여러 각도 및 위치에 있는 카메라에서 촬영한 비디오 프레임들로 구성되어 있다. 즉, 아래와 같은 구조를 갖는다.

Person ID 2
    - video trackelt ID 1
        - Frame 1
        - Frame 2
        ...
    - video tracklet ID 2
        - Frame 1
        - Frame 2
        ...
    - ...
Person ID 1 
    - video trackelt ID 1
        - Frame 1
        ...
    ...

이런 구조의 데이터셋으로 어떻게 학습을 할까?

2.2 Model Training

Classification

우선 매우 단순하게 접근해보면 사람마다 다른 ID 를 갖고 있기 때문에 classification loss 를 적용해볼 수 있다.

일반적인 Image classification model 과 같이 label 을 prediction 하고, Cross entropy loss 로 학습한다. classification loss를 이용하면 Feature space 상에서는 다음과 같은 동작한다. 하나의 line에 대해 feature들이 정렬되는 형태다.

Re-ID task는 아니지만 MNIST classification 한 후에 feature space를 visualize 해보면 다음과 같다. 위 그림에 대한 보충 개념으로 봐주면 좋겠다.

Feature Similarity

다음으로는 Feature Similarity 에 대해서 학습을 시키는 방법들이다. 한 사람에 대한 사진들은 각도나 외관 등이 조금씩 바뀌더라도 feature 자체는 비슷해야 한다. 반대로 다른 사람들끼리는 feature 가 달라야 한다. feature space 상에서 한 사람에 대한 사진들에 대한 feature 는 거리가 가깝게 mapping 되어야 하고, 서로 다른 사람들에 대한 feature는 서로 거리가 멀도록 mapping 되어야 한다.

이 목표를 달성하기 위해선 우선 CNN 에서 1D feature vector를 뽑아낸 다음, Contrastive loss 나 Triplet loss를 적용하는 방법이 있다.



먼저 Contrastive loss 에 대해 알아보자.

Contrastive loss function

수식이 복잡해 보일 수 있으나, 결론은 같은 ID 에 해당하는 이미지에 대한 feature 는 거리가 가깝게, 다른 카테고리는 거리가 멀도록 학습하는 방향이다. feature vector 의 차이에 대한 L2 norm 은 euclidean distance 라 할 수 있기 때문이다.



다음으로는 Re-ID 에서 가장 핵심이 되는 loss 인 Triplet loss 에 대해 알아보자.

Contrastive loss 가 2개로만 pair 를 만들었다면, Triplet loss는 anchor, positive, negative 3개를 이용하여 pair를 만들어서 학습하는 방법이다. anchor 는 기준이 되는 이미지, positive는 anchor 와 같은 카테고리에 속하지만 다른 이미지, negative 는 anchor 와 다른 카테고리에 속하는 이미지다.

Triplet loss function

anchor 와 positive 간 거리는 가깝게 하며 동시에 anchor 와 negative 간 거리는 멀어지도록 한다. feature space 상에서는 다음과 같이 동작한다.

Triplet loss 는 나아가서 Hard negative mining 과 같이 사용하기도 한다.



Center loss 도 Re-ID 에서 많이 쓰는 loss 다. 본래는 Face recognition 에 대한 논문인 FaceNet 에서 나온 loss 다. 위의 MNIST classification visualize 그림을 다시 보고 와보자. 하나의 line 에 대해 feature 들이 길게 퍼져 있는 형태를 하고 있다. 다시 말하면, 하나의 카테고리 내부에서 variation 이 크다고 할 수 있다. 이를 intra-class variation 이라 한다. (반대 개념은 inter-class variation 이다.)

Center loss function

특정 카테고리의 center vector 에 대한 거리 차이를 계산하여, 이를 줄이도록 학습을 하는 것이다. MNIST 분류의 경우 Classification loss 와 같이 이 loss를 사용하면 아래와 같은 결과를 얻을 수 있다.

feature 가 clustering 처럼 mapping 이 된 것을 확인할 수 있다. feature space 상에선 다음과 같이 동작한다.

Center loss 개념에서 나아가서, 요즘 SOTA 논문들은 Cluster level feature alignment 나 Centroids-Triplet 같은 loss function들을 사용한다.

2.3 Model Structure

초창기 Re-ID 모델들을 보면 ResNet 기반 모델을 사용한다. ResNet은 원래 Classification 을 위한 feature extractor 이고 layer가 깊어질수록 high level feature를 담고 있게 된다. 그런데 Re-ID data 특징상, 모든 object가 다 사람이라서 팔 다리 몸통, 등등 이 공통이기도 하고 머리 색이나 옷 색도 서로서로 비슷할 수 있으므로 high level feature가 어느 정도 비슷한 경향이 있다.

사람들을 잘 구분할 수 있으려면 detail 한 특징들도 잘 잡아낼 수 있어야 하는데, ResNet 을 그대로 사용하게 되면 이런 특징에 대한 sensitivity 가 줄어든다. 이러한 한계를 극복하고자 나온 모델이 OSNet (Omni-Scale Feature Learning for Person Re-Identification, ICCV 2019) 다.

위와 같이 생긴 Block 을 사용한다. Lite 3x3 은 3x3 kernel 을 사용하는 Depthwise convolution layer 에 해당한다. 보면 각 path 마다 lite 의 수가 다른 것을 볼 수 있다.

이는 위 그림과 같이 각 path 의 receptive field가 다른 것을 의미하는데, 각 path 들의 정보들을 aggregation 해서 사용하면 multi-scale 에서 feature를 잡아낼 수 있다.

이 논문 이후에 Baseline 을 OSNet으로 두고 더 발전시킨 연구들이 많이 나왔다. Top DropBlock 이나 LightMBN 같은 모델들이 볼 만하다.


마무리

지금까지 Kalman Filter , SORT, DeepSORT, Person Re-ID 에 대해서 알아보았다. Tracking 에 있어서 가장 기초인 개념들이다.

Reference

  • Kalman Filter wiki
  • SORT paper
  • DeepSORT paper
  • FaceNet paper
  • OSNet paper
  • Cluster level feature alignment for person re-identification paper
  • Constellation Loss paper
  • on the unreasonable effectiveness of centroids in image retrieval paper
Comments