基于Yolov5 的红绿灯识别

2024-02-22 16:50
文章标签 yolov5 识别 红绿灯

本文主要是介绍基于Yolov5 的红绿灯识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

项目简介

数据集的标注

模型训练

小结


项目简介

基于YOLO的红绿灯识别是一种计算机视觉技术,用于识别交通图像中的红绿灯状态。该技术利用了目标检测算法,特别是YOLO(You Only Look Once)算法,来快速准确地检测图像中的红绿灯区域,并对其状态进行分类。基于YOLO的红绿灯识别在智能交通系统、自动驾驶等领域具有重要的应用价值

数据集的标注

数据集标注可以使用:labelimg 进行标注

labelimg 标注工具可到相关博主或者github去找    也可以采用我网盘存储的标注工具 :
https://pan.baidu.com/s/1BrkiKbjEj0XiK1QMC331mg    提取码:6npe

Labelimg是一款开源的数据标注工具,可以标注三种格式。

  1. VOC标签格式,保存为xml文件。

  2. yolo标签格式,保存为txt文件。

  3. createML标签格式,保存为json格式。

 这里我们采用 Yolo标签进行标注

并创建以下文件 名字可自行修改  这里我命名为 Mydata

images:用于存储图片,里面包含两个子文件夹 trian 和 val

labels:  用于存储标注后产生的标签 (txt格式)同样包含两个子文件夹 trian 和 val  标签与image存储图片需要一 一对应

在机器学习和深度学习中,通常将数据集分为训练集(train)和验证集(val)。以下是关于这两者的简要介绍:

  1. 训练集(Train Set)

    • 用途:主要用于模型训练。

    • 数据量:通常占据整个数据集的大部分,有时甚至达到80-90%。

    • 目的:通过使用训练集,模型可以学习从输入特征到输出目标的映射。

    • 操作:在训练过程中,模型会多次迭代地查看训练数据,并调整其内部参数以最小化某个损失函数。

  2. 验证集(Validation Set)

    • 用途:主要用于模型验证和调整。

    • 数据量:通常比训练集小,占整个数据集的10-20%。

    • 目的:验证集用于评估模型在未见过的数据上的性能,防止过拟合,并帮助调整超参数。

    • 操作:在每个训练周期结束时,模型会使用验证集进行评估,以了解其性能如何。如果模型在验证集上的性能持续下降,这可能意味着它正在过拟合,这时可能需要采取措施,例如调整超参数或早停训练。

模型训练

当数据标注完成后 就可开始模型训练了

 下载解压后打开安装/配置所需要的的环境

下载所需要的模型文件(需要基于这个模型去训练自己的数据集)

这里我们采用的是 yolov5s.pt 的模型文件 如果下载不了可到网盘进行下载

https://pan.baidu.com/s/1BrkiKbjEj0XiK1QMC331mg    提取码:6npe

修改train 程序文件 进行修改 自己的模型训练

根据上面图片进行修改项目文件 names 标签名 nc 标签数量

训练时出现下面错误  在代码前面添加     os.environ['GIT_PYTHON_REFRESH'] = 'quiet'

 训练完成后 会在 runs/train/ 下生成 weights 里面有一个 best.pt 模型文件  将该文件替换 detect.py 里的权重文件即可开始推理

推理结果

修改代码识别红灯、绿灯、黄灯

数学公式:

代码如下 可适当修改判断条件的 数值 以便提高识别的准确性

# ---- 自己添加部分 ----# im0 为当前推理图片或者视频帧 转换为灰度图gray = cv2.cvtColor(im0,cv2.COLOR_BGRA2GRAY)# 将红绿灯分成三等分 用于识别 红灯、绿灯、黄灯 的状态# xyxy 中存储了 推理结果的矩形框坐标 分别为左上 右下# 每一个灯的距离width = int((xyxy[2] - xyxy[0])) // 3# 使用 ROI 获取 红灯、绿灯、黄灯 区域的灰度值red = gray[int(xyxy[1]):int(xyxy[3]), int(xyxy[0]):int(xyxy[0]) + width]yellow = gray[int(xyxy[1]):int(xyxy[3]), int(xyxy[0]) + width:int(xyxy[0]) + width * 2]green = gray[int(xyxy[1]):int(xyxy[3]), int(xyxy[0]) + width * 3:int(xyxy[2])]# 计算区域的灰度值的平均值red_mean = np.mean(red)yellow_mean = np.mean(yellow)green_mean = np.mean(green)# 红灯、绿灯、黄灯 的状态判断if red_mean > 40:cv2.putText(im0, 'red', (50, 50), 1, 5, (0, 0, 255), 3)elif yellow_mean > 40:cv2.putText(im0, 'yellow', (50, 50), 1, 5, (0, 255, 255), 3)elif green_mean > 40:cv2.putText(im0, 'yellow', (50, 50), 1, 5, (0, 128, 0), 3)else:cv2.putText(im0, 'wait', (50, 50), 1, 5, (255, 255, 255), 3)# ---- 自己添加部分 ----

 最终推理结果

小结

基于YOLOV5 v7.0 红绿灯的代码 已基本完成 后续可根据自己的需求进行修改。 第一次编写,了能用些许不足望理解

这篇关于基于Yolov5 的红绿灯识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735890

相关文章

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

[yolov5] --- yolov5入门实战「土堆视频」

1 项目介绍及环境配置 下载yolov5 tags 5.0源码,https://github.com/ultralytics/yolov5/tree/v5.0,解压 Pycharm 中创建conda虚拟环境 激活conda虚拟环境 根据作者提供的requirements.txt文件,pip install -r requirements.txt 如果作者没有提供requirement.txt文件

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示: 此时只需要右击项目,或者你的源代码目录,将这个项目或者源码目录标记为项目源和头文件即可。 英文如下:

BERN2(生物医学领域)命名实体识别与命名规范化工具

BERN2: an advanced neural biomedical named entity recognition and normalization tool 《Bioinformatics》2022 1 摘要 NER和NEN:在生物医学自然语言处理中,NER和NEN是关键任务,它们使得从生物医学文献中自动提取实体(如疾病和药物)成为可能。 BERN2:BERN2是一个工具,

行为智能识别摄像机

行为智能识别摄像机 是一种结合了人工智能技术和监控摄像技术的先进设备,它能够通过深度学习算法对监控画面进行实时分析,自动识别和分析监控画面中的各种行为动作。这种摄像机在安防领域有着广泛的应用,可以帮助监控人员及时发现异常行为,并采取相应的措施。 行为智能识别摄像机可以有效预防盗窃事件。在商场、超市等公共场所安装这种摄像机,可以通过识别异常行为等情况,及时报警并阻止不安全行为的发生

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题 GitHub Pages是一个直接从GitHub存储库托管的静态站点服务,‌它允许用户通过简单的配置,‌将个人的代码项目转化为一个可以在线访问的网站。‌这里使用flutter build web来构建web发布到GitHub Pages。 最近通过flutter build web,通过发布到GitHu

T1打卡——mnist手写数字识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 1.定义GPU import tensorflow as tfgpus=tf.config.list_physical_devices("GPU")if gpus:gpu0=gpus[0]tf.config.experimental.set_memort_groth(gpu0,True) #设置GPU现存用量按需

使用 VisionTransformer(VIT) FineTune 训练驾驶员行为状态识别模型

一、VisionTransformer(VIT) 介绍 大模型已经成为人工智能领域的热门话题。在这股热潮中,大模型的核心结构 Transformer 也再次脱颖而出证明了其强大的能力和广泛的应用前景。Transformer 自 2017年由Google提出以来,便在NLP领域掀起了一场革命。相较于传统的循环神经网络(RNN)和长短时记忆网络(LSTM), Transformer 凭借自注意力机制

T7:咖啡豆识别

T7:咖啡豆识别 **一、前期工作**1.设置GPU,导入库2.导入数据3.查看数据 **二、数据预处理**1.加载数据2.可视化数据3.配置数据集 **三、构建CNN网络模型**1、手动搭建2、直接调用官方模型 **四、编译模型****五、训练模型****六、模型评估****七、预测**八、暂时总结 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K