起飞 | 应用YOLOV4 - DeepSort 实现目标跟踪
共 5975字,需浏览 12分钟
·
2020-09-25 20:16
点击上方“AI算法与图像处理”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本文分享利用yolov4+deepsort实现目标跟踪,主要是讲解如何使用,具体原理可以根据文中的参考资料更加深入学习。目前主流的趋势是将算法更加易用,让更多人感受到视觉的魅力,也能让更多有意向从事这个领域的人才进入。但受限于某些客观的限制,比如github下载容易失败,谷歌网盘无法下载等,让部分人不得不退却。
因此,我想我的分享的价值就在于感受视觉魅力的“最后一公里”。
完整的权重文件和项目都放在后台了,回复“yolov4” 即可获取。
欢迎分享,帮助更多的小伙伴!
使用YOLOv4、DeepSort和TensorFlow实现的目标跟踪。YOLOv4是一种非常优秀的算法,它使用深卷积神经网络来执行目标检测。更详细的介绍可以参考之前文章。
今天分享的内容是将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
下载1:OpenCV黑魔法
在「AI算法与图像处理」公众号后台回复:OpenCV黑魔法,即可下载小编精心编写整理的计算机视觉趣味实战教程
下载2 CVPR2020
在「AI算法与图像处理」公众号后台回复:CVPR2020,即可下载1467篇CVPR 2020论文 个人微信(如果没有备注不拉群!) 请注明:地区+学校/企业+研究方向+昵称
觉得有趣就点亮在看吧