日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

deepsort原理快速弄懂——时效比最高的

發布時間:2023/11/27 134 豆豆
生活随笔 收集整理的這篇文章主要介紹了 deepsort原理快速弄懂——时效比最高的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主要轉載自:https://www.cnblogs.com/liuboblog/p/12105473.html

分模塊的代碼參考:https://zhuanlan.zhihu.com/p/90835266?ivk_sa=1024320u

補充

  • 這個系列有兩個算法,sort和deep sort,這里先介紹sort。sort的思路很簡單,首先通過檢測器例如faster rcnn把每一幀的物體檢測出來,之后通過卡爾曼濾波器預測物體在下一幀的位置,將預測的位置與下一幀實際檢測到的位置做IOU的計算,得到相鄰兩幀物體的相似度,最后利用匈牙利匹配得到相鄰幀的對應id。由于這里只是計算框的重疊面積,因此如果兩個物體發生遮擋,會出現id交換的情況,所以作者為了降低id交換,提出了deep sort算法。deep sort之所以可以把id交換降低45%,是因為它將面積匹配修改為了特征匹配。在匹配之前作者利用resnet50先將特征里取出來,由于一般情況下很少會遇到外觀特征完全相同的兩個物體,因此這種改進是有效的。deep dort由于很簡單,因此沒有在頂會上發表成功(發表在ICIP 2017),但是由于其可以保證在高速度的情況下的高準確度,所以廣泛應用在了工程實踐的過程中。
  • Deepsort是對于sort的思想,進行的改進算法。SORT算法使用簡單的卡爾曼濾波處理逐幀數據的關聯性以及使用匈牙利算法進行關聯度量,這種簡單的算法在高幀速率下獲得了良好的性能。但由于SORT忽略了被檢測物體的表面特征,因此只有在物體狀態估計不確定性較低是才會準確,在Deep SORT中,使用了更加可靠的度量來代替關聯度量,并使用CNN網絡在大規模行人數據集進行訓練,并提取特征,已增加網絡對遺失和障礙的魯棒性。

以下是轉載內容:

目錄

1、匈牙利算法

2、卡爾曼濾波

3、DeepSort工作流程


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

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

這里就有個問題,視頻中不同時刻的同一個人,位置發生了變化,那么是如何關聯上的呢?答案就是匈牙利算法和卡爾曼濾波。匈牙利算法可以告訴我們當前幀的某個目標,是否與前一幀的某個目標相同??柭鼮V波可以基于目標前一時刻的位置,來預測當前時刻的位置,并且可以比傳感器(在目標跟蹤中即目標檢測器,比如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

總結

以上是生活随笔為你收集整理的deepsort原理快速弄懂——时效比最高的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。