Abstract
Camera-based 3D MOT에 대한 새로운 end-to-end framework를 소개합니다!
문제
Detection과 tracking을 하나의 query만 사용해서 해결하는 것은 성능이 좋지 않다.
- Detection은 localization, tracking은 association을 담당하므로 서로 너무 다른 일을 처리한다.
- 하나의 query로 두 task를 모두 해결하려고 하면, 두 부분 모두 성능이 낮아진다.
- Representation conflict 라고 표현
해결
Detection과 tracking 각각에 대해 query를 만들어 사용
- Decoupled query 라고 표현
Introduction
Tracking-with-query 접근이 많이 이루어지지만, 대부분 single query를 사용한다.
- Single query는 서로 다른 task로 적용될때 representation conflict가 일어나 성능이 좋지 않았다.
하지만 DQTrack은 detection과 tracking 각각에 대해 서로 다른 query를 사용한다.
- 2D MOT에서 MOTR같은 시도가 있었으나, decoder가 무겁고 객체와 track을 연결하는(association) 파트는 학습하지 않는다는 한계가 있다.
DQTrack는 end-to-end MOT framework이다.
가장 핵심적인 문제는 모델이 객체 추적을 학습하는 것이다.
이는 tracking의 두가지 고질적인 문제를 해결하는 것으로 이어진다.
1. 추적되는 객체들과(trajectories) 탐지된 객체들을(detected objects) 어떻게 연결(association)할것인지.
2. 프레임이 변화할때, 추적되는 객체에 대한 표현(representation)은 어떻게 변화(update)시킬것인지.
Association problem
첫번째 문제는 당연히 추적중인 객체와 탐지된 객체사이의 관계를 학습하게 만들면 된다.
- 이를 learnable association 이라고 한다.
DQTrack은 learnable association을 track query를 기반으로한 두가지 방법을 통해 구현했다.
1. Embedding interaction
- 탐지된 객체끼리의 상호작용을 높이는 것을 의도했다.
- 탐지된 객체는 embedding 된 형태로 존재한다.
- 상호작용을 높이는 것은 self-attention을 통해 구현한다.
- 만들어진 embedding은 track query 초기화에 사용된다.
2. Query association
- 객체의 특징과 객체의 움직임을 섞은 결과를 track query에 넣는것
- Association에 대한 robustness를 올리는 것을 의도했다.
Update problem
매 프레임에 대해 추적중인 객체의 representation을 계속해서 update 해준다.
Update는 크게 어려운 파트가 아니기 때문에 별 내용이 없다.
Tracking with Decoupled Queries
이제 DQTrack을 자세히 알아보자.
링크로 걸린 코드들은 PETR 기반의 DQTrack임을 알립니다.
[Encoder and Decoder]
Encoder의 경우, 이미 잘 만들어진 모델을 사용한다.
- VoVNet
- ResNet-101
이때 encoder의 output이 바로 BEV space로 변환되는것처럼 나오지만 그렇지 않다. [코드]
단순히 이미지 각각이 backbone과 neck을 거쳐서 나온다.
Decoder는 transformer decoder형태를 사용한다. [코드]
- 구체적으로는 deformable DETR의 decoder를 사용한다.
- Object embedding과 positional한 특징들을 상호작용시킬 수 있기 때문
Decoder 부분에서 image metadata와 함게 BEV space에 대한 image feature가 만들어진다. [코드]
Decoder는 query, key, value로 다음과 같은 값들을 사용한다.
- Query : Object query($Q_{o}$)
- Key, Value : Backbone에서 나온 image feature($X^{t}$)를 BEV space로 변환한 값($X^{t}_{B}$)
Decoder의 결과로 object embedding($E^{t}_{O} \in \mathbb{R}^{M \times C}$)이 생성된다. [코드]
- $M$ : Query 개수(탐지할 객체의 개수)
- $C$ : Embedding channel
이후 생성된 object embedding으로부터 detection 결과($P^{t}_{D}$)를 생성한다. [코드]
- FFN(Feed-Forward Network)를 사용한다.
- NMS(Non-Maximum Suppression)은 적용하지 않는다.
[Learnable Association] Embedding Interaction
Embedding update를 통해 새로 업데이트 한 embedding($E^{t}_{U}$)을 생성한다.
- 코드상에서는 embedding update가 없다.
- $E^{t}_{U} = E^{t}_{O}$ 로 사용된다.(Decoder로 만든 object embedding을 그대로 사용)
입력은 다음과 같다.
- $E^{t}_{O}$ : Decoder 결과였던 object embedding
- $E^{t-1}_{U}$ : 이전 time step에서 업데이트 됐던 object embedding
업데이트된 object embedding($E^{t}_{U}$)은 두개의 FFN의 입력으로 사용된다.
- 각각 track embedding, object embedding을 생성한다.
- Track embedding($E^{t}_{UT}$) : Tracking 후보와 관련된 embedding을 생성하는 목적이다.
- Object embedding($E^{t}_{UO}$) : 연결관계(association) 구성을 위한 embedding을 생성하는 목적이다.
이후 두 embedding 들은 concatenate 된다. [코드]
Concatenate된 embedding은 self-attention을 통과한다.
Concatenate의 의도는 다음과 같다.
- 탐지된 객체들 서로의 관계를 학습
- 탐지된 객체들과 tracking 후보끼리의 관계를 학습
이후 FFN을 통과한 뒤, slicing으로 track embedding과 object embedding을 구별한다. [코드]
- Object Embedding은 이후 association embedding($E^{t}_{A}$)이라는 이름으로 사용된다.
[Learnable Association] Query Association
먼저 appearance affinity($F^{t}_{A}$)을 구해야한다.
- Embedding interaction을 통해 구했던 association embedding($E^{t}_A$)과 appearance query($Q^{t}_{A}$)을 사용한다.
- 이때 $E^{t}_{A} \in \mathbb{R}^{M \times C}$ 이고, $Q^{t}_{A} \in \mathbb{R}^{N \times C}$ 이고, 여기서 $N$은 track의 개수이다.
- 두 입력은 hadamard product를 통해 $\mathbb{R}^{M \times N \times C}$ 가 된다. [코드]
코드를 보면, appearance query가 왜 t시점인지 헷갈릴 수 있다.
이전 time step에서 다음 time step에 사용하려고 만들었기 때문이라고 이해했다.
다음으로 motion affinity($F^{t}_{M}$)을 구한다.
- L2 distance는 다음 두가지 입력을 사용한다.
- Motion query라고만 나와있는데, 코드를 보면 이는 track들이 t시점에 어디에 위치하는지를 의미한다는 것을 알 수 있다. [코드]
- Object motion embedding은 이름이 거창하지만, 탐지된 객체들의 위치를 의미한다.
- 이후 FFN을 한번 더 통과해서 motion affinity를 생성한다.
위에서 생성한 appearance 및 motion affinity는 element-wise로 더해진다.
- 더해진 결과를 fused embedding이라고 이름 붙혔다.
이후 MLP와 softmax를 거쳐서 최종적인 affinity matrix를 생성한다.
- Softmax는 track과 탐지된 객체간의 유사도 측정을 위해 사용된다. [코드]
[Temporal Update] Track query
Track query는 두가지로 이루어져있다.
1. Track motion
2. Track appearance
따라서 track query를 업데이트하는 부분도 motion과 appearance두 부분으로 나눠서 진행된다.
Motion은 query association의 motion affinity를 구하는 부분에서 미리 언급했었다.
- Velocity와 frame간의 시간 차이를 곱하고 track의 과거위치와 더해서 update한다. [코드]
- 저자는 이 부분을 kalman filter로 바꾸는것도 괜찮을거라 한다.
Appearance부분은 EMA(Exponential Moving Average)를 사용하여 업데이트한다. [코드]
- 입력은 다음 두가지가 사용된다.
1. Appearance query($Q^{t}_{A}$)
2. Embedding interaction에서 구했던 track embedding($E^{t}_{T}$)
- 앞서 구했던 affinity matrix($P^{t}_{T}$)를 기반으로 hungarian matching을 통해 탐지된 객체와 track들을 연결하고, 연결된 track들만 업데이트한다. [코드]
- Hungarian maching은 inference시점에만 사용된다.
- Appearance query는 t-1시점에 업데이트된 track embedding이다.
[Temporal Update] Object embedding
Embedding interaction 부분에서 소개됐던 부분이다.
Object embedding도 마찬가지로 다음 두 입력의 EMA로 업데이트한다.
- $E^{t}_{O}$ : Decoder output
- $E^{t-1}_{U}$ : 이전 time step에서 업데이트 됐던 object embedding
그러나 앞서 말했듯, 직접 사용된 방법이 아니다.
- Result 부분에는 stereo 방법에만 사용됐다고 하는데, stereo 방법에서도 안 쓰였다.
[Optimization and Inference] Optimization Objectives
Detection의 경우, DETR과 같이 set-to-set approach로 loss를 구성한다. [코드]
Tracking association의 경우, 추적중인 객체를 계속해서 추적할 수 있도록 optimization target을 만든다.
위에서 생성했던 affinity matrix($P^{t}_{T}$)와 optimization target으로 cross-entropy를 계산하도록 한다. [코드]
객체가 가려지는 시나리오에 대한 robustness를 높이기 위해 track query에 augmentation을 적용한다. [코드]
1. Training 때, false positive들중 몇개를 랜덤으로 뽑는다.
2. 뽑힌 false positive들로부터 track embedding을 생성한다.
3. 생성한 track embedding을 기존 track query에 추가한다.
매칭되지 않은 track들에 대해 maximum entropy regularization을 적용한다.
- 매칭되지 않은 트랙의 확률이 $1 \over \#unmatched\_track$ 가 될 수 있도록 하는 것. [코드]
- #unmatched_track : 매칭되지 않은 트랙의 개수
Maximum entropy regularization(ME) 부분은 특정 논문을 언급하고 넘어간다.
해당 논문의 ME 관련 부분을 정리해보자면 다음과 같다.
새로 추가된 객체와 이미 추적중인 객체들의 유사도를 측정했을때, 어떻게 나와야 가장 이상적일까?
기존에는 객체가 새로 나타난다는 가정을 하지 않고, 객체끼리의 매칭만을 목적으로 학습시켰다.
- 이 경우, 새로운 객체는 이미 추적중인 객체중 하나와 유사도가 높게 나올 수밖에 없다.
- 어느 객체와도 매칭되지 않아야하지만, 특정 객체와 무조건 매칭되도록 학습되었으므로 이는 틀린 접근이 된다.
결론적으로 새로 추가된 객체와 이미 추적중인 객체 사이의 유사도를 측정했을때, 값의 분포는 uniform(균등) 해야한다.
- Uniform한 분포일때 entropy는 최대(maximum)이다.
다시 DQTrack으로 돌아오면, 매칭되지 않은 객체들을 앞서 말한 내용에서의 새로 추가된 객체로 본다는 것을 알 수 있다.
- 기존 방식은 이들을 아예 학습 대상에서 제외했다.(cross entropy에서 target이 0)
- DQTrack은 이들이 매칭될 확률을 uniform하게 만들면서(maximum entropy) 학습에 포함시킨다.
최종적인 loss는 다음과 같이 구성된다.
- Detection loss
- Association loss
- Maximum entropy regularization