DeepSort


目標跟蹤任務的難度和復雜度要比分類和目標檢測高不少,具有更大的挑戰性。


目前主流的目標跟蹤算法都是基於Tracking-by-Detection(檢測加跟蹤,使效果更穩定)策略,即基於目標檢測的結果來進行目標跟蹤。DeepSORT運用的就是這個策略,上面的視頻是DeepSORT對人群進行跟蹤的結果,每個bbox左上角的數字是用來標識某個人的唯一ID號。

這里就有個問題,視頻中不同時刻的同一個人,位置發生了變化,那么是如何關聯上的呢?答案就是匈牙利算法和卡爾曼濾波。匈牙利算法可以告訴我們當前幀的某個目標,是否與前一幀的某個目標相同。卡爾曼濾波可以基於目標前一時刻的位置,來預測當前時刻的位置,並且可以比傳感器(在目標跟蹤中即目標檢測器,比如Yolo等)更准確的估計目標的位置。

1、匈牙利算法

首先,先介紹一下什么是分配問題(Assignment Problem):假設有N個人和N個任務,每個任務可以任意分配給不同的人,已知每個人完成每個任務要花費的代價不盡相同,那么如何分配可以使得總的代價最小。
舉個例子,假設現在有3個任務,要分別分配給3個人,每個人完成各個任務所需代價矩陣(cost matrix)如下所示(這個代價可以是金錢、時間等等):

怎樣才能找到一個最優分配,使得完成所有任務花費的代價最小呢?
匈牙利算法(又叫KM算法)就是用來解決分配問題的一種方法,它基於定理:

如果代價矩陣的某一行或某一列同時加上或減去某個數,則這個新的代價矩陣的最優分配仍然是原代價矩陣的最優分配。

算法步驟(假設矩陣為NxN方陣):
(1)對於矩陣的每一行,減去其中最小的元素
(2)對於矩陣的每一列,減去其中最小的元素
(3)用最少的水平線或垂直線覆蓋矩陣中所有的(4)如果線的數量等於N,則找到了最優分配,算法結束,否則進入步驟5
(5)找到沒有被任何線覆蓋的最小元素,每個沒被線覆蓋的行減去這個元素,每個被線覆蓋的列加上這個元素,返回步驟3

繼續拿上面的例子做演示:

step1 每一行最小的元素分別為15、20、20,減去得到:

step2 每一列最小的元素分別為0、20、5,減去得到:

step3 用最少的水平線或垂直線覆蓋所有的0,得到:

step4 線的數量為2,小於3,進入下一步;
step5 現在沒被覆蓋的最小元素是5,沒被覆蓋的行(第一和第二行)減去5,得到:

被覆蓋的列(第一列)加上5,得到:

跳轉到step3,用最少的水平線或垂直線覆蓋所有的0,得到:

step4:線的數量為3,滿足條件,算法結束。顯然,將任務2分配給第1個人、任務1分配給第2個人、任務3分配給第3個人時,總的代價最小(0+0+0=0):

所以原矩陣的最小總代價為(40+20+25=85):

在DeepSORT中,匈牙利算法用來將前一幀中的跟蹤框tracks與當前幀中的檢測框detections進行關聯,通過外觀信息(appearance information)和馬氏距離(Mahalanobis distance),或者IOU來計算代價矩陣。

2、卡爾曼濾波

卡爾曼濾波被廣泛應用於無人機、自動駕駛、衛星導航等領域,簡單來說,其作用就是基於傳感器的測量值來更新預測值,以達到更精確的估計。

假設我們要跟蹤小車的位置變化,如下圖所示,藍色的分布是卡爾曼濾波預測值,棕色的分布是傳感器的測量值,灰色的分布就是預測值基於測量值更新后的最優估計。

在目標跟蹤中,需要估計track的以下兩個狀態:

  • 均值(Mean):表示目標的位置信息,由bbox的中心坐標 (cx, cy),寬高比r,高h,以及各自的速度變化值組成,由8維向量表示為 x = [cx, cy, r, h, vx, vy, vr, vh],各個速度值初始化為0。
  • 協方差(Covariance ):表示目標位置信息的不確定性,由8x8的對角矩陣表示,矩陣中數字越大則表明不確定性越大,可以以任意值初始化。

卡爾曼濾波分為兩個階段:(1) 預測track在下一時刻的位置,(2) 基於detection來更新預測的位置。

預測

基於track在t-1時刻的狀態來預測其在t時刻的狀態。


在公式1中,x為track在t-1時刻的均值,F稱為狀態轉移矩陣,該公式預測t時刻的x':

矩陣F中的dt是當前幀和前一幀之間的差,將等號右邊的矩陣乘法展開,可以得到cx'=cx+dtvx,cy'=cy+dtvy...,所以這里的卡爾曼濾波是一個勻速模型(Constant Velocity Model)。

在公式2中,P為track在t-1時刻的協方差,Q為系統的噪聲矩陣,代表整個系統的可靠程度,一般初始化為很小的值,該公式預測t時刻的P'。

更新

基於t時刻檢測到的detection,校正與其關聯的track的狀態,得到一個更精確的結果。





在公式3中,z為detection的均值向量,不包含速度變化值,即z=[cx, cy, r, h],H稱為測量矩陣,它將track的均值向量x'映射到檢測空間,該公式計算detection和track的均值誤差;
在公式4中,R為檢測器的噪聲矩陣,它是一個4x4的對角矩陣,對角線上的值分別為中心點兩個坐標以及寬高的噪聲,以任意值初始化,一般設置寬高的噪聲大於中心點的噪聲,該公式先將協方差矩陣P'映射到檢測空間,然后再加上噪聲矩陣R;
公式5計算卡爾曼增益K,卡爾曼增益用於估計誤差的重要程度;
公式6和公式7得到更新后的均值向量x和協方差矩陣P。

3、DeepSort工作流程

DeepSORT對每一幀的處理流程如下:
檢測器得到bbox → 生成detections → 卡爾曼濾波預測→ 使用匈牙利算法將預測后的tracks和當前幀中的detecions進行匹配(級聯匹配和IOU匹配) → 卡爾曼濾波更新

Frame 0:檢測器檢測到了3個detections,當前沒有任何tracks,將這3個detections初始化為tracks
Frame 1:檢測器又檢測到了3個detections,對於Frame 0中的tracks,先進行預測得到新的tracks,然后使用匈牙利算法將新的tracks與detections進行匹配,得到(track, detection)匹配對,最后用每對中的detection更新對應的track

檢測
檢測器檢測
生成detections
使用卡爾曼濾波預測前一幀中的tracks在當前幀的狀態
卡爾曼濾波預測階段
使用卡爾曼濾波預測前一幀中的tracks在當前幀的狀態
匹配
首先對基於外觀信息的馬氏距離計算tracks和detections的代價矩陣,然后相繼進行級聯匹配和IOU匹配,最后得到當前幀的所有匹配對、未匹配的tracks以及未匹配的detections
卡爾曼濾波更新階段
對於每個匹配成功的track,用其對應的detection進行更新,並處理未匹配tracks和detections


免責聲明!

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



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