YOLOv5+ByteTrack統(tǒng)計人流、車流
哈嘍,大家好。
今天給大家分享一個人流、車流統(tǒng)計系統(tǒng)。
以人流統(tǒng)計為例,實(shí)現(xiàn)這樣的系統(tǒng),需要兩個基本的步驟,第一步是識別道路上的行人,可以采用目標(biāo)檢測模型。第二步是給識別出的每個行人分配一個唯一的id,這樣我們可以跟蹤到每一個行人,計算他的行走方向,行走速度等。
源碼和數(shù)據(jù)集獲取方式放在文末,大家自行獲取即可。
1. YOLOv5 訓(xùn)練行人識別模型
之前分享過很多篇 YOLOv5 訓(xùn)練目標(biāo)檢測模型的方式,這里再簡單說一下。
如果使用的數(shù)據(jù)沒有標(biāo)注,可以用用LabelImage進(jìn)行標(biāo)注
我提供的訓(xùn)練數(shù)據(jù)集是已經(jīng)標(biāo)注好了的,大家可以直接用。
標(biāo)注好的數(shù)據(jù)集,按照圖片和標(biāo)注文件分別存放。
數(shù)據(jù)集目錄
下載YOLOv5源碼到本地
在yolov5目錄下,修改data/coco128.yaml配置文件
這里我們只訓(xùn)練行人模型,所以names只有1個。
在yolov5目錄下,創(chuàng)建weights目錄,下載預(yù)訓(xùn)練模型。
yolov5預(yù)訓(xùn)練模型
下載后,放到weights文件夾中,這里我用的是 yolov5s.pt。
修改models/yolov5s.yaml文件中的分類數(shù)量。
我們只識別行人,設(shè)置成1即可。
執(zhí)行一下命令進(jìn)行訓(xùn)練
訓(xùn)練完成后,可以查看訓(xùn)練效果
yolov5訓(xùn)練效果
生成的模型放存放在yolo_people/base_s/weights/best.pt中,后面可以直接用它來做推理。
1. ByteTrack 行人跟蹤
識別出行人,我們可以利用多目標(biāo)跟蹤技術(shù)(MOT)技術(shù)來跟蹤行人,并給每個行人分配唯一的ID。
算法思路為:
算法流程
關(guān)鍵思路是用卡爾曼濾波預(yù)測當(dāng)前幀的跟蹤軌跡在下一幀的位置,預(yù)測框和實(shí)際框之間通過匈牙利算法,用 IoU 進(jìn)行快速相似度匹配。
MOT的方案有很多,如:SORT、DeepSORT、ByteTrack、BoT-SORT等等。
與DeepSORT不同的是,ByteTrack沒有使用 ReID 特征計算表觀相似度,這樣做的目的,一是盡可能做到簡單高速,二是檢測結(jié)果足夠好的情況下,卡爾曼濾波的預(yù)測準(zhǔn)確性已經(jīng)比較高了,能夠代替ReID。
所以,ByteTrack比較依賴目標(biāo)檢測的準(zhǔn)確度的。
下面是在VisDrone2019-MOT數(shù)據(jù)集訓(xùn)練約 10 epochs, 采用YOLO v7 w6結(jié)構(gòu), COCO預(yù)訓(xùn)練模型基礎(chǔ)上訓(xùn)練。對比幾個常見的MOT方案的效果
MOT方案效果對比
指標(biāo)解釋如下:
- MOTA:多目標(biāo)跟蹤準(zhǔn)確度,數(shù)值越高代表跟蹤精確度越好
- IDF1:被檢測和跟蹤的目標(biāo)中,獲取正確ID的比例,綜合考慮準(zhǔn)召,是 F1 score
- IDS:id switch次數(shù)
- fps:幀率
權(quán)衡準(zhǔn)確度和性能,我選擇了 ByteTrack 作為本項(xiàng)目的多目標(biāo)追蹤方案。
各種MOT追蹤的API大致類似,先準(zhǔn)備目標(biāo)檢測框
這里將識別出的行人檢測框,轉(zhuǎn)為numpy結(jié)構(gòu)。
調(diào)用ByteTrack的update函數(shù)進(jìn)行匹配,匹配后會給每一個檢測框一個唯一的ID。
主要思路和核心代碼就是這些,基于此在做一些工程編碼就可以實(shí)現(xiàn)文章開頭的效果。