多目標跟蹤:SORT和Deep SORT

https://zhuanlan.zhihu.com/p/59148865

多目標跟蹤,即Multiple Object Tracking(MOT),主要任務中是給定一個圖像序列,找到圖像序列中運動的物體,並將不同幀的運動物體進行識別,也就是給定一個確定準確的id,當然這些物體可以是任意的,如行人、車輛、各種動物等等,而最多的研究是行人跟蹤,由於人是一個非剛體的目標,且實際應用中行人檢測跟蹤更具有商業價值。

SORT篇(IPIL 2016)

SORT全稱爲Simple Online And Realtime Tracking, 對於現在的多目標跟蹤,更多依賴的是其檢測性能的好壞,也就是說通過改變檢測器可以提高18.9%,本篇SORT算法儘管只是把普通的算法如卡爾曼濾波(Kalman Filter)和匈牙利算法(Hungarian algorithm)結合到一起,卻可以匹配2016年的SOTA算法,且速度可以達到260Hz,比前者快了20倍。

論文地址:

Simple Online and Realtime Tracking​arxiv.org

 

論文代碼:

abewley/sort​github.com圖標

算法總覽

多目標跟蹤被視爲數據關聯問題,在視頻幀序列中進行跨檢測結果的關聯,爲了解決數據相關的問題,跟蹤器使用了多種方法對運動過程和運動目標的外觀特徵進行建模!但作者發現這些算法並不能在精度和速度之間達到一個tade-off,如下圖:

作者爲了遵循Occam's Razor,作者在進行目標跟蹤時沒有使用任何被跟蹤目標的外觀特徵,而僅僅使用了檢測框的位置和大小進行目標的運動估計和數據關聯,也沒有進行任何的重識別的算法,所以當目標跟丟時,就找不回來,只能通過檢測去重新更新ID,這就不符合跟蹤算法的常理了,需要改進,當然這篇文章主要就是追求速度!而不是過多的關注與檢測錯誤的魯棒性!

實驗中,作者使用了CNN-based的網絡Faster RCNN和傳統的行人檢測ACF兩個檢測模型,另外,爲了解決動作預測和數據關聯,使用了兩個十分高效的算法卡爾曼濾波和匈牙利算法。

預測模型

這裏我們描述對象模型,即表示和用於將目標的標識傳播到下一幀。我們近似的框架間位移都有一個線性等速模型獨立於其他物體和相機運動。狀態每個目標的模型如下:

其中u和v分別代表目標的中心橫縱座標,s和r表示目標的BBox的尺寸大小和比例,注意長寬比應該爲一個常量。因此後面三個量表示預測的下一幀,當檢測與目標關聯時,檢測到的邊界框用於更新目標狀態,其中通過卡爾曼方法對速度分量進行了優化求解。如果沒有檢測與目標關聯,則只需使用線性速度模型。

數據關聯

作者使用匈牙利指派算法進行數據關聯,使用的cost矩陣爲原有目標在當前幀中的預測位置和當前幀目標檢測框之間的IOU。當然小於指定IOU閾值的指派結果是無效的。作者發現使用IOU能夠解決目標的短時被遮擋問題。這是因爲目標被遮擋時,檢測到了遮擋物,沒有檢測到原有目標,假設把遮擋物和原有目標進行了關聯。那麼在遮擋結束後,因爲在相近大小的目標IOU往往較大,因此很快就可以恢復正確的關聯。這是建立在遮擋物面積大於目標的基礎上的

目標丟失的問題

如果連續 T_{lost} 幀沒有實現已追蹤目標預測位置和檢測框的IOU匹配,則認爲目標消失。實驗中設置 T_{lost}=1 ,原因有二,一是勻速運動假設不合理,二是作者主要關注短時目標追蹤。另外,儘早刪除已丟失的目標有助於提升追蹤效率。但是,問題就出現了,這樣的話目標的ID一定會頻繁的切換,這樣就會造成跟蹤計數的不準確!

算法總結

作者使用了Faster RCNN來進行模型的檢測,並使用Kalman濾波預測狀態,基於檢測框位置和IOU的匈牙利算法,使得算法有很高的效率,但是這麼頻繁的ID切換,在實際應用中就失去了跟蹤的價值了!

視頻效果

 

YOLOV3+SORT

Deep SORT篇(ICIP2017)

論文地址:

Simple Online and Realtime Tracking with a Deep Association Metric​arxiv.org

 

代碼地址:

nwojke/deep_sort​github.com圖標

隨着近年來目標檢測領域的發展,這種tracking-by-detection方式的算法在MOT中越來越成爲主流了,之前的算法如流網絡公式和概率圖形模型,是處理整個過程的全局優化問題,但是不適用於在線場景,其目標標識必須可用在每個時間步長。更爲傳統的是假設跟蹤(MHT)和聯合概率數據相關濾波器(JPDAF),這些方法執行基於逐幀的數據關聯,最近,這些方法都被重新認識,由於檢測問題的成功!

之前的SORT算法使用簡單的卡爾曼濾波處理逐幀數據的關聯性以及使用匈牙利算法進行關聯度量,這種簡單的算法在高幀速率下獲得了良好的性能。但由於SORT忽略了被檢測物體的表面特徵,因此只有在物體狀態估計不確定性較低是纔會準確,在Deep SORT中,我們使用更加可靠的度量來代替關聯度量,並使用CNN網絡在大規模行人數據集進行訓練,並提取特徵,已增加網絡對遺失和障礙的魯棒性。

Track Handle and State Estimation

狀態估計: 使用一個8維空間去刻畫軌跡在某時刻的狀態 (u,v,r,h,x^*,y^*,r^*,h^*)

分別表示bounding box中心的位置、縱橫比、高度、以及在圖像座標中對應的速度信息。然後使用一個kalman濾波器預測更新軌跡,該卡爾曼濾波器採用勻速模型和線性觀測模型。其觀測變量爲 (u,v,r,h)

軌跡處理:這個主要說軌跡什麼時候終止、什麼時候產生新的軌跡。首先對於每條軌跡都有一個閾值a用於記錄軌跡從上一次成功匹配到當前時刻的時間。當該值大於提前設定的閾值 A_{max} 則認爲改軌跡終止,直觀上說就是長時間匹配不上的軌跡認爲已經結束。然後在匹配時,對於沒有匹配成功的檢測都認爲可能產生新的軌跡。但由於這些檢測結果可能是一些錯誤警告,所以對這種情形新生成的軌跡標註狀態'tentative' ,然後觀查在接下來的連續若干幀(論文中是3幀)中是否連續匹配成功,是的話則認爲是新軌跡產生,標註爲'confirmed',否則則認爲是假性軌跡,狀態標註爲'deleted'

Assignment Problem

在SORT中,我們直接使用匈牙利算法去解決預測的Kalman狀態和新來的狀態之間的關聯度,現在我們需要將目標運動和表面特徵信息相結合,通過融合這兩個相似的測量指標。

Motion Metric

使用馬氏距離來評測預測的Kalman狀態和新來的狀態:

表示第j個detection和第i條軌跡之間的運動匹配度,其中 S_i 是軌跡由kalman濾波器預測得到的在當前時刻觀測空間的協方差矩陣, y_i 是軌跡在當前時刻的預測觀測量, d_j 時第j個detection的狀態 (u,v,r,h)

考慮到運動的連續性,可以通過該馬氏距離對detections進行篩選,文中使用卡方分佈的0.95分位點作爲閾值 t^{(1)} =0.4877,我們可以定義一個門限函數

Appearance Metric

當目標運動不確定性較低時,馬氏距離是一個很好的關聯度量,但在實際中,如相機運動時會造成馬氏距離大量不能匹配,也就會使這個度量失效,因此,我們整合第二個度量標準,對每一個BBox檢測框 d_j 我們計算一個表面特徵描述子 r_j,\left| {r_j} \right|=1 , 我們會創建一個gallery用來存放最新的 L_k=100 個軌跡的描述子,即 R_k=\left\{ {r_k^{(i)}} \right\}_{k=1}^{L_k} ,然後我們使用第i個軌跡和第j個軌跡的最小余弦距離作爲第二個衡量尺度!

當然,我們也可以用一個門限函數來表示

如何使用CNN網絡來計算這個描述子,我們接下來會講到!

接着,我們把這兩個尺度相融合爲:

總之,距離度量對於短期的預測和匹配效果很好,而表觀信息對於長時間丟失的軌跡而言,匹配度度量的比較有效。超參數的選擇要看具體的數據集,比如文中說對於相機運動幅度較大的數據集,直接不考慮運動匹配程度。

匹配級聯

本文還提出了一種級聯匹配的策略來提高匹配精度,主要由於當一個目標被遮擋很長時間,Kalman濾波的不確定性就會大大增加,並會導致連續預測的概率彌散,假設本來協方差矩陣是一個正態分佈,那麼連續的預測不更新就會導致這個正態分佈的方差越來越大,那麼離均值歐氏距離遠的點可能和之前分佈中離得較近的點獲得同樣的馬氏距離值。

上述圖片描述了級聯匹配的算法!!!

在最後階段,作者使用之前SORT算法中的IOU關聯去匹配n=1的unconfirmed和unmatched的軌跡。這可以緩解因爲表觀突變或者部分遮擋導致的較大變化。當然有好處就有壞處,這樣做也有可能導致一些新產生的軌跡被連接到了一些舊的軌跡上。

Deep Appearance Descriptor

作者建立了一個深度卷積神經網絡去提取目標的特徵信息,並使用L2標準化吧特徵投影到一個統一的超球面!模型結構爲:

算法總結

總的來說,效果還是很明顯的,使用CNN提取的特徵進行匹配,大大減少了SORT中的ID switches, 經作者實驗證明減少了大約45%, 在高速率視頻流中也達到了很好的水準!

效果視頻:

 

YOLOV3+Deep SORT

參考鏈接

【1】https://blog.csdn.net/XSYYMY/article/details/81747134

【2】ZQPei/deep_sort_pytorch

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