目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的地铁客流量实时检测算法系统
设计思路
一、课题背景与意义
地铁作为现如今最为流通的交通出现方式之一,已经成为了人们生活中必不可少的一部分。对于本文主要提出的问题,则是在地铁的实时监控录像中,识别行人的数目,实时反映地铁上客流情况,有利于人们选择更好的出行方式。
二、算法理论原理
2.1 YOLOv5算法
YOLOv5是一种单阶段目标检测算法,该算法主要是在YOLOv4的基础上添加了一些新的改进思路,使其速度与精度都得到了极大的性能提升。整个YOLOv5网络结构可分成四部分:输入端、Backbone、Neck、Prediction。
输入端的主要操作任务也就是在用户输入多个数据同时需要进行各种数据增强,因此YOLOv5继承了YOLOv4所使用的Mosaic数据增强方式,对图片进行随机组合缩放、随机组合裁剪、随机组合排布等多种方式进行随机拼接,实现了既对数据集进行增强又同时解放了对于GPU的依赖。YOLOv5针对不同的数据集,采用自定义不同长宽锚框的自适应锚框,同时运用自适应图片缩放,达到数据增强的目的。
2.1 DeepSort算法
DeepSort是在整个Sort算法在对目标追踪基础上的改进,新增加了一个Deep Association Metric,此外还重新加入了外观图片信息以便于实现了如何在较长时间内对被遮挡的目标进行跟踪时的问题。其主要特点之处在于,DeepSort加入了更多外观特征信息,借用了新的ReID应用领域特征模型来快速提取外观特征,减少了REID特征转换的发生次数。在跟踪方面,DeepSort采用的级联匹配算法,可以针对每一个检测器都会分配一个跟踪器,每个跟踪器会设定一个time_since_update参数;对于运动信息和外观信息的变换和模糊问题,利用马氏距离与余弦距离计算;添加了深度学习ReID的模块,有利于更好地区别不同的人物或物体。
三、地铁人流量检测的实现
3.1 数据集
系统使用的数据集是一个位于地铁闸门通过口附近的一段实时监控录像,该数据集中同时时间段的人数众多,充分体现了地铁人流量的现状,可提供多种目标种类和位置信息,可保证训练的数据尽可能多以及数据集集的普遍性,方便进行实时监控或录制。
3.2 实验环境搭建
训练环境:利用谷歌云盘提供的环境,CPU为Intel i7 7800X,GPU为Tesla T4,内存为16G,操作系统为ubuntu 18.04 64位安装CUDA10.0库文件,开发语言为Python,Pytorch框架。
输入视频数据,使用yolov5检测算法,通过对相应人物识别训练模型的训练,得到训练好的检测模型,测试相关的行人标识,选择置信度最高的边框输出,以便完成基于yolov5的行人目标检测这一目标。再通过DeepSort跟踪目标,实时监控每个物体锚点的移动,最后输出视频。
3.2 实验及结果分析
使用yolov5网络和DeepSort算法模型进行训练,训练效果如下所示。当两人正在通过黄线,但实时检测只判定了一人正在通过,且存在有人物距离过近未被标识的情况。但总体而言,可看出yolov5算法和DeepSort算法对于目标检测与跟踪的效果准确率处于较为可观的状态,能够较为准确的检测识别出正确的人物,但仍需要进一步训练以提高准确率。后续可尝试对训练参数进行修改或改变权重文件,且yolov5的损失函数并不是现在最优的,可替换为更为准确地函数。
输入视频数据,使用yolov5检测算法,通过对相应人物识别训练模型的训练,得到训练好的检测模型,测试相关的行人标识,选择置信度最高的边框输出,以便完成基于yolov5的行人目标检测这一目标。再通过DeepSort跟踪目标,实时监控每个物体锚点的移动,最后输出视频。
部分代码如下:
def preprocess_image(image):
image = image.convert('RGB')
image = torch.from_numpy(np.array(image)).float()
image /= 255.0
image = image.permute(2, 0, 1)
return image.unsqueeze(0).to(device)
# 进行地铁客流量检测
def detect_subway_crowd(image):
image = preprocess_image(image)
# 使用YOLOv5进行目标检测
results = model(image)
# 获取检测结果
detections = results.pandas().xyxy[0]
# 计算检测到的人数
crowd_count = len(detections[detections['class'] == 'person'])
# 可根据需要对检测结果进行进一步处理或输出
return crowd_count
# 从摄像头获取图像并进行地铁客流量检测
def detect_crowd_from_camera():
cap = cv2.VideoCapture(0) # 摄像头索引,0表示默认摄像头
while True:
ret, frame = cap.read()
# 将OpenCV图像转换为PIL图像
image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
# 进行地铁客流量检测
crowd_count = detect_subway_crowd(image)
# 在图像上绘制客流量信息
cv2.putText(frame, f"Crowd Count: {crowd_count}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# 显示图像
cv2.imshow('Subway Crowd Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
# 执行地铁客流量检测
detect_crowd_from_camera()
实现效果图样例
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!