YOLOv5训练损失、精度、mAP绘图功能 | 支持多模型对比,多结果绘在一个图片(消融实验、科研必备

YOLOv5训练损失、精度、mAP绘图功能 | 支持多模型对比,多结果绘在一个图片(消融实验、科研必备

一、本文介绍

本文给大家带来的是YOLOv5系列的绘图功能,我将向大家介绍YOLO系列的绘图功能。我们在进行实验时,经常需要比较多个结果,针对这一问题,我写了点代码来解决这个问题,它可以根据训练结果绘制损失(loss)和mAP(平均精度均值)的对比图。这个工具不仅支持多个文件的对比分析,还允许大家在现有代码的基础上进行修,从而达到数据可视化的功能,大家也可以将对比图来放在论文中进行对比也是非常不错的选择。
效果图
在这里插入图片描述
在这里插入图片描述

二、核心代码

import os
import pandas as pd
import matplotlib.pyplot as plt
 
 
def plot_metrics_and_loss(experiment_names, metrics_info, loss_info, metrics_subplot_layout, loss_subplot_layout,
                          metrics_figure_size=(15, 10), loss_figure_size=(15, 10), base_directory='runs/train'):
    # Plot metrics
    plt.figure(figsize=metrics_figure_size)
    for i, (metric_name, title) in enumerate(metrics_info):
        plt.subplot(*metrics_subplot_layout, i + 1)
        for name in experiment_names:
            file_path = os.path.join(base_directory, name, 'results.csv')
            data = pd.read_csv(file_path)
            column_name = [col for col in data.columns if col.strip() == metric_name][0]
            plt.plot(data[column_name], label=name)
        plt.xlabel('Epoch')
        plt.title(title)
        plt.legend()
    plt.tight_layout()
    metrics_filename = 'metrics_curves.png'
    plt.savefig(metrics_filename)
    plt.show()
 
    # Plot loss
    plt.figure(figsize=loss_figure_size)
    for i, (loss_name, title) in enumerate(loss_info):
        plt.subplot(*loss_subplot_layout, i + 1)
        for name in experiment_names:
            file_path = os.path.join(base_directory, name, 'results.csv')
            data = pd.read_csv(file_path)
            column_name = [col for col in data.columns if col.strip() == loss_name][0]
            plt.plot(data[column_name], label=name)
        plt.xlabel('Epoch')
        plt.title(title)
        plt.legend()
    plt.tight_layout()
    loss_filename = 'loss_curves.png'
    plt.savefig(loss_filename)
    plt.show()
 
    return metrics_filename, loss_filename
 
 
# Metrics to plot
metrics_info = [
    ('metrics/precision', 'Precision'),
    ('metrics/recall', 'Recall'),
    ('metrics/mAP_0.5', 'mAP at IoU=0.5'),
    ('metrics/mAP_0.5:0.95', 'mAP for IoU Range 0.5-0.95')
]
 
# Loss to plot
loss_info = [
    ('train/box_loss', 'Training Box Loss'),
    ('train/cls_loss', 'Training Classification Loss'),
    ('train/obj_loss', 'Training OBJ Loss'),
    ('val/box_loss', 'Validation Box Loss'),
    ('val/cls_loss', 'Validation Classification Loss'),
    ('val/obj_loss', 'Validation obj Loss')
]
 
# Plot the metrics and loss from multiple experiments
metrics_filename, loss_filename = plot_metrics_and_loss(
    experiment_names=['exp40', 'exp38'],
    metrics_info=metrics_info,
    loss_info=loss_info,
    metrics_subplot_layout=(2, 2),
    loss_subplot_layout=(2, 3)
)

三、使用方法

使用方式非常简单,我们首先在yolo文件夹根目录下创建一个python文件,将核心代码粘贴进去,代码其中experiment_names这个参数就代表我们的每个训练结果的名字, 我们只需要修改这个即可,我这里就是五个结果进行对比,修改完成之后大家运行该文件即可。在这里插入图片描述

### 关于YOLOv8训练过程中的损失曲线图 #### 损失曲线图的生成 在YOLOv8的训练过程中,损失函数的变化情况可以通过损失曲线来直观展示。通常情况下,在每次迭代结束时计算并记录当前batch或epoch的平均损失值。这些数据会被保存到日志文件中以便后续处理。 为了生成损失曲线图表,可以利用Python的数据可视化库matplotlib或者seaborn等工具读取上述提到的日志文件,并提取其中有关loss的信息字段。下面是一个简单的例子用于创建这样的图形: ```python import matplotlib.pyplot as plt import pandas as pd # 假设我们有一个CSV格式的日志文件 'training_log.csv' df = pd.read_csv('path/to/training_log.csv') plt.figure(figsize=(10, 6)) plt.plot(df['iteration'], df['total_loss'], label='Total Loss') plt.xlabel('Iteration') plt.ylabel('Loss Value') plt.title('Training Loss Curve of YOLOv8') plt.legend() plt.show() ``` 此段代码会加载指定路径下的`training_log.csv`文件,并从中选取迭代次数(iteration)以及总的损失(total loss),进而画出一张描述整个训练期间内总损失变化趋势的折线图[^1]。 #### 对损失曲线图的理解 当观察由上述方式产生的损失曲线时,有几个重要的特征需要注意: - **收敛性**: 如果随着训练轮次增加,损失逐渐减小直至趋于稳定,则表明网络正在有效学习;反之如果持续波动甚至增大可能意味着存在问题。 - **过拟合/欠拟合迹象**: 当验证集上的性能不再提升反而下降时可能出现过拟合现象;相反地,若两者都未能达到满意程度则可能是由于模型复杂度不足造成的欠拟合状况。 - **异常峰值**: 若发现某些特定时刻出现了显著高于其他时期的尖峰,这往往暗示着该处发生了特殊事件比如梯度爆炸等问题需要进一步排查原因所在[^2]. #### 针对常见问题提出的解决方案 面对不同的挑战有不同的应对策略可供选择: - **调整超参数**:适当调节诸如初始学习率、动量因子等关键性的配置项有助于改善优化效果; - **正则化手段的应用**:引入L2惩罚项或是Dropout机制能够有效地缓解过拟合风险; - **增强数据样性**:通过扩充样本数量、应用随机变换等方式提高泛化能力从而促进更稳健的学习过程; - **检查输入预处理流程**:确保图像标准化操作正确无误以免因数值范围差异过大影响权重更新效率[^3].
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南栀北辰SDN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值