首页 > 其他分享 >(12-3-02)使用YOLOv8识别检测交通标志:基于YOLOv8的交通标志检测模型(2)验证步骤

(12-3-02)使用YOLOv8识别检测交通标志:基于YOLOv8的交通标志检测模型(2)验证步骤

时间:2024-11-19 16:44:17浏览次数:3  
标签:loss axs 检测 YOLOv8 Result model 交通标志 Final png

1.5.3  验证步骤

(1)下面代码定义了一个函数,用于读取并显示指定文件夹中的一组图像文件。图像列表包括混淆矩阵和各类曲线图,函数会将每张图像转换为RGB格式,并以固定尺寸显示,为模型训练的可视化提供直观效果。

import os
import cv2
import matplotlib.pyplot as plt

def display_images(post_training_files_path, image_files):

    for image_file in image_files:
        image_path = os.path.join(post_training_files_path, image_file)
        img = cv2.imread(image_path)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        
        plt.figure(figsize=(10, 10), dpi=120)
        plt.imshow(img)
        plt.axis('off')
        plt.show()

# 要显示的图像文件列表
image_files = [
    'confusion_matrix_normalized.png',
    'F1_curve.png',
    'P_curve.png',
    'R_curve.png',
    'PR_curve.png',
    'results.png'
]

# 图像所在目录的路径
post_training_files_path = '/working/runs/detect/train'

# 显示图像
display_images(post_training_files_path, image_files)

执行后会从指定目录 (/working/runs/detect/train) 中读取一组图像文件,包括混淆矩阵和各类性能曲线图,如图1-3所示。每张图像会被读取并转换为RGB格式,然后使用matplotlib展示出来。每张图像的显示尺寸被设置为10x10英寸,分辨率为120 DPI,且不会显示坐标轴。这样,用户可以直观地查看训练过程中的各项评估结果和模型性能曲线。

混淆矩阵图

F1 曲线(F1_curve.png)图

精度曲线(P_curve.png)图

召回率曲线(R_curve.png)图

PR 曲线(PR_curve.png)图

结果图(results.png)

图1-3  各种可视化图

各种可视化图的具体说明如下:

  1. 混淆矩阵(confusion_matrix_normalized.png)图:用于展示分类模型的性能,显示了实际类别和预测类别之间的对比。矩阵的每个单元格表示预测类别与实际类别的匹配情况。标准化的混淆矩阵便于比较各个类别的准确率。
  2. F1 曲线(F1_curve.png)图:F1分数是精度(Precision)和召回率(Recall)的调和平均,用于评估模型的综合表现。F1 曲线展示了随着训练过程中某些参数(如阈值)的变化,F1 分数的变化情况。
  3. 精度曲线(P_curve.png)图:精度曲线(Precision Curve)显示了模型在不同的阈值下的精度变化,精度是指预测为正类的样本中,实际为正类的比例。
  4. 召回率曲线(R_curve.png)图:召回率曲线(Recall Curve)展示了在不同阈值下模型的召回率变化,召回率是指所有实际为正类的样本中,被正确识别为正类的比例。
  5. PR 曲线(PR_curve.png)图:精度-召回率曲线(Precision-Recall Curve),展示了在不同阈值下,精度和召回率的权衡。此曲线常用于类别不平衡的情形下,评价模型在正类检测方面的表现。
  6. 结果图(results.png):展示训练过程中的整体性能结果,例如损失函数变化、mAP(平均精度均值)、训练和验证集上的精度、召回率等。

这些图像有助于全面评估模型的性能,尤其是在多类别任务中,对模型的每个方面进行细致的分析。

(2)下面代码用于读取训练过程中生成的results.csv文件,加载到pandas数据框中,并显示文件中的最后10行内容。这样可以查看训练结果的最后几条数据,如模型的性能指标、损失值或其他相关信息。

# 读取训练结果的CSV文件
Result_Final_model = pd.read_csv('working/runs/detect/train/results.csv')

# 显示CSV文件中的最后10行数据
Result_Final_model.tail(10)

执行后会输出:

epoch	train/box_loss	train/cls_loss	train/dfl_loss	metrics/precision(B)	metrics/recall(B)	metrics/mAP50(B)	metrics/mAP50-95(B)	val/box_loss	val/cls_loss	val/dfl_loss	lr/pg0	lr/pg1	lr/pg2
20	21	0.55740	0.52881	0.94040	0.96343	0.81798	0.93275	0.79194	0.57663	0.45824	0.95732	0.000179	0.000179	0.000179
21	22	0.54938	0.50105	0.93599	0.92566	0.88105	0.94360	0.80859	0.56651	0.43104	0.95234	0.000161	0.000161	0.000161
22	23	0.53653	0.47742	0.93256	0.92601	0.87273	0.94378	0.80903	0.56020	0.42374	0.94359	0.000144	0.000144	0.000144
23	24	0.52901	0.45752	0.92159	0.94448	0.87110	0.94789	0.81055	0.56475	0.40938	0.95220	0.000127	0.000127	0.000127
24	25	0.52568	0.43794	0.92954	0.94604	0.88493	0.95295	0.82069	0.54540	0.38604	0.93454	0.000109	0.000109	0.000109
25	26	0.51426	0.42990	0.91126	0.94099	0.88593	0.95179	0.82002	0.54739	0.38483	0.93668	0.000092	0.000092	0.000092
26	27	0.50218	0.40930	0.90848	0.94543	0.89077	0.95616	0.82587	0.54801	0.37515	0.93724	0.000075	0.000075	0.000075
27	28	0.50789	0.39283	0.91260	0.92909	0.90408	0.95452	0.82420	0.54305	0.37637	0.93477	0.000057	0.000057	0.000057
28	29	0.49446	0.38381	0.90141	0.93868	0.90941	0.95800	0.82593	0.54046	0.35780	0.93587	0.000040	0.000040	0.000040
29	30	0.49017	0.38064	0.90189	0.94317	0.90490	0.95719	0.83020	0.53427	0.35107	0.93138	0.000023	0.000023	0.000023

(3)下面这段代码用于读取文件results.csv并使用seaborn绘制多个子图,展示模型训练过程中不同指标的变化情况。包括训练损失(box_loss, cls_loss, dfl_loss)、模型评估指标(precision, recall, mAP)、以及验证集的损失值(val/box_loss, val/cls_loss, val/dfl_loss)。每个子图都展示了不同的训练或验证指标随训练轮次(epoch)变化的趋势,帮助用户分析训练效果和模型性能。

# 读取 results.csv 文件并将列名去除空格
Result_Final_model.columns = Result_Final_model.columns.str.strip()

# 创建子图
fig, axs = plt.subplots(nrows=5, ncols=2, figsize=(15, 15))

# 使用 seaborn 绘制各个指标的变化曲线
sns.lineplot(x='epoch', y='train/box_loss', data=Result_Final_model, ax=axs[0,0])
sns.lineplot(x='epoch', y='train/cls_loss', data=Result_Final_model, ax=axs[0,1])
sns.lineplot(x='epoch', y='train/dfl_loss', data=Result_Final_model, ax=axs[1,0])
sns.lineplot(x='epoch', y='metrics/precision(B)', data=Result_Final_model, ax=axs[1,1])
sns.lineplot(x='epoch', y='metrics/recall(B)', data=Result_Final_model, ax=axs[2,0])
sns.lineplot(x='epoch', y='metrics/mAP50(B)', data=Result_Final_model, ax=axs[2,1])
sns.lineplot(x='epoch', y='metrics/mAP50-95(B)', data=Result_Final_model, ax=axs[3,0])
sns.lineplot(x='epoch', y='val/box_loss', data=Result_Final_model, ax=axs[3,1])
sns.lineplot(x='epoch', y='val/cls_loss', data=Result_Final_model, ax=axs[4,0])
sns.lineplot(x='epoch', y='val/dfl_loss', data=Result_Final_model, ax=axs[4,1])

# 为每个子图设置标题和坐标轴标签
axs[0,0].set(title='Train Box Loss')
axs[0,1].set(title='Train Class Loss')
axs[1,0].set(title='Train DFL Loss')
axs[1,1].set(title='Metrics Precision (B)')
axs[2,0].set(title='Metrics Recall (B)')
axs[2,1].set(title='Metrics mAP50 (B)')
axs[3,0].set(title='Metrics mAP50-95 (B)')
axs[3,1].set(title='Validation Box Loss')
axs[4,0].set(title='Validation Class Loss')
axs[4,1].set(title='Validation DFL Loss')

# 设置总标题并调整子图布局
plt.suptitle('Training Metrics and Loss', fontsize=24)
plt.subplots_adjust(top=0.8)
plt.tight_layout()
plt.show()

执行后会生成一个包含10个子图的可视化图,每个子图展示训练过程中的不同性能指标和损失函数随训练轮次(epoch)变化的情况。如图1-4所示,这些图表帮助用户分析模型的训练过程和表现,具体包括:

  1. 训练损失:Train Box Loss, Train Class Loss, Train DFL Loss。
  2. 训练评估指标:Metrics Precision (B), Metrics Recall (B), Metrics mAP50 (B), Metrics mAP50-95 (B)。
  3. 验证损失:Validation Box Loss, Validation Class Loss, Validation DFL Loss。

每个子图显示一个具体的指标或损失函数,并且随着训练轮次的增加,用户可以直观地看到模型在这些指标上的进展或改善情况。图表的标题会帮助区分每个子图的内容。

图1-4  包含10个子图的可视化图

标签:loss,axs,检测,YOLOv8,Result,model,交通标志,Final,png
From: https://blog.csdn.net/asd343442/article/details/143889805

相关文章

  • AI智能分析视频分析网关越界检测提升加油站安全管理效率智能AI管理平台方案
    在能源行业,尤其是加油站这样的高风险环境中,安全监控的重要性不言而喻。随着人工智能技术的飞速发展,传统的视频监控系统正逐渐被智能化、自动化的解决方案所取代。本文将介绍一个创新的加油站智能AI管理平台,该平台通过集成最新的AI技术和智能分析算法,为加油站安全管理带来了革命性......
  • 自动驾驶3D目标检测综述(二)
    文章地址:[2206.09474]3DObjectDetectionforAutonomousDriving:AComprehensiveSurvey(arxiv.org)这篇文章紧接上一篇文章:自动驾驶3D目标检测综述(一)-CSDN博客从第三章开始介绍。目录一、3D目标检测的数据表示1、基于点的3D目标检测1.1整体架构1.2点云采样1.3......
  • 睡岗检测视频分析网关摄像机实时接入分析平台值班室离岗识别监测方案
    在现代安全管理中,值班室的监控和人员管理是保障企业运营安全的关键环节。然而,值班人员的离岗或睡岗现象时有发生,这不仅影响了工作效率,更可能带来严重的安全隐患。本文将探讨如何通过值班室离岗识别监测方案,利用摄像机实时接入分析平台视频分析网关,实现对值班人员行为的实时监控和......
  • 物料堆放检测视频分析服务器明火识别检测查看任务状态步骤
    在数字化转型的浪潮中,人工智能技术正以其独特的方式改变着各行各业,尤其是在视频监控领域,AI的应用正带来革命性的变化。随着计算机视觉技术的不断进步,我们能够通过智能分析系统对视频内容进行深度解析,从而实现对环境中的物体、行为和事件的自动检测和识别。这种技术的应用不仅提......
  • 【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
    ......
  • 违规生产检测视频分析服务器安全帽安全服检测批量操作功能教程
    在工业自动化和智能化的浪潮中,视频监控系统正经历着从传统监控向智能监控的转变。视频分析服务器,作为这一转变的核心,正以其独特的优势在安全管理领域扮演着越来越重要的角色。本文将详细介绍视频分析服务器的技术特点、优势以及如何通过批量操作来提高监控效率和安全性。以下是对......
  • FANUC发那科机器人主板维修,故障问题检测
    电容损坏引发的故障在电子设备中是特别高的,其中尤其以电解电容的损坏为常见电容损坏表现为:1.容量变小;2.完全失去容量;3.漏电;4.短路。电容在电路中所起的作用不同,引起的故障也各有特点。在发那科机器人维修中,数字电路占绝大多数,电容多用做电源滤波,用做信号耦合和振荡电路的电容较......
  • Android 应用检测设备是否被root
    publicclassPropertyUtils{privatestaticfinalStringROOT_DEVICE="0";privatestaticfinalStringNON_ROOT_DEVICE="1";privatestaticvolatileMethodget=null;privatestaticStringgetProperty(Stringprop......
  • 工人穿戴工服识别检测系统
    工人穿戴工服识别检测系统通过结合YOLOv5AI视觉算法和现场摄像头,工人穿戴工服识别检测系统为工业生产提供了一种高效、智能的安全监管解决方案。系统的核心在于一个预先构建的工服图像数据库,用户将待检测工服的图片录入该数据库后,YOLOv5模型将学习并识别这些工服的特征。现场的摄......
  • 视觉防错漏装检测系统
    视觉防错漏装检测系统利用YOLOv5算法对视频数据进行实时分析,视觉防错漏装检测系统识别操作员的动作和部件状态。系统不仅能够检测错误操作,还能对操作员的动作进行细致的分析。例如,在处理不同类型和颜色的座椅覆盖材料时,系统可以准确判断操作员是否拿取了正确的材料。此外,系统还能......