基于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

相关文章

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona