Deep Sort 多目標跟蹤算法總結-by Wilson


  1⃣️ 參考博文:

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

  
  2⃣️ 開源代碼:
  原作者開源(只有deep sort的核心代碼,沒有檢測器): 
  https://github.com/nwojke/deep_sort 
  基於tensorfow加入yolov3,形成online跟蹤器:
  https://github.com/Qidian213/deep_sort_yolov3
  基於pytorch做了一個DIY的ReID模型,但是源碼有些小錯誤(看工程的issue):
  https://github.com/ZQPei/deep_sort_pytorch
  
  3⃣️ 簡介
  Deep Sort: Simple Online and Realtime Tracking with a Deep Association Metric
  
  Deep Sort是多目標跟蹤算法,基本思想是tracking-by-detection,利用運動模型和外觀信息進行數據關聯,運行速率主要由檢測算法所決定(我測試一幀需要52ms,檢測就占了39ms)。算法對每一幀進行目標檢測(一般應用在行人檢測),后續通過帶權值的匈牙利匹配算法對之前的運動軌跡和當前檢測對象進行匹配,形成物體的運動軌跡。權值由 點和運動軌跡的馬氏距離 及 圖像塊的相似性(這里用向量的余弦距離) 加權求和得到。kalman濾波在計算馬氏距離時,用於預測運動分布的協方差矩陣。創新點如下:
  (1)引入了ReID模型從而利用外觀信息計算余弦距離。
  (2)deep指的是引入的ReID模型是一個提取外觀信息的深度模型,最后輸出128D向量
  (3)在匈牙利匹配算法時,使用級聯匹配的方式。指的是多次使用匈牙利算法對不同消失時長的軌跡進行匹配。
  
  4⃣️ 狀態估計:
  使用一個8維空間去刻畫軌跡在某時刻的狀態  ,分別表示bounding box中心的位置、縱橫比、高度、以及在圖像坐標中對應的速度信息。然后使用一個kalman濾波器預測更新軌跡,該卡爾曼濾波器采用勻速模型和線性觀測模型。其觀測變量為
  
  5⃣️ 軌跡處理:
  每個軌跡稱為一個tracker,算法中由許多的tracker構成。
  軌跡產生(n_init超參):對於匹配算法沒有匹配上目標,則可能是產生的新軌跡,為這些目標新建一個tracker,但是標記為‘tentative’(因為這些目標有可能是檢測器輸出的噪聲)。當連續n_init幀得到匹配,則確認這個新軌跡是有效的,標記為‘confirm’;否則認為是噪聲軌跡,標注為“deleted”。
  軌跡消失(max_age超參):每條軌跡都會有一個變量a來記錄上一次成功匹配到當前的時間。如果a > max_age閾值,則認為軌跡終止,在后續的跟蹤取消這個軌跡。

  當檢測目標和軌跡完成匹配,則將該目標添加到匹配的軌跡上。

  6⃣️ 匈牙利算法中權重的度量:

  deep sort的創新點在於利用運動匹配度和外觀匹配度來權衡匈牙利算法的權重。用表示每條線的權重,用來決定初始匹配的連線(黑線,b_ij為0/1值,1代表ij頂點間有線,0則無線)。

  運動匹配度

  使用detection和  track在kalman濾波器預測的位置   之間的馬氏距離刻畫運動匹配程度:

表示第j個detection和第i條軌跡之間的運動匹配度,其中 是軌跡由kalman濾波器預測得到的在當前時刻觀測空間的協方差矩陣, 是軌跡在當前時刻的預測量bbox, 是第j個detection的bbox。
  當馬氏距離小於閾值,則認為匹配上如:

  外觀匹配度
 
  純粹用運動信息的SORT存在IDSwitch嚴重的問題,通過外觀模型(ReID模型)可以緩解這個問題,使目標重新連接上之前的軌跡。
  對於每一個detection,包括軌跡中的detections,使用深度網絡提取出單位范數的特征向量r。然后使用detection和軌跡包含的detections的特征向量之間的最小余弦距離作為detection和tracker之間的表觀匹配程度。
  當然軌跡太長導致表觀產生變化,在使用這種最小距離作為度量就有風險,所以文中只對軌跡的最新的 (超參)之內detections進行計算最小余弦距離:

  同樣的,該度量同樣可以確定一個門限函數: 

  這個閾值需要根據實際情況進行調整(人臉識別的情況下,設為0.6最佳)
 
  綜合匹配度
 
  運動匹配度和外觀匹配度的加權和($lamda$是超參):

  加上門限函數(只有當b_ij為1時,才認為是初步匹配上(兩頂點有線))

  由Yixiao Zhou提供:“另外還有一點我想說的是這兩個匹配度度量的閾值范圍是不同的,如果想取相通的重要程度,$lamda$應該取0.1左右。

 

  7⃣️ 級聯匹配

  為了使 當前檢測目標應連接上距離當前時刻較近的軌跡,在匹配時,優先匹配消失時長a較小的軌跡。並且當兩條軌跡競爭同一個detection時,消失時間長的軌跡往往得到馬氏距離更小,因為kalman filter一直在預測沒有得到更新,導致協方差矩陣的彌散。此時引入級聯匹配(其實也就是優先匹配)來讓more frequently seen objects分配的優先級更高。具體步驟如下:

  8⃣️ 性能分析:

  因為我只了解單目標跟蹤,但是多目標跟蹤關注的性能指標和單目標跟蹤有所差別,指標多許多,所以我就沒有進行性能分析了,在定性分析中,發現同一目標在視頻中仍然容易分到不同的軌跡(IDSwitch大),在后續的操作中,需要對這些不同的軌跡做一個聚類,對同一目標形成更加完整的軌跡。但是由於算法簡單,計算量較少,非常實用,可以多了解一下~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM