Towards Real-Time Multi-Object Tracking

文章:https://arxiv.org/pdf/1909.12605v1.pdf
代碼:https://github.com/Zhongdao/Towards-Realtime-MOT

0 摘要

現代的多目標追蹤(MOT)系統大多遵循基於檢測的追蹤這一實現思路。該類思路的實現一般包括兩個模型,一個是目標檢測模型用於目標定位,另一個是目標表觀特徵提取模型用於目標關聯。一般算法都是使用兩個不同的模型分別完成檢測和特徵提取任務,這樣在執行目標追蹤任務時,總的耗時是兩個模型耗時的總和,這樣很容易降低追蹤系統的執行效率。現有的MOT算法大多關注於實時目標匹配而不是實時MOT系統。本文,作者提出了使用單個共享模型同時完成目標檢測和目標表觀特徵提取任務,即將目標特徵任務合併到一個單階段的目標檢測模型中,這樣該模型可以同時輸出目標檢測框和表觀特徵。這樣就形成了一個多任務學習問題,即同時完成目標分類、bounding box迴歸和表觀特徵學習,損失函數是三個子任務的加權和。最終得到了SOTA的追蹤效果,並且根據不同分辨率的輸入圖像,可以以18.8到24.1FPS進行MOT。

1 簡介

基於檢測的追蹤包括兩個步驟:

  1. 目標檢測:在圖像上定位目標;
  2. 目標關聯:將當前幀檢測到的目標和已存在的目標軌跡相關聯。目標關聯中一般都會用到目標重識別(re-ID)模型。

一般都是使用兩個獨立的模型分別完成上述兩個任務,作者稱之爲SDE(Separate Detection and Embedding)。因爲用到了兩個模型,所以往往效率不太理想。

因爲上述兩個模型可以共享低層特徵,因此完全可以使用一個模型完成兩個任務。直觀的想法是可以使用Faster R-CNN同時完成這兩個任務,Faster R-CNN中的RPN保持不變,用於bounding box定位,但R-CNN模型可以修改成有監督的特徵學習而不是進行有監督的目標分類。儘管這樣修改可以提升效率,但由於受限於兩階段設計,一般運行效率低於10FPS,達不到實時運行的需求。這種方法這裏稱作Two-Stage方法。

作者提出了JDE(Jointly learns the Detetor and Embedding model),同時完成目標檢測和表觀特徵學習。

SDE、Two-Stage Method和JDE的區別如圖1所示。

在這裏插入圖片描述爲實現JDE,需要實現多個關鍵組件:訓練數據、網絡結構、目標函數、優化策略和驗證準則。首先結合6個行人檢測和行人搜索公開數據集形成一個大的標註數據集,這個數據集中標註了所有行人的位置信息和部分行人的身份信息;其次,選定FPN作爲骨幹網絡;第三,這樣一個多任務學習問題包括了anchor分類、bbox迴歸和表觀特徵學習三個子任務,作者採用Multi-task learning using uncertainty to
weigh losses for scene geometry and semantics.介紹的利用任務的不確定性動態進行損失的加權。最後,使用AP(Average Percision)衡量檢測的效果,使用檢索的TAR和FPR衡量表觀特徵的優劣,使用CLEAR標準衡量MOT的準確率,尤其關注MOTA。

2 檢測和表觀特徵聯合學習

在這裏插入圖片描述JDE的目標是在單次前向運算過程中輸出檢測框和目標的外觀特徵。

將數據集表示爲{I,B,y}i=1N\{I,B,y\}_{i=1}^NIRc×h×wI \in R^{c \times h \times w}表示一個視頻幀,BRk×4B \in R^{k \times 4}表示該視頻幀中標註的k個目標的位置信息,yzky \in z^{k}表示標註的目標身份信息,-1則表示該目標未標註身份信息。JDE的目標是預測bounding box B^Rk^×4\hat B \in R^{{\hat k} \times 4}和表觀特徵F^Rk^×D\hat F \in R^{\hat k \times D},D表示各目標的特徵維度。JDE應該滿足下述要求:

  • B^\hat B應該和B儘可能接近;
  • 給定距離度量d(.)d(.),對任意的三元組(kt,kt+Δt,kt+Δt)(k_t,k_{t+\Delta t,k^{'}_{t+\Delta t}})滿足ykt+Δt=ykty_{k_{t+\Delta t}} = y_{k_t}ykt+Δtykty_{k^{'}_{t+\Delta t}} \neq y_{k_t},有d(fkt,fkt+Δt)<d(fkt,fkt+Δt)d(f_{k_t},f_{k_{t+\Delta t}}) < d(f_{k_t},f_{k^{'}_{t+\Delta t}})fktf_{k_t}F^t\hat{F}_t的一個行向量,fkt+Δtf_{k_{t+\Delta t}}fkt+Δf_{k^{'}_{t+\Delta}}是來自於F^t+Δt\hat F_{t + \Delta t}的行向量。

上述兩個目標函數,第一個是要求檢測儘可能準確;第二個是要求同一個目標不同幀之間的表觀特徵要比不同目標不同幀之間的表觀特徵距離小。距離度量函數可以是歐氏距離或餘弦距離。理論上來說,如果上述兩個目標函數可以很好的滿足,那麼即便使用最簡單的關聯策略,例如匈牙利算法,也可以產生良好的追蹤效果。

整體網絡

使用FPN作爲骨幹網絡,FPN使用多尺度的特徵進行目標檢測,可以檢測不同尺度大小的行人目標。圖2簡單介紹了JDE的網絡結構,輸入視頻幀通過骨幹網絡的前向計算過程獲取了三個尺度的特徵圖,分別將空間尺寸下降了32,16和8倍。然後將空間尺寸最小的特徵圖(對應最強的語義特徵)進行上採樣,然後和第二小的特徵圖使用skip connection進行融合。對其他的尺度也進行相同的操作。最後,將基於三個尺度融合的特徵圖的預測頭進行相加。預測頭由數個堆砌的卷積層組成,輸出尺寸爲(6A+D) * H * W的預測。A表示各尺度的anchor box的數目,D是特徵embedding的維度。最終的密集預測分爲三部分:

  1. box分類結果,大小爲 2A * H * W;
  2. box迴歸係數,大小爲 4A * H * W;
  3. 特徵embedding的尺寸,大小爲 D * H * W。

學習檢測

檢測分支和RPN很接近,但有兩項修改。第一個,針對行人目標,重新設計了anchor的數量、大小和長寬比。基於先驗知識,所有的anchor框的寬高比設置爲1:3;設置A=4,即各尺度包含4個anchor,3個尺度共12個;anchor的寬度從118×21211 \approx 8 \times 2^{\frac{1}{2}}5128×2122512 \approx 8 \times 2^{\frac{12}{2}}。第二個,是關於判定各anchor屬於前景和背景的閾值,按照慣例,如果某anchor和ground truch的IOU大於0.5則認爲其是前景目標,如果某anchor和任意ground truth的IOU都小於0.4,則認爲該anchor表示背景。這裏作者使用了0.4,而不是普遍使用的0.3,這樣會使得更多的少量重疊的目標被判定爲背景,有助於減少誤報率,在高度重疊的場景下比較有益。

檢測的目標函數包含兩部分,分別是分類損失和定位損失,分類損失使用交叉熵損失,定位損失使用smooth-L1損失,和Faster R-CNN一致。

學習表觀特徵

第二個問題是學習表觀特徵,目的是使得同一目標表觀特徵的差異比不同目標的表觀特徵的差異小。可以使用三元組達到這個目的。使用三元組損失Ltriplet=max(0,fTffTf+)L_{triplet} = \max(0,f^Tf^- - f^Tf^+),其中fTf^T表示mini-batch中被選爲anchor的實例,f+f^+表示和fTf^T對應的正例,ff^-表示和fTf^T對應的負例。原始形式的三元組損失難以優化,首要原因就是訓練集具有巨大的採樣空間。本文中,我們在單個mini-batch中最小化所有負例和最難優化的正例的損失來接近問題,即
Ltriplet=imax(0,fTfifTf+)(1)L_{triplet} =\sum_i \max(0,f^Tf^-_i - f^Tf^+) \tag{1}
f+f^+表示一個mini-batch中最難優化的正例。

三元組損失的第二個挑戰是損失函數值不穩定且收斂速度慢。爲了穩定訓練過程並加速收斂過程,這裏優化三元組損失的smooth上限。即
Lupper=log(1+iexp(fTfifTf+))(2)L_{upper} =\log (1 + \sum_i \exp(f^Tf^-_i - f^Tf^+)) \tag{2}
式(2)可以變換成:
Lupper=log(exp(fTf+)exp(fTf+)+iexp(fTfi))(3)L_{upper} =-\log (\frac{\exp(f^Tf^+)}{\exp(f^Tf^+)+\sum_i\exp(f^Tf^-_i)}) \tag{3}
式(3)和交叉熵損失的表達式很接近,
LCE=log(exp(fTg+)exp(fTg+)+iexp(fTgi))(4)L_{CE} =-\log (\frac{\exp(f^Tg^+)}{\exp(f^Tg^+)+\sum_i\exp(f^Tg^-_i)}) \tag{4}
這裏將anchor屬於正類的概率表示爲g+g^+,屬於負類的概率表示爲gg^-LupperL_{upper}LCEL_{CE}主要有兩個方面的區別,一是,交叉熵損失使用樣本屬於某類別的概率而不是直接使用樣本的特徵向量;第二,參與LCEL_{CE}計算的所有負類是樣本空間中的所有負類,但在LUpperL_{Upper}中,僅是使用mini-batch中的負例。

基於上面的分析,可以得知LCE>LUpper>LtripletL_{CE} > L_{Upper} > L_{triplet}(由於LupperL_{upper}中負類數量少,所以其分母小於LCEL_{CE}的分母,-log是單調減函數,所以LCE>LUpperL_{CE} > L_{Upper}),下面的實驗結果也證明了這一點。所以,我們選擇交叉熵損失作爲特徵學習的損失函數,表示爲LγL_{\gamma}

如果一個anchor框被標記爲前景,對應的特徵向量提取自密集特徵圖。提取的特徵被送入一個共享的全連接層輸出各類的logits,基於該logits可以計算交叉熵損失。以這種方式,來自於多個尺度的特徵共享相同的空間,使得跨尺度關聯變得可行。具有box標記但不具有身份標記的前景目標在計算embedding損失時會被忽略。

自動損失平衡

JDE每一個預測頭可以認爲是多任務學習模型。總的損失可以認爲是各層各組件損失的線性加權。
Ltotal=i=1Mj=α,β,γwjiLji(5)L_{total} = \sum_{i=1}^M\sum_{j=\alpha,\beta,\gamma}w_j^iL_j^i \tag{5}
M是預測頭的數量,wji,i=1,,M,j=α,β,γw_j^i,i=1,\cdots,M,j=\alpha,\beta,\gamma爲加權係數。

可以按照下述方式計算損失權重係數:

  • 設置wαi=wβjw_{\alpha}^i=w_{\beta}^j,即令檢測中的分類損失和定位損失同等重要;
  • 設置wα1==wαM,wβ1==wβM,wγ1==wγMw_{\alpha}^1=\cdots=w_{\alpha}^M,w_{\beta}^1=\cdots=w_{\beta}^M,w_{\gamma}^1=\cdots=w_{\gamma}^M,即各尺度的損失同等重要;
  • 根據上面的設置,需要確定兩個參數wαw_{\alpha}wγw_{\gamma},使用窮舉法去找最優參數。
    上述限制太強了,有可能找不到最優權重係數。另外窮舉法也比較耗時。作者採用Multi-task learning using uncertainty to weigh losses for scene geometry and semantics提出的基於任務的不確定性獨立去計算加權係數。最終自動加權的損失寫爲:
    Ltotal=i=1Mj=α,β,γ12(1esjiLji+sji)(6)L_{total} = \sum_{i=1}^M\sum_{j=\alpha,\beta,\gamma}\frac{1}{2}(\frac{1}{e^{s^i_j}}L_j^i+s_j^i) \tag{6}
    sjis_j^i爲每個任務的不確定性,用可學習的參數進行表示。

實時關聯
雖然關聯算法不是作者關心的重點,但還是介紹了一種簡單高效的實時關聯算法。

對於給定的視頻,JDE模型給出了每一個目標的bounding box和表觀特徵,從而可以計算出新檢測目標的表觀特徵和已存在的目標軌跡的表觀特徵之間的關聯矩陣。可以使用匈牙利算法進行檢測目標和歷史追蹤軌跡的關聯。使用kalman濾波器進行軌跡平滑和目標位置預測。如果某個被被關聯的檢測框和預測框空間位置相距很遠,則刪除這個關聯。使用下述公式爲已關聯的檢測和軌跡進行表觀特徵更新:
ft=ηft1+(1η)f^(7)f_t = \eta f_{t-1} + (1 - \eta)\hat f \tag{7}
f^\hat f表示被關聯的檢測目標的表觀特徵,ftf_t表示在時刻t追蹤目標的表觀特徵。η\eta = 0.9,是指數加權移動平均的係數。如果某個追蹤目標沒有被關聯到,則認爲目標有可能是消失了,在超過一定的時間限制後將目標刪除;如果後面潛在的消失目標被重新關聯了,則認爲是目標可能暫時被遮擋造成的,進行繼續跟蹤處理。(實時關聯部分和Deepsort的思想很接近,除了這裏使用了表觀特徵的指數加權移動平均,使用指數加權移動平均從理論上分析更容易把發生交叉時誤匹配的追蹤再修正回來,後面可以在工程上測試下效果)。

實驗
數據集和驗證標準:在小的數據集上進行實驗可能造成結果偏差,也有可能造成算法不適用於大規模數據集。所以,作者整合了6個公開的行人檢測、MOT和行人檢索數據集構建了一個大的訓練集。這些數據集可以分爲兩類,一類是隻包含目標位置標註信息的數據集,另一類是既包含目標位置信息也包含了目標身份信息的數據集。ETH數據集和MOT16的測試集存在重合數據,對其進行了刪除處理。整個的數據集如表1所示。

在這裏插入圖片描述進行性能評估,需要考慮檢測精度、表觀特徵的區分能力和整個MOT系統的追蹤性能三個方面。使用和Caltech驗證集上的[email protected]表徵檢測性能。對Caltech驗證集、CUHK-SYSU數據集和PRW數據集中所有前景目標進行特徵提取,然後進行1:N目標檢索,使用@FAR=0.1時的TPR衡量表觀特徵。使用CLEAR標準評估整個MOT系統。使用MOT-15剔除了重複數據的訓練集做驗證集,使用MOT16的測試集比較各模型的性能。

實現細節:使用Draknet53作爲骨幹網絡,使用標準SGD訓練30個epoch。學習率初始化爲0.01,在第15和23個epoch時變爲原來的0.1倍。使用了數據增強,輸入圖像的分辨率爲1088*608。

實驗結果

比較使用三個不同的損失函數進行外觀特徵訓練的結果:比較使用交叉熵損失、三元組損失及三元組上限損失訓練外觀特徵的區別。對於三元組損失LtripletL_{triplet}和三元組上限損失LupperL_{upper},從連續的視頻幀中選取B/2B/2個目標對形成大小爲B的mini-batch。這樣可以保證始終存在正樣本對。對於交叉熵損失,不需要特殊的樣本採樣策略,通過隨機採樣組成mini-batch。表二給出了使用不同損失函數的對比結果。

在這裏插入圖片描述
前三行的結果表明,交叉熵損失的效果最好。令人驚訝的是,Emb的性能提升了40多。可能的原因是交叉熵損失希望一個樣本屬於真實類的概率比該樣本屬於錯誤類的概率都大。交叉熵損失比僅在一個mini-batch中要求的三元組損失更加嚴格。基於這個實驗結果,JDE中使用交叉熵損失。

比較不同的損失加權策略:作者共比較了五種損失加權策略,第一種是所有損失的權重都一致,表示爲“Uniform”;第二種是使用“自動損失平衡”一節介紹的第一種搜索方法得到的權重損失,稱之爲“App.Opt”;第三種是使用各自損失幅值移動平均的倒數,稱之爲“Loss.Norm”;第四種是“Multi-task learning as multi-objective optimization”提出的“MGDA-UB”;第五種是根據不確定性自動加權策略。五種不同損失函數取得的效果如表二的下面五行所示。

首先,使用Uniform策略時檢測效果很差,因此也會對追蹤效果造成負面影響。這是因爲embedding損失的幅值遠大於分類和bounding box定位的損失,因此訓練過程中針對檢測訓練的力度不夠。如果我們讓所有的損失按照相似的比例被對待,如“APP.Opt”所示,就可以取得較好的檢測和embedding結果。表2可以看出使用不確定性自動確定權重的方法效果最好。

在這裏插入圖片描述
圖3給出了使用不確定加權損失訓練過程中各損失係數的變化情況。左圖是分類、定位和embedding的損失加權係數,右圖是對應的各項損失。可以觀測到雖然各損失係數進行了正則初始化,但embedding損失的係數很快下降到了0.1左右,而其他兩項損失的係數很快增加到了100左右。這和採用“App.Opt”方法學得的最優係數(64:0.1)很接近,但因爲損失係數可以實時學習,因此使用不確定性方法學得的係數具有最好的追蹤精度。

和SDE方法進行比較

在這裏插入圖片描述
和其他SOTA MOT系統對比
在這裏插入圖片描述分析和討論
JDE的一個缺點是IDF1值較低,ID Switch較多。一開始作者認爲是JDE學習的表觀特徵的較差造成的,但是作者使用單獨學習的表觀特徵提取模型更換之後,發現IDF1值和ID Switch變化不大。最終作者發現這主要是因爲行人交叉時目標檢測的精度不足造成的。圖5給出了一個失敗示例,未來作者的工作也主要關注目標交叉時檢測精度的提升。

在這裏插入圖片描述
個人看法:一直以來,在工程上特別希望能通過一個模型完成檢測和表觀特徵提取,這樣才能提高處理效率。終於看到有人實現了這個思路,給作者點贊。作者也公佈了代碼,下面要好好研究下代碼,另外,這裏將draknet53結合FPN、基於不確定性進行損失加權、使用交叉熵代替三元損失都值得好好學習,作者厲害。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章