欢迎访问本站,希望站内信息可以帮助到您!感兴趣的,可以加入我的知识星球,一对一解答!

基于YOLOv5和DeepSort的目标跟踪

YOLO 迷途小书童 32评论

软硬件环境

视频看这里

此处是 youtube 的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

V4.0更新

很多同学刚接触这个项目,大多数都是直接下载的 zip 文件,那么解压后,项目中的子项目目录是空的,最常见的运行错误就是 No module named 'torchvision',正确的做法是使用 git 去下载源码

git clone --recurse-submodules https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch.git

跟踪的数据源和 yolov5 的保持一致,使用参数 --source

python track.py --source 0  # webcam
                         img.jpg  # image
                         vid.mp4  # video
                         path/  # directory
                         path/*.jpg  # glob
                         'https://youtu.be/Zgi9g1ksQHc'  # YouTube
                         'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

通过参数 --yolo_model 来指定 yolov5 的模型, 默认使用 yolov5m.pt,在源码根目录,如果本地没有,代码会自动去下载,这个地方,很多同学都碰到了网络连接的问题,如下

最简单的就是自己手动去下载模型,然后放在源码根目录下

另外,ReID 模型也会由代码自动下载(存放在 Google 网盘,没有梯子,国内是连接不上的),下载后的模型存放在 ~/.cache/torch/checkpoints,默认使用的是 osnet_x0_25,其它支持的模型可以到链接 https://kaiyangzhou.github.io/deep-person-reid/MODEL_ZOO 去下载

python track.py --source 0 --yolo_model yolov5m.pt --deep_sort_model osnet_x0_25

V3.0更新

3.0的 release 版本更新了

  • 增加了 colab notebook
  • 增加了处理 MOT16 验证的脚本,包括数据的下载、模型的下载、视频的生成等
  • 修改 track.py 适配新的 yolov5
  • 目标可视化增加了 idclassconfidence
  • 添加开源许可证

V2.0更新

2.0 release 版本主要是适配了 yolov5 的5.0版本;增加了在 MOT16 上的验证;自动下载 yolov5 的权重文件。需要注意的是,作者并没有将 yolov5 的源码在自己的仓库中进行管理,因此,需要自己去下载对应版本的 yolov5

找到对应的 tag 标签,比如现在的v2.0版本,点击进入

yolov5 deepsort

这样就进入了对应的 yolov5 的版本,这个版本,一般是作者验证过的,靠谱

yolov5 deepsort

下载 zip

yolov5 deepsort

然后解压到 yolov5 的文件夹下即可

或者,使用 git 下载源码

git clone --recurse-submodules https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch.git

由于更新了 yolov5,因此,pytorch 的版本也需要更新到1.7以上,我这里匹配的是 cuda 10.1。没有 gpu 的直接按照 requirements.txt 来安装

pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

track.py 命令行参数做了一些修改,默认情况下不显示带测试结果的视频,需要加上参数 --show-vid

python track.py --source test.mp4 --show-vid

YOLOv5

前文 YOLOv5目标检测YOLOv5模型训练 已经介绍过了 YOLOv5 相关的内容,在目标检测中效果不错。

DeepSort

SORT 算法的思路是将目标检测算法(如 YOLO )得到的检测框与预测的跟踪框的 iou (交并比)输入到匈牙利算法中进行线性分配来关联帧间 ID。而 DeepSORT 算法则是将目标的外观信息加入到帧间匹配的计算中,这样在目标被遮挡但后续再次出现的情况下,还能正确匹配这个 ID,从而减少 ID 的切换,达到持续跟踪的目的。

目标跟踪

项目地址 https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch,使用的是 Pytorch 深度学习框架,联合 YOLOv5DeepSort 两个目前很火且效果非常不错的算法工程,实现特定物体的目标跟踪。

git clone https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch.git
cd Yolov5_DeepSort_Pytorch
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
pip install -r requirements.txt

然后去下载权重文件,YOLOv5 的权重文件放置在 yolov5/weights 文件夹下,DeepSort 的权重文件 ckpt.t7 放置在 deep_sort/deep/checkpoint 文件夹下

下载链接,百度网盘下载地址, 提取码:u5v3

找个测试视频,来看看效果吧

python track.py --source test.mp4

测试效果图

deepsort

FAQ

windows 上出现了下面的错误提示

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.

解决方法是,在 track.py 中加上语句

import os

os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

参考资料

喜欢 (1)

您必须 登录 才能发表评论!

(32)个小伙伴在吐槽
  1. 博主您好,我在运行v1版本的时候出现了问题,在使用requirements.txt配置环境后能正常运行,但是速度很慢,查看torch版本是cpu的,重新安装了gpu版本后,运行结果就不显示检测框了,请问这种问题该如何解决
    匿名2022-08-08 10:00
    • 跟踪下代码,看看 yolov5 检测出目标没有?
      迷途小书童2022-08-09 22:01
  2. https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch 想请问一下我进github里面mikel-brostrom作者现在只有Yolov5_DeepSort_OSNet 请问这个和文中所提的有区别吗
    匿名2022-05-05 18:53
    • 作者更新了,改了仓库名称,是一个东西。
      迷途小书童2022-05-08 23:16
  3. reid那个模型网站打不开怎么办啊
    匿名2022-04-25 23:02
    • 网络问题,自己想想办法
      迷途小书童2022-04-26 11:41
  4. Fusing layers... Model Summary: 316 layers, 21787869 parameters, 0 gradients 博主,请问运行完啥也没有出现了这种问题是啥情况啊
    匿名2022-04-20 16:59
    • 没碰过, 复现环境是?
      迷途小书童2022-04-25 14:41
  5. torchreid那个问题,这篇博客解决了 https://blog.csdn.net/m0_49423868/article/details/123386646
    匿名2022-04-20 15:41
    • 还是没关注到本质。 这是git的机制,可以去了解一下。
      迷途小书童2022-04-20 15:44
  6. 我用git clone拉了好几次,都是显示No module named 'torchreid',怎么办
    匿名2022-04-20 14:57
  7. import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" 这个怎么加入track.py中
    匿名2022-04-09 10:13
    • 加在文件头部就好了
      迷途小书童2022-04-10 15:35
  8. requests.exceptions.ConnectionError: HTTPSConnectionPool(host='drive.google.com', port=443): Max retries exceeded with url: /uc?id=1q3Sj2ii34NlfxA4LvmHdWO_75NDRmECJ (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。')) 为什么会连接失败啊
    匿名2022-04-07 22:34
  9. 您好,请问一下博主,我运行的时候报错这个是什么原因呢File "E:\ANACODA\envs\deepsort\lib\site-packages\requests\adapters.py", line 519, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='drive.google.com', port=443): Max retries exceeded with url: /uc?id=1SxQt2AvmEcgWNhaRb2xC4rP6ZwVDP0Wt (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。'))
    匿名2022-03-13 23:43
  10. 您好,我刚刚用tortoisegit拉的代码,还是同样报错了, File "C:\Users\11913\Desktop\Yolov5_DeepSort_Pytorch\deep_sort\deep_sort.py", line 10, in from torchreid.utils import FeatureExtractor ModuleNotFoundError: No module named 'torchreid'
    匿名2022-03-12 22:47
  11. 您好,请问一下博主,我在运行track.py时报错ModuleNotFoundError: No module named 'torchreid',是什么问题呢?
    匿名2022-03-12 18:25
    • 代码没有拉全,请用git,不要直接下载zip
      迷途小书童2022-03-12 21:06
  12. 目标的id号是根据什么来分配的?
    匿名2021-12-19 08:55
  13. 您好,评价指标的代码怎么运行
    匿名2021-12-08 20:11
  14. 您好, 请问一下博主, 这个可以用jetson上的CSI摄像头来进行检测吗? 具体该怎样操作呢?
    匿名2021-09-02 22:40
  15. 您好, 请问一下博主, 这个可以用jetson上的CSI摄像头来进行检测吗?
    匿名2021-09-02 10:51
    • 应该可以,但是性能会差
      迷途小书童2021-09-02 21:35
  16. 博主您好,使用您的项目效果一直都很好,但是当目标太小时会检测不出来,请问可以怎么处理,https://blog.csdn.net/weixin_41868104/article/details/111596851只像这样增加小目标检测层可以吗,不知道是不是我的实现有问题,添加了小目标检测后还是不行。
    匿名2021-07-16 09:38
  17. 如果要保存结果需要在python track.py --source test.mp4后面加上 --save-vid 路径是Yolov5_DeepSort_Pytorch-master\inference\output 如果要显示需要加 --show-vid
    匿名2021-07-08 17:22
    • 对,根据自己需要添加命令行参数。其实,当拿到一个新项目时,如果不知道怎么用,或者说想知道脚本都有哪些功能,第一个要做的就是python demo.py -h
      迷途小书童2021-07-08 21:13
  18. 请问跟着流程走,命令提示符只显示每一帧处理完了,没有弹出视频框看实时效果是怎么回事?
    匿名2021-06-23 11:22
    • 你看看cv2.imshow有没有被执行?
      迷途小书童2021-06-23 22:16