起飞 | 应用YOLOV4 - DeepSort 实现目标跟踪

时间:2022-07-25
本文章向大家介绍起飞 | 应用YOLOV4 - DeepSort 实现目标跟踪,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本文分享利用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