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