Deepsort的前身是排序算法,排序算法的核心是卡爾曼濾波算法和匈牙利算法。
卡爾曼濾波算法的作用:該算法的主要作用是用壹系列當前的運動變量來預測下壹時刻的運動變量,但第壹次檢測結果用來初始化卡爾曼濾波的運動變量。
匈牙利算法的作用:簡單來說就是解決分配問題,即分配壹組檢測盒和卡爾曼預測的盒,讓卡爾曼預測的盒找到與它們最匹配的檢測盒,從而達到跟蹤的效果。
排序工作流程如下圖所示:
檢測是由目標檢測到的幀。軌跡是軌跡信息。
整個算法的工作流程如下:
(1)為第壹幀的檢測結果創建相應的軌跡。初始化卡爾曼濾波器的運動變量,用卡爾曼濾波器預測其對應的幀。
(2)將該幀中目標檢測的幀與航跡預測的幀逐壹匹配,然後根據IOU匹配的結果計算其代價矩陣(計算方法為1-IOU)。
(3)將(2)中得到的所有代價矩陣作為匈牙利算法的輸入,得到線性匹配結果。這時,我們得到三種結果。第壹種是不匹配的曲目,我們直接刪除不匹配的曲目。第二種是不匹配的檢測,我們將這種檢測初始化為新軌跡(new Tracks)。第三種是檢測幀與預測幀匹配成功,即前壹幀和後壹幀跟蹤成功,對應的檢測通過卡爾曼濾波更新其對應的軌跡變量。
(4)重復步驟(2)-(3)直到視頻幀結束。
第三,深度排序算法流程
因為排序算法還是壹個粗略的跟蹤算法,當物體被遮擋時,特別容易丟失ID。深度排序算法在排序算法的基礎上增加了匹配級聯,確定了新的軌跡。軌跡分為已確認狀態和未確認狀態,新生成的軌跡為未確認狀態。處於未確認狀態的軌道必須持續與檢測匹配壹定次數(默認為3次),然後才能轉換為已確認狀態。處於“已確認”狀態的磁道在被刪除之前,必須連續壹定次數(默認為30次)與檢測不匹配。
深度排序算法的工作流程如下圖所示:
整個算法的工作流程如下:
(1)為第壹幀中檢測到的結果創建相應的軌跡。初始化卡爾曼濾波器的運動變量,用卡爾曼濾波器預測其對應的幀。此時曲目必須屬於未確認。
(2)將本幀中目標檢測的幀與上壹幀中軌跡預測的幀逐壹匹配,然後根據IOU匹配的結果計算其代價矩陣(計算方法為1-IOU)。
(3)將(2)中得到的所有代價矩陣作為匈牙利算法的輸入,得到線性匹配結果。這時,我們得到三種結果。第壹種是不匹配的曲目,我們直接刪除不匹配的曲目(因為這個曲目是不確定的狀態,如果是確定的狀態,只有連續達到壹定次數(默認30次)才能刪除);第二種是不匹配的檢測,我們將這種檢測初始化為新軌跡(new Tracks)。第三種是檢測幀與預測幀匹配成功,即前壹幀和後壹幀跟蹤成功,對應的檢測通過卡爾曼濾波更新其對應的軌跡變量。
(4)重復步驟(2)-(3),直到確認的軌道出現或視頻幀結束。
(5)利用卡爾曼濾波器預測已確認狀態軌跡和未確認狀態軌跡對應的幀。將確認軌跡和檢測的幀進行級聯匹配(以前只要軌跡匹配,每次都會保存檢測的外觀特征和運動信息,默認保存前100幀,外觀特征和運動信息和檢測用於級聯匹配,因為確認軌跡和檢測匹配的可能性更大)。
(6)級聯匹配後有三種可能的結果。首先是航跡匹配,通過卡爾曼濾波更新相應的航跡變量。第二和第三種類型是檢測和跟蹤之間的不匹配。此時將之前未確認的軌跡和未匹配的軌跡與未匹配的檢測逐壹匹配,然後通過IOU匹配的結果計算代價矩陣(計算方法為1-IOU)。
(7)將(6)中得到的所有代價矩陣作為匈牙利算法的輸入,得到線性匹配結果。這時,我們得到三種結果。第壹種是不匹配的曲目,我們直接刪除不匹配的曲目(因為這個曲目是不確定的狀態,如果是確定的狀態,只有連續達到壹定次數(默認30次)才能刪除);第二種是不匹配的檢測,我們將這種檢測初始化為新軌跡(new Tracks)。第三種是檢測幀與預測幀匹配成功,即前壹幀和後壹幀跟蹤成功,對應的檢測通過卡爾曼濾波更新其對應的軌跡變量。
(8)重復步驟(5)-(7)直到視頻幀結束。