用 YOLO v5+DeepSORT,打造實(shí)時(shí)多目標跟蹤模型
來(lái)源:HyperAI超神經(jīng)
目標跟蹤 (Object Tracking) 是機器視覺(jué)領(lǐng)域的重要課題,根據跟蹤目標的數量,可分為單目標跟蹤 (Single Object Tracking,簡(jiǎn)稱(chēng) SOT) 和多目標跟蹤 (Multi Object Tracking,簡(jiǎn)稱(chēng) MOT)。
多目標跟蹤往往因為跟蹤 ID 眾多、遮擋頻繁等,容易出現目標跟丟的現象。借助跟蹤器 DeepSORT 與檢測器 YOLO v5,可以打造一個(gè)高性能的實(shí)時(shí)多目標跟蹤模型。
本文將對單目標跟蹤和多目標跟蹤分別進(jìn)行介紹,文末將詳解 YOLO v5+DeepSORT 的實(shí)現過(guò)程及具體代碼。
單目標跟蹤詳解
定義
單目標跟蹤 SOT 是指在視頻首幀給出目標,根據上下文信息,在后續幀定位出目標位置,建立跟蹤模型對目標的運動(dòng)狀態(tài)進(jìn)行預測。
應用場(chǎng)景
SOT 在智能視頻監控、自動(dòng)駕駛、機器人導航、人機交互等領(lǐng)域應用廣泛。
足球比賽中利用 SOT 預測足球運動(dòng)軌跡
研究難點(diǎn)
最主要的三個(gè)難點(diǎn):目標背景的變化、物體本身的變化、光照強度變化。
主流算法(基于深度學(xué)習)
解決 SOT 問(wèn)題主要有兩種方法:判別式跟蹤及生成式跟蹤,隨著(zhù)深度學(xué)習在圖像分類(lèi)、目標檢測等機器視覺(jué)相關(guān)任務(wù)中的成功應用,深度學(xué)習也開(kāi)始大量應用于目標跟蹤算法中。
本文主要圍繞基于深度學(xué)習的 SOT 算法進(jìn)行介紹。
各時(shí)間節點(diǎn)的代表性目標跟蹤算法
2012 年后以 AlexNet 為代表的深度學(xué)習方法
被引入到目標跟蹤領(lǐng)域中
關(guān)鍵算法:SiamFC
與傳統目標跟蹤中所用的在線(xiàn)學(xué)習方法不同,SiamFC 側重于在離線(xiàn)階段學(xué)習強嵌入。
它將一個(gè)基本跟蹤算法,與一個(gè)在 ILSVRC15 數據集上進(jìn)行端到端訓練的新型全卷積孿生網(wǎng)絡(luò ) (fully-convolutional Siamese network) 相結合,用于視頻中的目標檢測。
全卷積孿生網(wǎng)絡(luò )架構示意圖
實(shí)驗證明,在模型測試和訓練期間,孿生全卷積深度網(wǎng)絡(luò )對已有數據的利用更加高效。
SiamFC 開(kāi)創(chuàng )了將孿生網(wǎng)絡(luò )結構應用于目標跟蹤領(lǐng)域的先河,顯著(zhù)提高了深度學(xué)習方法跟蹤器的跟蹤速度,結構簡(jiǎn)單性能優(yōu)異。
相關(guān)論文:
https://arxiv.org/pdf/1606.09549.pdf
相關(guān)衍生算法
1、StructSiam
提出了 local structure learning method,同時(shí)考慮目標的 local pattern 和結構關(guān)系。為此,作者設計了一個(gè)局部模式檢測模塊,來(lái)自動(dòng)識別目標物體的辨別區域。
該模型可以以端到端的方式進(jìn)行訓練。
相關(guān)論文:
https://openaccess.thecvf.com/content_ECCV_2018/papers/Yunhua_Zhang_Structured_Siamese_Network_ECCV_2018_paper.pdf
2、SiamFC-tri
作者提出了一種全新的 triplet loss,用于提取跟蹤物體的 expressive deep feature。在不增加輸入的情況下,該方法可以利用更多元素進(jìn)行訓練,通過(guò)組合原始樣本,實(shí)現更強大的特征。
相關(guān)論文:
https://openaccess.thecvf.com/content_ECCV_2018/papers/Xingping_Dong_Triplet_Loss_with_ECCV_2018_paper.pdf
3、DSiam
作者提出了動(dòng)態(tài)孿生網(wǎng)絡(luò ),通過(guò)一個(gè)快速轉換學(xué)習模型,能夠有效地在線(xiàn)學(xué)習目標的外觀(guān)變化和先前幀的背景壓制。同時(shí)作者還提出了元素多層融合,利用多層深度特征自適應地整合網(wǎng)絡(luò )輸出。
DSiam 允許使用任何可行的通用或經(jīng)過(guò)特殊訓練的特征,如 SiamFC 和 VGG,且動(dòng)態(tài)孿生網(wǎng)絡(luò )可以直接在標記的視頻序列上進(jìn)行整合訓練,充分利用移動(dòng)物體豐富的時(shí)空信息。
相關(guān)論文:
https://openaccess.thecvf.com/content_ICCV_2017/papers/Guo_Learning_Dynamic_Siamese_ICCV_2017_paper.pdf
多目標跟蹤詳解
定義
多目標跟蹤(MOT)是指對視頻中每一幀的物體都賦予一個(gè) ID,并將每個(gè) ID 的行為軌跡畫(huà)出來(lái)。
在街景視頻中進(jìn)行多目標跟蹤
應用場(chǎng)景
MOT 在智能安防、自動(dòng)駕駛、醫學(xué)場(chǎng)景等領(lǐng)域,都有廣泛應用。
研究難點(diǎn)
MOT 目前遇到的最大挑戰就是遮擋 (Occlusion),即目標之間的彼此遮擋或環(huán)境對目標產(chǎn)生的遮擋。
主流算法
1、SORT
Simple Online and Realtime Tracking (SORT) 是一種專(zhuān)注簡(jiǎn)單高效算法的多目標跟蹤方法,它非常實(shí)用,可以為在線(xiàn)和實(shí)時(shí)應用,有效地關(guān)聯(lián)目標。
SORT 只是將常見(jiàn)技術(shù)(如卡爾曼濾波、匈牙利算法)進(jìn)行了簡(jiǎn)單組合,準確率可與當時(shí)最先進(jìn)的在線(xiàn)跟蹤器相提并論。
SORT 與其他方法的性能比較
橫軸表示準確率,縱軸表示速度
模型位置越高、越靠右,綜合表現越佳
由于跟蹤方法簡(jiǎn)單易用,跟蹤器的更新速度達到了 260 Hz,比當時(shí)最先進(jìn)的跟蹤器快 20 倍。
相關(guān)論文:
https://arxiv.org/pdf/1602.00763.pdf
2、DeepSORT
DeepSORT 是 SORT 的升級版,它整合了外觀(guān)信息 (appearance information) 從而提高 SORT 的性能,這使得我們在遇到較長(cháng)時(shí)間的遮擋時(shí),也能夠正常跟蹤目標,并有效減少 ID 轉換的發(fā)生次數。
DeepSORT 在 MOT Challenge 數據集上的表現
真實(shí)街景中遮擋情況非常常見(jiàn)
作者將絕大部分的計算復雜度,都放到了離線(xiàn)預訓練階段,在這個(gè)階段會(huì )用一個(gè)大規模行人重識別數據集,學(xué)習深度關(guān)聯(lián)度量 (deep association metric)。
在在線(xiàn)應用階段,則使用視覺(jué)外觀(guān)空間 (visual appearance space) 中的近鄰查詢(xún),來(lái)建立 measurement-to-track 關(guān)聯(lián)。
實(shí)驗表明,DeepSORT 使得 ID 轉換的次數減少了 45%,在高幀率下整體性能優(yōu)秀。
此外 DeepSORT 是一個(gè)非常通用的跟蹤器,可以被接在任何一個(gè)檢測器上。
相關(guān)論文:
https://arxiv.org/pdf/1703.07402.pdf
3、Towards Real-Time MOT
作者提出了一個(gè) MOT 系統,使得目標檢測和外觀(guān)嵌入得以在一個(gè)共享模型中學(xué)習。也就是說(shuō)把外觀(guān)嵌入模型納入一個(gè) single-shot 檢測器中,使該模型可以同時(shí)輸出檢測以及對應的嵌入。
作者還進(jìn)一步提出了一個(gè)簡(jiǎn)單快速的關(guān)聯(lián)方法,可以與聯(lián)合模型 (joint model) 一起運行。
Towards Real-Time MOT 與 SDE 模型
Two-stage 模型以及 JDE 模型對比
與之前的 MOT 系統相比,這兩個(gè)組件的計算成本都大大降低了,為實(shí)時(shí) MOT 算法設計的后續工作,提供了一個(gè)整潔快速的基線(xiàn)。
這是業(yè)內第一個(gè)接近實(shí)時(shí)的 MOT 系統,它的運行速度更快、精度更高、代碼也已開(kāi)源,非常值得參考。
相關(guān)論文:
https://arxiv.org/pdf/1909.12605v1.pdf
用YOLOv5和DeepSORT進(jìn)行多目標跟蹤
該教程在 OpenBayes.com 運行。OpenBayes 是一個(gè)開(kāi)箱即用的機器學(xué)習算力云平臺,提供 PyTorch、TensorFlow 等主流框架,以及 vGPU、T4、V100 等多種類(lèi)型的算力方案,計價(jià)模式靈活簡(jiǎn)單,按使用時(shí)長(cháng)收費。
本教程選用 vGPU 在 PyTorch 1.8.1 環(huán)境中運行。
訪(fǎng)問(wèn)完整教程:
https://openbayes.com/console/open-tutorials/containers/BvxvYMbdefV/overview
本項目包括兩個(gè)部分,首先是 YOLO v5 檢測器,用于檢測出一系列物體;然后用 DeepSORT 進(jìn)行跟蹤。
第一步 代碼環(huán)境準備
%cd Yolov5_DeepSort_Pytorch %pip install -qr requirements.txt # 安裝依賴(lài) import torch from IPython.display import Image, clear_output # 顯示結果 clear_output() print(f"Setup complete. Using torch {torch.__version__} ({torch.cuda.get_device_properties(0).name if torch.cuda.is_available() else 'CPU'})")
第二步 預處理待測視頻
!y | ffmpeg -ss 00:00:00 -i test.avi -t 00:00:03 -c copy out.avi -y
第三步 模型推理
!python track.py --yolo_weights /openbayes/input/input1/crowdhuman_yolov5m.pt --source out.avi --save-vid
第四步 格式轉換
!ffmpeg -i /openbayes/home/Yolov5_DeepSort_Pytorch/inference/output/out.avi output.mp4 -y
第五步 顯示結果
from IPython.display import HTML from base64 import b64encode mp4 = open('output.mp4','rb').read() data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
HTML(""" <video controls> <source src="%s" type="video/mp4"> </video> """ % data_url)
輸出多目標跟蹤結果
完整 notebook 請訪(fǎng)問(wèn):
https://openbayes.com/console/open-tutorials/containers/BvxvYMbdefV/overview
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。