智慧交通day02-车流量检测实现09:SORT/deepSORT
SORT和DeepSORT是多目標(biāo)跟蹤中兩個(gè)知名度比較高的算法。DeepSORT是原團(tuán)隊(duì)對(duì)SORT的改進(jìn)版本?,F(xiàn)在來(lái)解析一下SORT和DeepSORT的基本思路。
1.SORT
SORT核心是卡爾曼濾波和匈牙利匹配兩個(gè)算法。流程圖如下所示,可以看到整體可以拆分為兩個(gè)部分,分別是匹配過(guò)程和卡爾曼預(yù)測(cè)加更新過(guò)程,都用灰色框標(biāo)出來(lái)了。
關(guān)鍵步驟:軌跡卡爾曼濾波預(yù)測(cè)→ 使用匈牙利算法將預(yù)測(cè)后的tracks和當(dāng)前幀中的detecions進(jìn)行匹配(IOU匹配) → 卡爾曼濾波更新
卡爾曼濾波分為兩個(gè)過(guò)程:預(yù)測(cè)和更新。SORT引入了線(xiàn)性速度模型與卡爾曼濾波來(lái)進(jìn)行位置預(yù)測(cè),先進(jìn)行位置預(yù)測(cè)然后再進(jìn)行匹配。運(yùn)動(dòng)模型的結(jié)果可以用來(lái)預(yù)測(cè)物體的位置。
匈牙利算法解決的是一個(gè)分配問(wèn)題,用IOU距離作為權(quán)重(也叫cost矩陣),并且當(dāng)IOU小于一定數(shù)值時(shí),不認(rèn)為是同一個(gè)目標(biāo),理論基礎(chǔ)是視頻中兩幀之間物體移動(dòng)不會(huì)過(guò)多。在代碼中選取的閾值是0.3。scipy庫(kù)的linear_sum_assignment都實(shí)現(xiàn)了這一算法,只需要輸入cost_matrix即代價(jià)矩陣就能得到最優(yōu)匹配。
2.DeepSort
DeepSORT是SORT的續(xù)作,整體框架沒(méi)有大改,還是延續(xù)了卡爾曼濾波加匈牙利算法的思路,在這個(gè)基礎(chǔ)上增加了鑒別網(wǎng)絡(luò)Deep Association Metric。
下圖是deepSORT流程圖,和SORT基本一樣,就多了級(jí)聯(lián)匹配(Matching Cascade)和新軌跡的確認(rèn)(confirmed)。
關(guān)鍵步驟:軌跡卡爾曼濾波預(yù)測(cè)→ 使用匈牙利算法將預(yù)測(cè)后的tracks和當(dāng)前幀中的detecions進(jìn)行匹配(級(jí)聯(lián)匹配和IOU匹配) → 卡爾曼濾波更新
級(jí)聯(lián)匹配流程圖如下所示:
其中上半部分就是相似度估計(jì),也就是算這個(gè)分配問(wèn)題的代價(jià)函數(shù)。下半部分依舊使用匈牙利算法進(jìn)行檢測(cè)框和跟蹤框的匹配。
總結(jié):
1.SORT算法
SORT是利用強(qiáng)大的CNN檢測(cè)器的檢測(cè)結(jié)果來(lái)進(jìn)行多目標(biāo)跟蹤使用基于卡爾曼濾波(Kalman filter)與匈牙利算法(Hungarian algorithm)的方法來(lái)進(jìn)行跟蹤。
2.deepSORT算法
DeepSORT是在SORT基礎(chǔ)上進(jìn)行的修改,增加了級(jí)聯(lián)匹配和目標(biāo)的確認(rèn),還是使用卡爾曼濾波加匈牙利算法進(jìn)行目標(biāo)跟蹤。
1.SORT核心是卡爾曼濾波和匈牙利算法。流程圖如下所示,可以看到整體可以拆分為兩個(gè)部分,分別是匈牙利匹配過(guò)程和卡爾曼預(yù)測(cè)加更新過(guò)程,都用灰色框標(biāo)出來(lái)了。關(guān)鍵步驟:--> 卡爾曼濾波預(yù)測(cè)出預(yù)測(cè)框--> 使用匈牙利算法將卡爾曼濾波的預(yù)測(cè)框和yolo的檢測(cè)框進(jìn)行IOU匹配來(lái)計(jì)算相似度 --> 卡爾曼濾波使用yolo的檢測(cè)框更新卡爾曼濾波的預(yù)測(cè)框2.卡爾曼濾波分為兩個(gè)過(guò)程:預(yù)測(cè)過(guò)程和更新過(guò)程。SORT引入了線(xiàn)性速度模型與卡爾曼濾波來(lái)進(jìn)行位置預(yù)測(cè),先進(jìn)行位置預(yù)測(cè)然后再進(jìn)行匹配。運(yùn)動(dòng)模型的結(jié)果可以用來(lái)預(yù)測(cè)物體的位置。匈牙利算法解決的是一個(gè)分配問(wèn)題,用IOU距離作為權(quán)重(也即cost代價(jià)矩陣),并且當(dāng)IOU小于一定數(shù)值(IOU閾值)時(shí),不認(rèn)為是同一個(gè)目標(biāo),理論基礎(chǔ)是視頻中兩幀之間物體移動(dòng)不會(huì)過(guò)多。在代碼中選取的IOU閾值是0.3。scipy庫(kù)的linear_sum_assignment實(shí)現(xiàn)了匈牙利算法,只需要輸入cost_matrix代價(jià)矩陣(全部預(yù)測(cè)框和全部檢測(cè)框兩兩IOU計(jì)算結(jié)果)到linear_sum_assignment中就能得到預(yù)測(cè)框和檢測(cè)框兩兩最優(yōu)匹配的組合。
?
1.跟蹤器鏈(列表):實(shí)際就是多個(gè)的卡爾曼濾波KalmanBoxTracker自定義類(lèi)的實(shí)例對(duì)象組成的列表。每個(gè)目標(biāo)框都有對(duì)應(yīng)的一個(gè)卡爾曼濾波器(KalmanBoxTracker實(shí)例對(duì)象),KalmanBoxTracker類(lèi)中的實(shí)例屬性專(zhuān)門(mén)負(fù)責(zé)記錄其對(duì)應(yīng)的一個(gè)目標(biāo)框中各種統(tǒng)計(jì)參數(shù),并且使用類(lèi)屬性負(fù)責(zé)記錄卡爾曼濾波器的創(chuàng)建個(gè)數(shù),增加一個(gè)目標(biāo)框就增加一個(gè)卡爾曼濾波器(KalmanBoxTracker實(shí)例對(duì)象)。把每個(gè)卡爾曼濾波器(KalmanBoxTracker實(shí)例對(duì)象)都存儲(chǔ)到跟蹤器鏈(列表)中。2.unmatched_detections(列表):檢測(cè)框中出現(xiàn)新目標(biāo),但此時(shí)預(yù)測(cè)框(跟蹤框)中仍不不存在該目標(biāo),那么就需要在創(chuàng)建新目標(biāo)對(duì)應(yīng)的預(yù)測(cè)框/跟蹤框(KalmanBoxTracker類(lèi)的實(shí)例對(duì)象),然后把新目標(biāo)對(duì)應(yīng)的KalmanBoxTracker類(lèi)的實(shí)例對(duì)象放到跟蹤器鏈(列表)中。3.unmatched_trackers(列表):當(dāng)跟蹤目標(biāo)失敗或目標(biāo)離開(kāi)了畫(huà)面時(shí),也即目標(biāo)從檢測(cè)框中消失了,就應(yīng)把目標(biāo)對(duì)應(yīng)的跟蹤框(預(yù)測(cè)框)從跟蹤器鏈中刪除。unmatched_trackers列表中保存的正是跟蹤失敗即離開(kāi)畫(huà)面的目標(biāo),但該目標(biāo)對(duì)應(yīng)的預(yù)測(cè)框/跟蹤框(KalmanBoxTracker類(lèi)的實(shí)例對(duì)象)此時(shí)仍然存在于跟蹤器鏈(列表)中,因此就需要把該目標(biāo)對(duì)應(yīng)的預(yù)測(cè)框/跟蹤框(KalmanBoxTracker類(lèi)的實(shí)例對(duì)象)從跟蹤器鏈(列表)中刪除出去。 DeepSORT是SORT的續(xù)作,整體框架沒(méi)有大改,還是延續(xù)了卡爾曼濾波加匈牙利算法的思路,并且在這個(gè)基礎(chǔ)上增加了鑒別網(wǎng)絡(luò)Deep Association Metric。 下圖是deepSORT流程圖,和SORT基本一樣,就多了級(jí)聯(lián)匹配(Matching Cascade)和新軌跡的確認(rèn)(confirmed)。 關(guān)鍵步驟:--> 卡爾曼濾波預(yù)測(cè)出預(yù)測(cè)框--> 使用匈牙利算法將卡爾曼濾波的預(yù)測(cè)框和yolo的檢測(cè)框進(jìn)行級(jí)聯(lián)匹配加IOU匹配兩者分別來(lái)計(jì)算相似度 --> 卡爾曼濾波使用yolo的檢測(cè)框更新卡爾曼濾波的預(yù)測(cè)框級(jí)聯(lián)匹配計(jì)算相似度的流程圖如下所示:上半部分為相似度估計(jì),也就是計(jì)算這個(gè)分配問(wèn)題的代價(jià)矩陣。下半部分依舊是使用匈牙利算法進(jìn)行檢測(cè)框和預(yù)測(cè)框的匹配。總結(jié)
以上是生活随笔為你收集整理的智慧交通day02-车流量检测实现09:SORT/deepSORT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 税收分类编码2020_增值税开票系统你会
- 下一篇: type pdf c语言课程设计,c语言