应用YOLOV4 - DeepSort 实现目标跟踪
轉載自?https://cloud.tencent.com/developer/article/1706259
本文分享利用yolov4+deepsort實現目標跟蹤,主要是講解如何使用,具體原理可以根據文中的參考資料更加深入學習。目前主流的趨勢是將算法更加易用,讓更多人感受到視覺的魅力,也能讓更多有意向從事這個領域的人才進入。但受限于某些客觀的限制,比如github下載容易失敗,谷歌網盤無法下載等,讓部分人不得不退卻。
因此,我想我的分享的價值就在于感受視覺魅力的“最后一公里”。
完整的權重文件和項目都放在后臺了,回復“yolov4” 即可獲取。
歡迎分享,幫助更多的小伙伴!
使用YOLOv4、DeepSort和TensorFlow實現的目標跟蹤。YOLOv4是一種非常優秀的算法,它使用深卷積神經網絡來執行目標檢測。更詳細的介紹可以參考之前文章。
吊打一切的YOLOv4的tricks匯總!附參考論文下載
今天分享的內容是將YOLOv4的輸出輸入到Deep-SORT(Simple Online and Realtime Tracking with a Deep Association Metric),以創建一個高精度的目標跟蹤器。
demo效果展示:
?
開始實操
1、克隆項目
git clone https://github.com/theAIGuysCode/yolov4-deepsort.git
2、環境配置
從github項目的requirements-gpu.txt 文件我們可以知道所需要的依賴文件內容(這里以GPU版本為例,也可以選擇安裝requirements.txt ):
tensorflow-gpu==2.3.0rc0 opencv-python==4.1.1.26 lxml tqdm absl-py matplotlib easydict pillow
強烈建議使用conda 創建虛擬環境避免污染其他環境
# 創建虛擬環境 conda create xxx # 激活虛擬環境# 安裝依賴,這里使用的TensorFlow 2 pip install -r requirements-gpu.txt
PS:建議使用的 cuda 版本是 10.1
可能存在的問題,tensorflow和opencv下載太慢
# 通過指定源來下載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、預訓練模型下載
我們的目標跟蹤器使用 YOLOv4 進行目標檢測,然后使用 deep sort 進行跟蹤。這里提供官方的 YOLOv4 目標檢測模型 作為預訓練模型,該模型能夠檢測 80 類物體。
為了便于演示,我們將使用預訓練的權重作為我們的跟蹤器。下載預訓練的yolov4.weights文件:
https://drive.google.com/open?id=1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT
將下載好的權重文件復制到 data 文件夾下。
PS:如果你向使用 yolov4-tiny.weights,一個更小的模型,運行更快但精度略低一些,可以在這里下載
https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights
使用 YOLOv4 運行跟蹤器
為了將 YOLOv4 應用到目標跟蹤上,首先我們需要將權重文件轉換 成對應的TensorFlow 模型,并將保存到 checkpoints 文件夾中。然后我們需要運行 object_tracker.py 來實現目標跟蹤。
# 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 后面接的是目標跟蹤輸出結果視頻文件的存儲路徑。
當然如果你希望使用YOLOv4-Tiny 可以參考下面的操作
使用 YOLOv4-Tiny 運行跟蹤器
下面的命令將可以運行yolov4-tiny模型。Yolov4-tiny允許你獲得一個更高的速度(FPS)的跟蹤器,但可能在精度上有一點損失。確保你已經下載了權重文件,并將其添加到“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
輸出結果
如上所述,生成的視頻將保存到設置 --output 命令行標志路徑的位置。這里把它設置為保存到‘output’文件夾。你也可以通過調整--output_format標志來改變保存的視頻類型,默認情況下它被設置為AVI編解碼器,也就是XVID。
示例視頻顯示跟蹤所有coco數據集類:
?
目標跟蹤器跟蹤的類別
默認情況下,代碼被設置為跟蹤coco數據集中的所有80個類,這是預先訓練好的YOLOv4模型所使用的。但是,可以簡單地調整幾行代碼,以跟蹤80個類中的任意一個或任意一個組合。只選擇最常見的person類或car類非常容易。
要自定義選擇的類,所需要做的就是注釋掉object_tracker.py的第159行和第162行allowed_classes列表,并需要添加想要跟蹤的任何類。這些類可以是模型訓練的80個類中的任何一個,可以在data/classes/ cocoa .names文件中看有那些跟蹤類
這個示例將允許跟蹤person和car的類。
?
目標跟蹤demo將跟蹤的類別設置為“person”
目標跟蹤demo將跟蹤的類別設置為“car”
命令行參數參考
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
總結
以上是生活随笔為你收集整理的应用YOLOV4 - DeepSort 实现目标跟踪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyinstaller 打包tensor
- 下一篇: tf2运行YOLOv4(tflite)