基于yolov8的红绿灯目标检测训练与Streamlit部署(代码+教程)

2024-09-04 05:20

本文主要是介绍基于yolov8的红绿灯目标检测训练与Streamlit部署(代码+教程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目背景

随着智能交通系统的快速发展,自动驾驶技术逐渐成为研究的热点。在自动驾驶领域中,准确识别道路上的交通信号灯是确保车辆安全行驶的关键技术之一。近年来,深度学习技术的发展为交通信号灯的识别提供了强大的支持。YOLO(You Only Look Once)作为一种高效的物体检测算法,在实时场景下有着广泛的应用。本文将介绍如何使用YOLOv8模型进行红绿灯检测,并结合Streamlit实现一个简单的Web应用。
在这里插入图片描述

YOLOv8 & Streamlit 简介

YOLOv8 简介

YOLOv8是YOLO系列的最新版本,它在继承了前几代YOLO的优点基础上进行了改进,具有更快的速度和更高的精度。YOLOv8采用了统一的架构设计,可以轻松地在不同的任务之间切换,如目标检测、实例分割等。该模型支持多种后端框架,包括PyTorch等。
在这里插入图片描述

特性
  • 统一的架构:YOLOv8提供了一个统一的训练脚本,可以快速地调整模型以适应不同的任务需求。
  • 高性能:相较于之前的版本,YOLOv8在速度与准确性方面都有所提升。
  • 易于部署:YOLOv8支持多种部署方式,包括ONNX格式,使得模型可以在不同平台上运行。
Streamlit 简介

Streamlit是一个用于创建和共享数据应用的开源Python库。它简化了构建交互式数据可视化界面的过程,允许开发者通过简单的Python代码快速搭建功能丰富的Web应用。

数据集

为了训练YOLOv8模型进行红绿灯检测,我们需要一个包含红绿灯图像的数据集。一个合适的公开数据集可以从以下链接下载:

  • Link: [假设的数据集链接]
    在这里插入图片描述

模型训练

复制配置文件

从YOLOv8的GitHub仓库中下载官方提供的配置文件,并根据我们的需求进行调整。例如,我们可以选择一个预训练的基础模型作为起点,并修改类别数以适应红绿灯检测任务。

配置YOLOv8参数

编辑配置文件中的路径设置,指向我们准备好的数据集目录。此外,还需要设置训练相关的参数,如batch size、学习率等。
总共4各类别:
0: Traffic Light-Red Light
1: Traffic Light-Yellow Light
2: Traffic Light-Green Light
3: Traffic Light-Off

train: data_train/images # train images (relative to 'path') 4 images
val: data_valid/images # val images (relative to 'path') 4 images
test: # test images (optional)
nc: 4
# Classes
names:0: Traffic Light-Red Light1: Traffic Light-Yellow Light2: Traffic Light-Green Light3: Traffic Light-Off
挂载数据集

确保数据集能够被模型正确读取。通常,这涉及到将数据集按照训练、验证和测试集分开,并生成相应的.txt文件指示每个集合中图片的位置。
在这里插入图片描述

模型验证

在训练过程中定期保存检查点,并在验证集上评估模型性能。使用诸如mAP(mean Average Precision)这样的指标来衡量模型的有效性。

# Use the model
model.train(data="yolo8.yaml", epochs=120,batch=4)

模型导出及量化

模型量化

为了提高模型在边缘设备上的推理速度,我们可以对其进行量化处理。量化可以减少模型大小并加快推理速度,但可能会牺牲一些精度。

ONNX 推理验证

将训练好的模型转换成ONNX格式,这是一种开放的交换格式,能够在多个平台和框架间进行模型互操作。然后,在ONNX环境中验证模型的准确性和性能。
在这里插入图片描述

Streamlit 部署ONNX模型-web

使用Streamlit创建一个用户界面,用户可以通过上传图片或者输入URL来让模型进行实时的红绿灯检测。通过调用ONNX模型来进行预测,并将结果展示给用户。
在这里插入图片描述

代码

mport numpy as np
import onnxruntime
import cv2
import matplotlib.pyplot as plt target_size = 640.inputs = {}img_path = 'data/data153372/trafficlight/JPEGImages/00009.jpg'
session = onnxruntime.InferenceSession('ppyolov2_infer_quant_dynamic.onnx')
input_names = [input.name for input in session.get_inputs()]
output_names = [output.name for output in session.get_outputs()]
img = cv2.imread(img_path)
origin_shape = img.shape[:2]
# im_scale_y = target_size / float(origin_shape[0])
# im_scale_x = target_size / float(origin_shape[1])
im_scale_x = im_scale_y = 1.0
scale_factor = np.array([[im_scale_y, im_scale_x]]).astype('float32')im = cv2.resize(img,(int(target_size), int(target_size)))
im = im / 255.0
mean = [0.485, 0.456, 0.406]
std =[0.229, 0.224, 0.225]
im = (im - mean) / std
# im = im[:, :, ::-1]
im = np.expand_dims(np.transpose(im, (2, 0, 1)), axis=0)inputs['im_shape'] =  np.array([origin_shape]).astype('float32')
inputs['scale_factor'] = scale_factor
inputs['image'] = im.astype('float32') np_boxes = session.run(output_names, inputs)[0]
expect_boxes = (np_boxes[:, 1] > 0.2) & (np_boxes[:, 0] > -1)
np_boxes = np_boxes[expect_boxes, :]def draw_results(results, img):for result in results:class_id, scores, x_min, y_min, x_max, y_max = resultprint(class_id)cv2.rectangle(img, (x_min, y_min), (x_max, y_max), (255, 0, 255))draw_results(np_boxes, img)
cv2.imwrite('save.jpg', img)
plt.imshow(img)
plt.show()

总结

项目总结

通过上述步骤,我们成功地训练了一个用于红绿灯检测的YOLOv8模型,并且将其部署到了一个由Streamlit构建的简单Web应用中。这不仅展示了深度学习在实际问题中的应用潜力,也为未来的开发提供了基础。

阿利同学的博客
计算机视觉、图像处理、毕业辅导、作业帮助、代码获取请私信

这篇关于基于yolov8的红绿灯目标检测训练与Streamlit部署(代码+教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java