起飛 | 應(yīng)用YOLOV4 - DeepSort 實(shí)現(xiàn)目標(biāo)跟蹤
點(diǎn)擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
本文分享利用yolov4+deepsort實(shí)現(xiàn)目標(biāo)跟蹤,主要是講解如何使用,具體原理可以根據(jù)文中的參考資料更加深入學(xué)習(xí)。目前主流的趨勢(shì)是將算法更加易用,讓更多人感受到視覺(jué)的魅力,也能讓更多有意向從事這個(gè)領(lǐng)域的人才進(jìn)入。但受限于某些客觀的限制,比如github下載容易失敗,谷歌網(wǎng)盤(pán)無(wú)法下載等,讓部分人不得不退卻。
因此,我想我的分享的價(jià)值就在于感受視覺(jué)魅力的“最后一公里”。
完整的權(quán)重文件和項(xiàng)目都放在后臺(tái)了,回復(fù)“yolov4” 即可獲取。
歡迎分享,幫助更多的小伙伴!
使用YOLOv4、DeepSort和TensorFlow實(shí)現(xiàn)的目標(biāo)跟蹤。YOLOv4是一種非常優(yōu)秀的算法,它使用深卷積神經(jīng)網(wǎng)絡(luò)來(lái)執(zhí)行目標(biāo)檢測(cè)。更詳細(xì)的介紹可以參考之前文章。
今天分享的內(nèi)容是將YOLOv4的輸出輸入到Deep-SORT(Simple Online and Realtime Tracking with a Deep Association Metric),以創(chuàng)建一個(gè)高精度的目標(biāo)跟蹤器。
demo效果展示:

開(kāi)始實(shí)操
1、克隆項(xiàng)目
git clone https://github.com/theAIGuysCode/yolov4-deepsort.git
2、環(huán)境配置
從github項(xiàng)目的requirements-gpu.txt 文件我們可以知道所需要的依賴文件內(nèi)容(這里以GPU版本為例,也可以選擇安裝requirements.txt ):
tensorflow-gpu==2.3.0rc0
opencv-python==4.1.1.26
lxml
tqdm
absl-py
matplotlib
easydict
pillow
強(qiáng)烈建議使用conda 創(chuàng)建虛擬環(huán)境避免污染其他環(huán)境
# 創(chuàng)建虛擬環(huán)境
conda create xxx
# 激活虛擬環(huán)境
# 安裝依賴,這里使用的TensorFlow 2
pip install -r requirements-gpu.txt
PS:建議使用的 cuda 版本是 10.1
可能存在的問(wèn)題,tensorflow和opencv下載太慢
# 通過(guò)指定源來(lái)下載https://www.cnblogs.com/whw1314/p/11748096.html
# 以pip 安裝 tensorflow-gpu==2.3.0rc0 為例:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade tensorflow-gpu==2.3.0rc0
3、預(yù)訓(xùn)練模型下載
我們的目標(biāo)跟蹤器使用 YOLOv4 進(jìn)行目標(biāo)檢測(cè),然后使用 deep sort 進(jìn)行跟蹤。這里提供官方的 YOLOv4 目標(biāo)檢測(cè)模型 作為預(yù)訓(xùn)練模型,該模型能夠檢測(cè) 80 類(lèi)物體。
為了便于演示,我們將使用預(yù)訓(xùn)練的權(quán)重作為我們的跟蹤器。下載預(yù)訓(xùn)練的yolov4.weights文件:
https://drive.google.com/open?id=1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT
將下載好的權(quán)重文件復(fù)制到 data 文件夾下。
PS:如果你向使用 yolov4-tiny.weights,一個(gè)更小的模型,運(yùn)行更快但精度略低一些,可以在這里下載
https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights
使用 YOLOv4 運(yùn)行跟蹤器
為了將 YOLOv4 應(yīng)用到目標(biāo)跟蹤上,首先我們需要將權(quán)重文件轉(zhuǎn)換 成對(duì)應(yīng)的TensorFlow 模型,并將保存到 checkpoints 文件夾中。然后我們需要運(yùn)行 object_tracker.py 來(lái)實(shí)現(xiàn)目標(biāo)跟蹤。
# Convert darknet weights to tensorflow model
python save_model.py --model yolov4
# Run yolov4 deep sort object tracker on video
python object_tracker.py --video ./data/video/test.mp4 --output ./outputs/demo.avi --model yolov4
# Run yolov4 deep sort object tracker on webcam (set video flag to 0)
python object_tracker.py --video 0 --output ./outputs/webcam.avi --model yolov4
--output 后面接的是目標(biāo)跟蹤輸出結(jié)果視頻文件的存儲(chǔ)路徑。
當(dāng)然如果你希望使用YOLOv4-Tiny 可以參考下面的操作
使用 YOLOv4-Tiny 運(yùn)行跟蹤器
下面的命令將可以運(yùn)行yolov4-tiny模型。Yolov4-tiny允許你獲得一個(gè)更高的速度(FPS)的跟蹤器,但可能在精度上有一點(diǎn)損失。確保你已經(jīng)下載了權(quán)重文件,并將其添加到“data”文件夾中。
# save yolov4-tiny model
python save_model.py --weights ./data/yolov4-tiny.weights --output ./checkpoints/yolov4-tiny-416 --model yolov4 --tiny
# Run yolov4-tiny object tracker
python object_tracker.py --weights ./checkpoints/yolov4-tiny-416 --model yolov4 --video ./data/video/test.mp4 --output ./outputs/tiny.avi --tiny
輸出結(jié)果
如上所述,生成的視頻將保存到設(shè)置 --output 命令行標(biāo)志路徑的位置。這里把它設(shè)置為保存到‘output’文件夾。你也可以通過(guò)調(diào)整--output_format標(biāo)志來(lái)改變保存的視頻類(lèi)型,默認(rèn)情況下它被設(shè)置為AVI編解碼器,也就是XVID。
示例視頻顯示跟蹤所有coco數(shù)據(jù)集類(lèi):

目標(biāo)跟蹤器跟蹤的類(lèi)別
默認(rèn)情況下,代碼被設(shè)置為跟蹤coco數(shù)據(jù)集中的所有80個(gè)類(lèi),這是預(yù)先訓(xùn)練好的YOLOv4模型所使用的。但是,可以簡(jiǎn)單地調(diào)整幾行代碼,以跟蹤80個(gè)類(lèi)中的任意一個(gè)或任意一個(gè)組合。只選擇最常見(jiàn)的person類(lèi)或car類(lèi)非常容易。
要自定義選擇的類(lèi),所需要做的就是注釋掉object_tracker.py的第159行和第162行allowed_classes列表,并需要添加想要跟蹤的任何類(lèi)。這些類(lèi)可以是模型訓(xùn)練的80個(gè)類(lèi)中的任何一個(gè),可以在data/classes/ cocoa .names文件中看有那些跟蹤類(lèi)
這個(gè)示例將允許跟蹤person和car的類(lèi)。

目標(biāo)跟蹤demo將跟蹤的類(lèi)別設(shè)置為“person”
目標(biāo)跟蹤demo將跟蹤的類(lèi)別設(shè)置為“car”
命令行參數(shù)參考
save_model.py:--weights: path to weights file(default: './data/yolov4.weights')--output: path to output(default: './checkpoints/yolov4-416')--[no]tiny: yolov4 or yolov4-tiny(default: 'False')--input_size: define input size of export model(default: 416)--framework: what framework to use (tf, trt, tflite)(default: tf)--model: yolov3 or yolov4(default: yolov4)object_tracker.py:--video: path to input video (use 0 for webcam)(default: './data/video/test.mp4')--output: path to output video (remember to set right codec for given format. e.g. XVID for .avi)(default: None)--output_format: codec used in VideoWriter when saving video to file(default: 'XVID)--[no]tiny: yolov4 or yolov4-tiny(default: 'false')--weights: path to weights file(default: './checkpoints/yolov4-416')--framework: what framework to use (tf, trt, tflite)(default: tf)--model: yolov3 or yolov4(default: yolov4)--size: resize images to(default: 416)--iou: iou threshold(default: 0.45)--score: confidence threshold(default: 0.50)--dont_show: dont show video output(default: False)--info: print detailed info about tracked objects(default: False)
參考資料
tensorflow-yolov4-tflite:https://github.com/hunglc007/tensorflow-yolov4-tflite
Deep SORT Repository:
https://github.com/nwojke/deep_sort
https://github.com/theAIGuysCode/yolov4-deepsort
下載1:OpenCV黑魔法
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):OpenCV黑魔法,即可下載小編精心編寫(xiě)整理的計(jì)算機(jī)視覺(jué)趣味實(shí)戰(zhàn)教程
下載2 CVPR2020
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):CVPR2020,即可下載1467篇CVPR 2020論文 個(gè)人微信(如果沒(méi)有備注不拉群!) 請(qǐng)注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱
覺(jué)得有趣就點(diǎn)亮在看吧

