深度学习目标检测】二十、基于深度学习的雾天行人车辆检测系统-含数据集、GUI和源码(python,yolov8)

雾天车辆行人检测在多种场景中扮演着至关重要的角色。以下是其作用的几个主要方面:

  1. 安全性提升:雾天能见度低,视线受阻,这使得驾驶者和行人在道路上的感知能力大大降低。通过车辆行人检测技术,可以在雾天条件下及时发现道路上的其他交通参与者,从而提前做出反应,避免潜在的危险,提升驾驶和行走的安全性。
  2. 辅助驾驶:在雾天,驾驶者往往难以准确判断前方道路的情况,包括其他车辆和行人的位置、速度和方向等。车辆行人检测技术可以提供这些关键信息,帮助驾驶者更好地了解道路状况,从而做出更准确的驾驶决策。
  3. 交通效率提升:在雾天条件下,交通往往容易受到影响,出现拥堵、事故等情况。通过车辆行人检测技术,可以及时发现并处理这些问题,从而保持交通的顺畅,提升交通效率。
  4. 自动驾驶技术的重要组成部分:随着自动驾驶技术的不断发展,车辆行人检测技术成为了其中的重要组成部分。在自动驾驶系统中,车辆需要能够准确感知周围环境的变化,包括其他车辆和行人的位置、速度和方向等。而雾天车辆行人检测技术可以帮助自动驾驶系统更好地应对恶劣天气条件,提高系统的可靠性和稳定性。

总的来说,雾天车辆行人检测技术在提升道路安全、辅助驾驶、提高交通效率以及推动自动驾驶技术的发展等方面都发挥着重要作用。

本文介绍了基于深度学习yolov8的雾天行人车辆检测系统,包括训练过程和数据准备过程,同时提供了推理的代码和GUI。对准备计算机视觉相关的毕业设计的同学有着一定的帮助。

检测结果如下图:

一、安装YoloV8

yolov8官方文档:主页 - Ultralytics YOLOv8 文档

安装部分参考:官方安装教程

1、安装pytorch

根据本机是否有GPU,安装适合自己的pytorch,如果需要训练自己的模型,建议使用GPU版本。

①GPU版本的pytorch安装

对于GPU用户,安装GPU版本的pytorch,首先在cmd命令行输入nvidia-smi,查看本机的cuda版本,如下图,我的cuda版本是12.4(如果版本过低,建议升级nvidia驱动):

打开pytorch官网,选择合适的版本安装pytorch,如下图,建议使用conda安装防止cuda版本问题出现报错:

②CPU版本pytorch安装

打开pytorch官网,选择CPU版本安装pytorch,如下图:

2、安装yolov8

在命令行使用如下命令安装:

pip install ultralytics

二、数据集准备

本项目的数据集为RTTS数据集,RTTS 数据集源自 RESIDE-β 数据集,包含 4322 张真实雾天图片,作为项目训练集,另外有 100 张真实场景图片作为验证集。

该数据集包含5各类别:

person/ car/ bus/ bicycle/ motorbike

数据集图片示例如下图所示:

为了使用yolov8进行训练,需要将数据集转为yolo格式,本文提供转换好的数据集连接:rtts-yolov8数据集

三、模型配置及训练

1、数据集配置文件

创建数据集配置文件ug.yaml,内容如下(将path路径替换为自己的数据集路径):

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO 2017 dataset http://cocodataset.org by Microsoft
# Example usage: yolo train data=coco.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco  ← downloads here (20.1 GB)# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:\DeepLearning\datasets\csdn\UG\UG_yolov8  # 替换为自己的数据集路径
train: images/train 
val: images/val 
test: images/val  # Classes
names:# 0: normal0: person1: car2: bus3: bicycle4: motorbike

2、训练模型

使用如下命令训练模型,数据配置文件路径更改为自己的路径,model根据自己的需要使用yolov8n/s/l/x版本,其他参数根据自己的需要进行设置:

yolo detect train project=ug name=train exist_ok data=ug/ug.yaml model=yolov8n.yaml epochs=300 imgsz=640

3、验证模型

使用如下命令验证模型,相关路径根据需要修改:

yolo detect val imgsz=640 model=ug/train/weights/best.pt data=ug/ug.yaml

精度如下:

# Ultralytics YOLOv8.1.10 🚀 Python-3.9.18 torch-2.2.0 CUDA:0 (NVIDIA GeForce RTX 3060, 12288MiB)
# YOLOv8n summary (fused): 168 layers, 3006623 parameters, 0 gradients, 8.1 GFLOPs
# val: Scanning D:\DeepLearning\datasets\csdn\UG\UG_yolov8\labels\val.cache... 100 images, 0 backgrounds, 0 corrupt: 100%|██████████| 100/100 [00:00<?, ?it/s]
#                  Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 7/7 [00:07<00:00,  1.00s/it]
#                    all        100        773      0.735      0.448      0.544      0.308
#                 person        100        173      0.732       0.41      0.473      0.197
#                    car        100        479      0.793      0.658      0.744      0.458
#                    bus        100         49      0.679       0.49       0.65      0.393
#                bicycle        100         12      0.766      0.333      0.408      0.255
#              motorbike        100         60      0.706       0.35      0.444      0.236
# Speed: 1.7ms preprocess, 7.9ms inference, 0.0ms loss, 2.5ms postprocess per image
# Results saved to runs\detect\val3
# 💡 Learn more at https://docs.ultralytics.com/modes/val

四、推理

训练好了模型,可以使用如下代码实现推理,权重路径修改为自己的路径:

from PIL import Image
from ultralytics import YOLO# 加载预训练的YOLOv8n模型
model = YOLO('best.pt')image_path = 'test.jpg'
results = model(image_path)  # 结果列表# 展示结果
for r in results:im_array = r.plot()  # 绘制包含预测结果的BGR numpy数组im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像im.show()  # 显示图像im.save('results.jpg')  # 保存图像

五、界面开发

使用pyqt5开发gui界面,支持图片、视频、摄像头输入,支持导出到指定路径,其GUI如下图(完整GUI代码可在下方链接下载):

代码下载连接:基于yolov8的雾天车辆行人检测系统,包含训练好的权重和推理代码,GUI界面,支持图片、视频、摄像头输入,支持检测结果导出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】head命令使用

head命令 head是一个在 Unix 和 Unix-like 操作系统中常用的命令行工具&#xff0c;用于输出文件的前 n 行。默认为 10&#xff0c;即显示 10 行的内容。 语法 head [options] [file(s)] head命令 -Linux手册页 选项及作用 执行令 &#xff1a; head --help 执行命令结果…

k8s二进制部署的搭建

1.1 常见k8s安装部署方式 ●Minikube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特性使用。 部署地址&#xff1a;Install Tools | Kubernetes ●Kubeadm Kubeadm也是一个工具&#xff0c;提供kubeadm init…

文心一言 VS 讯飞星火 VS chatgpt (203)-- 算法导论15.3 2题

二、对一个16个元素的数组&#xff0c;画出2.3.1节中MERGE-SORT过程运行的递归调用树。解释备忘技术为什么对MERGE-SORT这种分治算法无效。需要写代码的时候&#xff0c;请用go语言。 文心一言&#xff0c;代码不完整&#xff1a; 首先&#xff0c;让我们明确2.3.1节中的MERG…

docker创建mongodb数据库容器

介绍 本文将通过docker创建一个mongodb数据库容器 1. 拉取mongo镜像 docker pull mongo:3.63.6版本是一个稳定的版本&#xff0c;可以选择安装此版本。 2. 创建并启动主数据库 容器数据卷配置 /docker/mongodb/master/data # 数据库数据目录&#xff08;宿主机&am…

算法刷题day18

目录 引言一、最长上升子序列II二、最短编辑距离三、编辑距离 引言 本章内容实际上是对线性DP的一个扩展内容&#xff0c;线性DP主要是DP的一个分类&#xff0c;就是它的状态转移方程是线性的&#xff0c;就是一维一维的&#xff0c;其实我也没理解&#xff0c;人家就是这样说…

c语言之二维数组定义与初始化

二维数组可以理解和一个表格类似的东西&#xff0c;只不过没有行名称和列名称 二维数组的表达方式是 类型说明符 数组名[常量表达式] [常量表达式] 比如 int a [3] [4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}} a [3] [4] 是一个二维数组表达式&#xff0c;a是数组名&#xff0c;…

数据结构之:堆

堆&#xff08;Heap&#xff09;是计算机科学中的一种特别的完全二叉树结构&#xff0c;它满足某种特定顺序&#xff0c;用于实现优先队列等数据结构。堆主要有两种类型&#xff1a;最大堆&#xff08;Max Heap&#xff09;和最小堆&#xff08;Min Heap&#xff09;。 定义 …

云原生周刊:Docker 推出 Docker Build Cloud

开源项目推荐 Kube-Vip Kube-Vip 旨在为 Kubernetes 集群提供高可用性和负载均衡功能。它提供了一个可插拔的 VIP&#xff08;虚拟 IP&#xff09;管理器&#xff0c;可以为集群中的服务分配一个虚拟 IP 地址&#xff0c;并自动将流量路由到正确的节点。该项目提供了多种配置…

Numpy快速入门(1)

文章目录 一、Numpy是什么&#xff1f;二、基础知识1.数组创建2.数组的索引、切片和迭代3.形状操纵 一、Numpy是什么&#xff1f; NumPy是一个开源的Python库&#xff0c;提供了多维数组对象&#xff08;ndarray&#xff09;和用于处理这些数组的函数。它是科学计算和数据分析的…

formality:set_constant应用

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章链接: formality:形式验证流程 scan mode func的功能检查需要把scan mode设置成0。

Django 模板使用方法

1.runoob.html 文件代码如下&#xff1a; <h1>{{ hello }}</h1> 2.修改HelloWorld/settings.py&#xff0c;修改 TEMPLATES 中的 DIRS 为 [os.path.join(BASE_DIR, templates)]&#xff0c;如下所示 settings.py 文件代码&#xff1a; TEMPLATES [ { …

vue页面菜单权限问题解决

带锚点的url,#后面部分后端获取不到. vue的页面是带有#的路由,#后端服务获取不到,只在浏览器端有用. URL 中的哈希符号 (#) 被用来作为网页中的 锚点 使用&#xff0c;锚点的含义就是页面中的某个特定的位置&#xff0c;这个位置可以被快速找到&#xff0c;很类似于在该位置抛…

LeetCode 2670.找出不同元素数目差数组

给你一个下标从 0 开始的数组 nums &#xff0c;数组长度为 n 。 nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示&#xff0c;其中 diff[i] 等于前缀 nums[0, …, i] 中不同元素的数目 减去 后缀 nums[i 1, …, n - 1] 中不同元素的数目。 返回 nums 的 不…

请求包的大小会影响Redis每秒处理请求数量

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容压测规划客户端长连接数量对性能的影响请求包大小的影响Pipleline模式对Redis的影响 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领…

第 2 章 微信小程序的构成 (代码导读)断更,后续继续更新

2.1 小程序项目的基本结构 Hello World&#xff01;程序.mp4 文泉云盘 -- 图书二维码资源管理系统兆泰源二维码管理系统https://www.wqyunpan.com/resourceDetail.html?id284928&openIdoUgl9wdyNYHu9EcAe-GEwbQdZilY&qrcodeId242916&signc2lnbm1PUmNxSndPWGFOck…

51.仿简道云公式函数实战-文本函数-JOIN

1. JOIN函数 JOIN 函数可通过连接符将数组的值连成文本。 2. 函数用法 JOIN(数组,"连接符") 3. 函数示例 如需将复选框中勾选的选项通过”-“组合在一起&#xff0c;则可设置公式为JOIN(复选框组,"-") 4. 代码实战 首先我们在function包下创建text包…

【数据结构】【双堆】【滑动窗口】3013. 将数组分成最小总代价的子数组 II

作者推荐 动态规划的时间复杂度优化 本文涉及的基础知识点 C算法&#xff1a;滑动窗口总结 数据结构 双堆 LeetCode3013. 将数组分成最小总代价的子数组 II 给你一个下标从 0 开始长度为 n 的整数数组 nums 和两个 正 整数 k 和 dist 。 一个数组的 代价 是数组中的 第一个…

JSON简介以及如何在Python中使用JSON

什么是JSON&#xff1f; JSON是"JavaScript Object Notation"的简称&#xff0c;是一种数据交换格式 JSON格式 假设我们有一个对象&#xff0c;这个对象有两个属性&#xff1a;“name”跟“age”。 在JSON中是这样表达的&#xff1a; { "name":"男孩…

vulnhub----hackme2-DHCP靶机

文章目录 一&#xff0c;信息收集1.网段探测2.端口扫描3.目录扫描 二&#xff0c;信息分析三&#xff0c;sql注入1.判断SQL注入2.查询显示位3.查询注入点4.查询库5.查询表6.查字段7. 查user表中的值8.登陆superadmin用户 四&#xff0c;漏洞利用文件上传命令执行蚁剑连接 五&am…