• yolov5

  • deepsort

  • fastreid

前言

基于YOLOv5和DeepSort的目标跟踪 介绍过针对行人的检测与跟踪。本文介绍另一个项目,结合 FastReid 来实现行人的检测、跟踪和重识别。项目地址: https://github.com/zengwb-lx/Yolov5-Deepsort-Fastreid,作者给出的2个主要实例,也是非常的实用,包括行人流量的统计、人群中特定目标的查找与跟踪。

项目复现

首先,创建个全新的虚拟环境

conda create -n pytorch1.6 python=3.7
conda activate pytorch1.6

接着去拉取源码

git clone https://github.com/zengwb-lx/Yolov5-Deepsort-Fastreid.git
cd Yolov5-Deepsort-Fastreid

然后安装下其它的依赖包

# 如果没有gpu的话,就按照requirements.txt安装即可
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html# 编辑requirements.txt,注释掉torch和torchvision
pip install -r requirements.txt# 使用cython加速
pip install cython
cd fast_reid/fastreid/evaluation/rank_cylib
make all
cd ../../../../

先来跑个行人计数的demo

python person_count.py

yolov5 deepsort fastreid

yolov5的作者分别在googleapigithub上都保存了模型文件,但是这2个yolov5s.pt是不一样的,大家可以通过md5sum去查看一下,github上的模型文件是对的

如果你在运行过程中出现下面的错误

2021-07-13 14:22:20 [INFO]: Loading weights from ./deep_sort/deep/checkpoint/ckpt.t7... Done!
Traceback (most recent call last):File "person_count.py", line 244, in <module>yolo_reid.deep_sort()File "person_count.py", line 121, in deep_sortbbox_xywh, cls_conf, cls_ids, xy = self.person_detect.detect(video_path, img, ori_img, vid_cap)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/person_detect_yolov5.py", line 95, in detectpred = self.model(img, augment=self.augment)[0]File "/home/xugaoxiang/anaconda3/envs/pytorch1.6/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_implresult = self.forward(*input, **kwargs)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 111, in forwardreturn self.forward_once(x, profile)  # single-scale inference, trainFile "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 131, in forward_oncex = m(x)  # runFile "/home/xugaoxiang/anaconda3/envs/pytorch1.6/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_implresult = self.forward(*input, **kwargs)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 36, in forwardself.training |= self.exportFile "/home/xugaoxiang/anaconda3/envs/pytorch1.6/lib/python3.7/site-packages/torch/nn/modules/module.py", line 772, in __getattr__type(self).__name__, name))
torch.nn.modules.module.ModuleAttributeError: 'Detect' object has no attribute 'export'

这个就是模型的问题,建议使用源码中自带的shell脚本进行下载

sh weights/download_weights.sh

我们来看看这个行人流量统计的基本原理:

首先,作者将yolov5的目标检测封装成了一个类Person_detect,通过它的detect方法可以检测到视频中的每一个行人目标

然后,在画面中设定一条基准线,给定线条两端的坐标即可

line = [(0, int(0.48 * ori_img.shape[0])), (int(ori_img.shape[1]), int(0.48 * ori_img.shape[0]))]
cv2.line(ori_img, line[0], line[1], (0, 255, 255), 4)

接着,创建跟踪器,开始对yolov5检测出的每一个目标进行跟踪。这里以目标预测框的中心点为基准,下图是它的计算方法

yolov5 deepsort fastreid

如果前后帧的中心点所连成的直线和预先设定的基准线相交,则判定为越线,但是这里还有个方向的问题,向上还是向下?来看另一张图

yolov5 deepsort fastreid

作者利用了三角形的正切与反正切原理,使用math模块中的degrees方法来判断,如果这个角度 >0,说明是向上走,反之则为向下走

def vector_angle(midpoint, previous_midpoint):x = midpoint[0] - previous_midpoint[0]y = midpoint[1] - previous_midpoint[1]return math.degrees(math.atan2(y, x))

看完行人计数的示例,我们再来看看特定目标的重识别示例

python person_search_reid.py

报错了

Fusing layers...
Traceback (most recent call last):File "person_search_reid.py", line 120, in <module>yolo_reid = yolo_reid(cfg, args, path=args.video_path)File "person_search_reid.py", line 35, in __init__self.deepsort = build_tracker(cfg, args.sort, use_cuda=use_cuda)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/deep_sort/__init__.py", line 18, in build_trackermax_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET, use_cuda=use_cuda)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/deep_sort/deep_reid.py", line 29, in __init__self.extractor = Reid_feature()File "./fast_reid/demo/demo.py", line 84, in __init__cfg = setup_cfg(args)File "./fast_reid/demo/demo.py", line 35, in setup_cfgcfg.merge_from_file(args.config_file)File "./fast_reid/fastreid/config/config.py", line 107, in merge_from_filecfg_filename, allow_unsafe=allow_unsafeFile "./fast_reid/fastreid/config/config.py", line 50, in load_yaml_with_basewith PathManager.open(filename, "r") as f:File "./fast_reid/fastreid/utils/file_io.py", line 357, in openpath, mode, buffering=buffering, **kwargsFile "./fast_reid/fastreid/utils/file_io.py", line 251, in _openopener=opener,
FileNotFoundError: [Errno 2] No such file or directory: '../../kd-r34-r101_ibn/config-test.yaml'

这是缺少配置文件,到下面的链接去下载

链接: https://pan.baidu.com/s/1bMG3qy7npecCh6AzNO-Zyw
提取码: hy1m

把这2个文件都存放在目录kd-r34-r101_ibn下,然后修改源码fast_reid/demo/demo.py中的第45行,将

default='../../kd-r34-r101_ibn/config-test.yaml',

改成

default='kd-r34-r101_ibn/config-test.yaml',

将第68行的

default=['MODEL.WEIGHTS', '../../kd-r34-r101_ibn/model_final.pth'],

改成

default=['MODEL.WEIGHTS', 'kd-r34-r101_ibn/model_final.pth'],

然后再次运行脚本person_search_reid.py,可以得到

yolov5 deepsort fastreid

可以看到,由于事先已经提了2位行人(a1111111111b222222222222)的特征,所以,画面中能够识别出这2个人并进行跟踪。默认,特征文件保存在fast_reid/query

特征提取

如果你也想要制作一个特征文件,可以按照下面的步骤进行

首先,需要截取目标人物的图片,存放在某个以特定目标命名的文件夹下,如我这里的xugaoxiang.com,这样,后面进行识别的时候,就显示xugaoxiang.com这个名字了。把这个文件夹拷贝到fast_reid/query目录下,目录结构如下

(pytorch1.6) xugaoxiang@1070Ti:~/Works/Yolov5-Deepsort-Fastreid/fast_reid/query$ tree
.
├── names.npy
├── query_features.npy
└── xugaoxiang.com├── 10.png├── 11.png├── 12.png├── 13.png├── 14.png├── 15.png├── 1.png├── 2.png├── 3.png├── 4.png├── 5.png├── 6.png├── 7.png├── 8.png└── 9.png

接下来执行

cd fast_reid/demo
python person_bank.py

执行完毕后,query目录下的query_features.npynames.npy就被更新了

最后,找个包含目标的视频测试下效果

yolov5 deepsort fastreid

yolov5 deepsort fastreid

工程下载

最后,将包含所需文件全部打包,需要的朋友自行下载

链接:https://pan.baidu.com/s/1JiFzo5_H7TKniZZPzjZK7A
提取码:nauu

参考资料

  • https://github.com/zengwb-lx/Yolov5-Deepsort-Fastreid

  • https://blog.csdn.net/zengwubbb/article/details/113422048

  • https://xugaoxiang.com/2021/06/29/fastreid/

yunanwen

人流量统计、特定目标搜索+跟踪!相关推荐

  1. 单目标跟踪SiamMask:特定目标车辆追踪 part2

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN:RCNN.SPPNet.Fast RCNN.Faste ...

  2. 使用强化学习和YOLOFlow实现基于自主无人机的目标搜索、跟踪

    搜索和救援行动发生在自然灾害期间或之后,寻找受害者目标并跟踪他们,直到救援队到达撤离.无人机是该应用不可或缺的工具,因为它们可以帮助在关键.时间敏感的任务中找到目标.它们可以携带各种传感器,并且可以到 ...

  3. Aidlux实践-快速实现街道人流量统计系统

    背景 之前通过公众号了解到了Aidlux,机缘巧合的情况下参加了『In AidLux,To AIoT』AI应用案例征集活动,在活动过程中,初识了Aidlux平台,该平台可以极大的方便深度学习落地,为智 ...

  4. 基于PaddleDetection实现人流量统计人体检测

    人流量统计 1. 项目概述 在地铁站.火车站.机场.展馆.景区等公共场所,需要实时检测人流数量,当人流密度过高时及时预警,并实施导流.限流等措施,防止安全隐患. 在人流密度较高的公共场所,使用Padd ...

  5. 基于Yolov5+Aidlux的人流量统计测试

    最近几天跟着AI界的大V江大白体验了一把基于Yolov5框架实现人流统计,觉得现在实现AI真的是触手可及,至少之前没有这么觉得过.个人转行进入教育行业将近4年,在此期间虽然也自娱自乐搞一些AI项目,但 ...

  6. CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等

    CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等 CVPR 2020中选论文放榜后,最新开源项目合集也来了. 本届CPVR共接收6656篇论文,中选1470篇,&q ...

  7. 火灾检测、人流量统计… 这个开源项目太香了!

    随着以深度学习为代表的人工智能技术的成熟,国内众多行业都在基于人工智能技术推进行业变革与创新,积极探寻有效.有价值的应用场景进行商业化落地,其中尤以安防行业表现最为活跃.如灾害监控.人流量监控.施工安 ...

  8. CMMI特定目标(SG)和特定实践(SP)汇总

    附录B  CMMI特定目标(SG)和特定实践(SP)汇总 CMMI 2级过程域:需求管理(REQM) SG1 Manage Requirements 管理需求 SP 1.1 Obtain an Und ...

  9. 基于AidLux平台的医院进出口人流量统计案例开发与测试

    1.环境配置 1.1.跨平台应用系统Aidlux AIdlux系统是基于ARM架构的跨生态(Android/鸿蒙+Linux)一站式AIOT应用开发平台.实际应用到现场的时候,通常会以几种形态:GPU ...

最新文章

  1. 我爱淘二次冲刺阶段1
  2. 一位数据挖掘成功人士给数据挖掘在读研究生的建议
  3. c++两个vector合并_这才是真正的 Git:分支合并
  4. 130塔式服务器系统,PowerEdge T130塔式服务器怎么样
  5. 计算机系统组成_网络教育统考计算机应用基础题库(计算机系统的组成2)
  6. JavaScript内置对象Date常用函数
  7. 软件部署在不同linux上,如何在Linux中安装和部署keepalived
  8. HashPasswordForStoringInConfigFile 已过时
  9. 卡函数or1200基于simple-spi的SD卡驱动
  10. 背景图片自适应大小(css3)
  11. jfreechart火速应用
  12. 三款好用的前端代码编辑器推荐
  13. 微信小程序往数组中添加元素对象
  14. 计算机网络安全需求包括哪些内容,什么是网络安全?网络安全包括哪几个方面?...
  15. 除了用jenkins,还有什么方法可实现持续集成?
  16. Assembler - 循环程序设计
  17. bat之ping操作
  18. python数列求和_python练习--数列求和
  19. HDU6397 Character Encoding 插板法+容斥
  20. Spark简介、生态系统

热门文章

  1. 功率谱密度相关方法的MATLAB实现
  2. RS232转PROFIBUS DP总线桥使用方法远创智控
  3. 聚合支付PC端-微信扫码
  4. 程序员发面试短信,HR十天后才回复信息还被拒:你算什么东西?
  5. 欧尼酱讲JVM(06)——指点江山—程序计数器
  6. 武大计算机学院博导张翔,张翔(武大教授)
  7. 虚拟机挂起以后无法Resum
  8. Onvif/RTSP摄像头直播中云台控制
  9. 单相半波可控整流电路 Single Phase Half Wave Controlled Rectifier
  10. linux文本文件导入数据库,Linux系统下如何将txt文档导入到数据库mysql的方法教程...