利用GoogleColab进行YOLO行人检测计数(YOLOv3+DeepSORT)


这是我毕业设计总结吧,本课题的研究目标是应用于无人机自动检测分析场景下的行人目标检测算法,基于飞行中的无人机反馈图像进行目标检测并计数。

系统设计:

行人检测系统流程——YOLOv3+DeepSORT

利用YOLO算法进行行人目标检测是逐帧进行检测的,且相互独立,因此就有个问题,视频中不同时刻的同一个人,位置发生了变化,如何关联上?因此采用了YOLOv3检测+DeepSORT多目标跟踪算法结合的方式作为系统架构。如下图所示如何判断Ti-1帧中的红框目标A和Ti帧的红框目标a是同一个目标不重复计数。
在这里插入图片描述
行人检测系统算法流程如下:
通过YOLOv3检测器获取目标检测的结果:检测框坐标bounding boxes、特征feature map、置信度的信息数据生成Detections类 ,然后利用卡尔曼滤波根据单个Detection生成的均值、方差、id预测目标的下一个位置的跟踪框Tracks再使用匈牙利算法将预测后的Tracks和当前帧中的Detecions进行匹配然后根据匹配结果更新卡尔曼滤波的预测数据。如果跟踪框Tracks与Detection的马氏距离在阈值内则两个ID关联,如果新获得的目标对象Detection无匹配的跟踪框Track则产生新的Tracks。因此设计了预测框Tracks有三种状态:尝试态Tentative、确定态Confirmed、删除态Deleted。未与检测框匹配的为尝试态,和检测框匹配的为确定态,无检测框匹配的为删除态。
在这里插入图片描述
计数的数值结果为确定态预测框的数值,系统流程如下所示:

在这里插入图片描述
如下图所示,可以看到每个目标有两个框,蓝色的框是YOLO检测器的检测结果,白色框是卡尔曼滤波基于上一帧预测的结果,根据两个框的IOU判断目标的ID是不是变化。如图垃圾桶被检测到,但是没有预测框进行匹配,没有赋予ID。
在这里插入图片描述

几个问题及解决

  1. 由于透视投影的成像原理,3D物体俯视和平视的图像差别很大,如图所示,同一目标视角不同下的图像特征对比 ,这是客观存在的问题而且涉及图像特征的学习,因此常见的通用数据集COCO/PascalVOC基于水平视角拍摄的图像数据训练出来的模型并不能很好的应对空中视角的行人检测,需要自己制作数据集进行训练。
    在这里插入图片描述
    我利用自己制作的数据集训练的权重和官方的权重测试的效果对比如下,可以看出来改善明显。
    在这里插入图片描述
  2. 计数采用多目标跟踪算法 DeepSORT

工程实现:

薅免费GPU——GoogleColab真香

由于2020疫情突发,学校封校断电服务器没办法用,时间还一直在流,总是要提交毕业设计的。本来想花钱租云服务器的突然发现了大宝贝GoogleColab,免费的GPU,最重要的是和googleDrive直接连接以及它的开发工具真的很好用,十分方便。而且对于训练yolo来说已经够用了,虽然Google对于GPU的用量有限制,而且我用超了被限制了。还是对其好评,工具对于开发者来说十分友好♥**!**
🔗如何使用GoogleColab训练YOLO没用过的朋友可以看一下这个详细教程,真的很好用的工具。
在这里插入图片描述GPU的分配会根据你的使用分配,一般刚开始使用会分配性能较好的GPU,我被限制后只剩K80了

DeepSORT搭建

  1. 在google云盘创建一个项目文件夹,在项目文件夹种创建一个googleColab的.ipynb文件命名为DeepSORT.(如果你首次使用右键么找到,可以在关联更多应用里找到这个图标添加应用到你的Chrome)在这里插入图片描述
  2. 修改你的文件路径,运行命令

#连接Google云硬盘
from google.colab import drive
drive.mount(’/content/drive/’)
#进入项目文件夹
%cd /content/drive/My\ Drive/YOLO_DeepSort

连接到google云盘在这里插入图片描述
3. 拉取工程

#拉取工程
!git clone https://github.com/Qidian213/deep_sort_yolov3

  1. 由于DeepSORT使用keras我用需要把yolo的权重文件格式.weight转换为.h5,运行deep_sort_yolov3/keras-yolo3文件夹内的convert.py文件。注:如果你检测的类有变需要修改一下convert.py文件,例如我训练yolo只检测一类person。

#把权重文件转换格式
%cd deep_sort_yolov3/keras-yolo3
!python convert.py yolov4.cfg /content/drive/My\ Drive/YOLO_DeepSort/yolov4.weights /content/drive/My\ Drive/YOLO_DeepSort/yolov4.h5

  1. 在项目文件夹deep_sort_yolov3中修改文件demo.py的1.视频读取路径 cv2.VideoCapture("XXX.mp4")由于没有图像界面需要注释掉imshow显示结果2.注释imshow————#cv2.imshow('', frame)

在这里插入图片描述在这里插入图片描述
然后运行demo.py后可以查看运行结果output.avi,由于cloab默认运行tensorflow2.0因此需要强调tensorflow版本%tensorflow_version 1.x
在这里插入图片描述

结果展示

【毕业设计】无人机行人目标检测YOLOv3+DeepSORT

关于计数

我在每帧检测的时候添加了一个person_num的变量,根据预测框返回的状态进行计数。注:这个计数只是计算当前帧的人数,全过程的人数计算还没完成,需要根据预测框ID的变化进行计算。在这里插入图片描述

关于数据集制作

  1. 利用无人机航拍,抽取关键帧后利用标注工具labelImg进行标注

关键帧提取脚本:微云orGoogleDrive

在这里插入图片描述

关于YOLOv3模型训练

多目标跟踪算法有自己的训练数据集MOT,它和每一帧的目标数及轨迹相关。

**这个系统我仅仅训练了YOLO检测器没有对DeepSORT多目标跟踪器进行训练**
------可以替换检测器YOLOv3为SSD或者YOLOv4-----------

在GoogleDrive上创建一个YOLOv3的项目文件夹,拉取YOLOv3的项目工程,将自己的数据集上传到GoogleDrive。训练YOLO的详细教程参考:
1.谷歌Colab训练自己YOLOv3数据集
2.YOLO从零开始:基于YOLOv3的行人检测入门指南
注:GoogleColab训练过程中因网络等不可抗因素断开可以根据日志恢复训练

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.backup -gpus 0,1 | tee -a train7.log

项目工程仅供参考

微云:包括数据集等
GoogleDrive:YOLO_DeepSORT and YOLOv3

  • 16
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
基于yolo目标检测的人物识别是一种利用深度学习算法准确识别图像中人物的技术。yolo是一种实时目标检测算法,其特点是能够在保持较高准确率的同时实现实时检测,适用于各种场景。 yolo目标检测人物的过程主要分为两个步骤:首先是目标定位,其通过对输入图像进行分割和分类,识别出包含人物的边界框。然后是目标分类,通过对边界框中的图像进行多次网络预测和筛选,得到最终的人物类别和置信度。 在实际应用中,yolo目标检测人物具有多个优势。首先,由于其采用单一神经网络,所以可以达到较高的实时性。其次,yolo框架在多尺度上进行预测,能够更好地处理不同尺寸的人物。此外,yolo检测算法在目标的边界框预测中引入了回归,可以更准确地预测人物的位置和大小。最后,yolo框架训练简单,只需进行单一的前向和反向传播即可,因此易于实现和应用。 然而,基于yolo目标检测人物也存在一些挑战。首先,人物的遮挡、姿态变化和复杂背景可能会导致检测的不准确性。其次,当人物与其他目标类别重叠时,可能会导致目标混淆和多重检测。此外,yolo框架对小尺寸目标的检测相对较弱,可能会导致漏检的情况。 总的来说,基于yolo目标检测人物是一种高效且准确的技术,可以广泛应用于人脸识别、视频监控、自动驾驶等领域,但在面对复杂场景和小尺寸目标时仍需不断改进。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值