Deep Sort論文筆記:SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC

Patty Wu
Apr 3, 2021

--

最近在複習一些Object tracking的論文,因此記錄下筆記。

Deep Sort是在目標追蹤上有名的論文之一,算是2-stage的目標追蹤模型,是基於Sort在遮擋與ID Switch問題上的改良版。

以下圖示表示在行人追蹤的問題中,遮擋的問題非常的頻繁。

流程

DeepSort流程如下:

  1. 檢測器得到 t 時間的 detection bbox,更新track set
  2. 經過卡爾曼濾波器預測 t + 1 時的prediction bbox
  3. 檢測器得到 t + 1的detection
  4. 使用匈牙利算法配對 t + 1的detection和prediction的bbox,更新track set

如此重複2~5步驟來進行目標追蹤,並把資訊都存放在track set中。可以看出它其實是分成三個問題,而DeepSort主要的貢獻在於2、3。

  1. 目標檢測器
  2. 追蹤
  3. 匹配

目標檢測器

DeepSort論文使用Faster RCNN + skip pooling + multi-region來當作它的檢測器,不過DeepSort的主要核心在於3,因此實務上可以搭配任意效果好的目標檢測器。詳情可以參考這篇論文:

POI: Multiple Object Tracking with High Performance Detection and Appearance Feature

追蹤

該論文使用卡爾曼濾波器 (Kalman Filter)進行追蹤,原理與在Sort中相同,DeepSort定義了8維度的state來表示bounding box (bbox)和其速度:

u, v代表bbox的x,y座標,r代表長寬比,h代表高度。剩下4個有點上標的是前述4個state分別的速度。這邊使用線性的卡漫濾波器,也就是假設物體是等速運動的。

Track更新規則:

  1. 每個track k都會計算連續匹配失敗的次數Age,若Age大於預先設定好的max Age,視為該目標已經離開,將k從track set刪除。如果被配對到,Age就歸0。
  2. 對於每個新目標,也就是沒有被配對到的detection,會初始化一個track,它在一開始的3個幀可以匹配,但是只能先得到暫時的分類,如果這3幀都成功配對到,該track就可以正式得到一個id,反之,如果前3幀其中1幀配對失敗,該目標就會被視為誤判,然後被刪除。

匹配

DeepSort論文的核心,匹配步驟如下,它使用了匈牙利演算法 (Hungarian Algorithm)來進行配對,不過不是所有detection和track一起配對,而是考慮到Age,分層配對,來解決遮擋對配對造成的問題。

試想當一個目標長時間被遮擋,卡爾曼濾波器的結果會非常不穩定,造成detection和track的距離很大。如果當兩個track競爭同一個detection時,馬氏距離會讓不確定性越大(分母越大)的track被配對到,這顯然會造成追蹤效果不好。為了解決這個問題,越近期有被配對到的track,應該更優先進行配對。反之,遮擋很久,很久沒被配對到的track,即便跟detection距離很小,配對的priority也應該降低。

針對不同Age進行分層匹配,每一層都先計算cost矩陣C與gate矩陣B,然後使用匈牙利演算法用來配對,剩下沒被配對到的detections會進入到下一層,跟Age更大的track配對。

匈牙利算法會依據代價矩陣C進行配對,這個C的計算就比較複雜了,我們用距離(相異程度)來表示代價,當detection和track的距離很大時,代表把他們配對在一起的代價很高,不應該被配對到。

相比於Sort,使用bbox的IOU作為距離來計算代價矩陣。DeepSort不僅使用了motion的距離,還加入了appearance的距離,來幫助配對,這也是DeepSort的主要賣點之一。那麼對於第i個track與第j個detection的代價(距離),Ci,j的公式如下,是motion距離 d(1)和appearance距離d(2)的加權和:

對於第i個track與第j個detection的motion距離,使用馬氏距離去計算,馬氏距離的好處是有將狀態不確定性加入考量:

其中dj表示第j個detection的bbox,yi表示第i個track的bbox,bbox的狀態也就是前面說的卡爾曼濾波器使用的前4個狀態,x,y座標、長寬比、高度:

並且我們可以給它一個馬氏threshold,排除掉95%信賴區間外的track,因為它的不確定性太高了。

接下來來計算appearance距離,對於每個detection的bbox dj,我們都計算appearance descriptor rj,其實就是第j個detection的外觀特徵,由CNN進行特徵萃,得到維度為128且標準化過的外觀特徵向量,這個CNN是off-line事前訓練好的,推論的速度上還ok,可以用在real-time的目標追蹤。

同理也可以拿來計算第k個track的appearance descriptor rk,這邊沒有每個track都計算,而是給定Lk=100,只算最後100個track,我們把這個集合叫做Ri。因此,對於第k個track與第j個detection的appearance距離,以cosine similarity計算得到的公式如下:

同motion距離,我們也可以給appearance距離一個threshold,如果小於這個threshold,就可以接受用來配對。這個threshold是在off-line訓練CNN時,根據training data決定的。

代價矩陣Ci,j為motion、appearance距離的加權和,必須同時通過上述兩個threshold才能用來匹配,2個threshold的交集即為匹配步驟中的gate matrix B:

以上就是DeepSort的核心概念。

效能

以下數據中的DeepSort,是以lambda=0 (也就是只用appearance特徵,未使用motion特徵),與max Age=30 frames進行測試。

雖然說以MOTA、MOTP來看,Sort和DeepSort表現差不多,然後POI顯著稱霸Online的方法。不知道是不是因為沒有用motion特徵,所以FP蠻高的。

DeepSort因為考量了Age進行分層匹配,以及加入了appearance特徵,因此相較Sort,大大改善了遮擋以及ID Switch的問題,所以在ID Switch、ML (mostly lost)上可以看到DeepSort改善非常顯著。

不過沒有遮擋問題的話,Sort的表現還是很好的,且速度上仍是最快。如果DeepSort有用上motion特徵的話,想必FPS又會拉更低。

--

--

No responses yet