手把手教你YOLOv8画对比图,画改进后的对比图,支持多个实验结果,写作和科研必备(全网最详细)

70 篇文章 34 订阅 ¥199.90 ¥299.90

在这里插入图片描述

介绍

今天写一下YOLOv8画改进前后的对比结果图, 画损失对比图、mAP(平均精度值)对比图、recall(召回率)对比图,precision(精确率)对比图,代码已经写好了,大家只需复制粘贴即可运行。本文提供两种画法:
1.合并画法:精度和损失的各项指标在一个图形窗口中显示多张子图。这个画法更加紧凑和直观,可以一次性对比多个指标。
2.逐个画法:逐个绘制每个指标的图

合并画法直接上效果图:
在这里插入图片描述

在这里插入图片描述

逐个画法直接上效果图(图太多了,就不展示了):

在这里插入图片描述
在这里插入图片描述

1)评价指标解释:
1.precision(精确率):用来衡量模型的精准程度,也表示为预测正确的结果数量占总预测数量的比值;一般来说,准确率越高,表示模型的预测结果越可靠。
2.recall(召回率):模型预测正确的结果数量占总预测正确数量的比值,它衡量了模型发现正确样本的能力,召回率越高,表示模型更捕获更多正确的样本,但越高的召回率可能导致误检率的增加。
3.mAP:表示所有类别的平均准确率的均值
4.mAP@50:表示将IOU分配为0.5,并对所有类别的图像进行平均。
5.mAP@50-95:基于不同的IOU阈值(范围从 0.5 到 0.95,步长为 0.05)来计算的平均mAP值。

2)损失解释:
1.box_loss(边界框回归损失):意思是边界框是用来定位物体的矩形框,box_loss 计算模型预测的边界框与真实标签之间的误差。该损失通常采用 IoU(Intersection over Union) 或 GIoU(Generalized IoU)、CIoU 等形式,来衡量预测边界框和真实边界框的重叠程度。
2.cls_loss(分类损失):用于评估模型预测物体类别的准确性。该损失通常采用交叉熵损失(Cross-Entropy Loss)或 Focal Loss 来计算,衡量模型预测的物体类别与真实类别之间的误差。
3.dfl_loss(分布焦点损失):用于帮助模型对预测的边界框进行更细粒度的学习,DFL采用离散分布的方式来表示预测的边界框的各个坐标,并通过最大化分布的正确性来优化预测。

🎓一、合并画法

# -*- coding: utf-8 -*-
"""
@Auth : 挂科边缘
@File :plot_results.py
@IDE :PyCharm
@Motto:学习新思想,争做新青年
"""
import pandas as pd
import matplotlib.pyplot as plt


# 训练结果列表
results_files = [
    'runs/train/exp/results.csv',
    'runs/train/exp2/results.csv',

]

# 与results_files顺序对应
custom_labels = [
    'yolov8n-MobileNetV3',
    'yolov8n',


]

#
def plot_comparison(metrics, labels, custom_labels, layout=(2, 2)):
    fig, axes = plt.subplots(layout[0], layout[1], figsize=(15, 10))  # 创建网格布局
    axes = axes.flatten()  # 将子图对象展平,方便迭代

    for i, (metric_key, metric_label) in enumerate(zip(metrics, labels)):
        for file_path, custom_label in zip(results_files, custom_labels):
            df = pd.read_csv(file_path)

            # 清理列名中的多余空格
            df.columns = df.columns.str.strip()

            # 检查 'epoch' 列是否存在
            if 'epoch' not in df.columns:
                print(f"'epoch' column not found in {file_path}. Available columns: {df.columns}")
                continue

            # 检查目标指标列是否存在
            if metric_key not in df.columns:
                print(f"'{metric_key}' column not found in {file_path}. Available columns: {df.columns}")
                continue

            # 在对应的子图上绘制线条
            axes[i].plot(df['epoch'], df[metric_key], label=f'{custom_label}')

        axes[i].set_title(f' {metric_label}')
        axes[i].set_xlabel('Epochs')
        axes[i].set_ylabel(metric_label)
        axes[i].legend()

    plt.tight_layout()  # 自动调整子图布局,防止重叠
    plt.show()


if __name__ == '__main__':


    # 精度指标
    metrics = [
        'metrics/precision(B)', 'metrics/recall(B)', 'metrics/mAP50(B)', 'metrics/mAP50-95(B)'
    ]

    labels = [
        'Precision', 'Recall', 'mAP@50', 'mAP@50-95'
    ]

    # 调用通用函数绘制精度对比图
    plot_comparison(metrics, labels, custom_labels, layout=(2, 2))


    # 损失指标
    loss_metrics = [
        'train/box_loss', 'train/cls_loss', 'train/dfl_loss', 'val/box_loss', 'val/cls_loss', 'val/dfl_loss'
    ]

    loss_labels = [
        'Train Box Loss', 'Train Class Loss', 'Train DFL Loss', 'Val Box Loss', 'Val Class Loss', 'Val DFL Loss'
    ]

    # 调用通用函数绘制损失对比图
    plot_comparison(loss_metrics, loss_labels, custom_labels, layout=(2, 3))

🎓二·、单独画每一张图(逐个画法)

# -*- coding: utf-8 -*-
"""
@Auth : 挂科边缘
@File :plot_results.py
@IDE :PyCharm
@Motto:学习新思想,争做新青年
"""
import pandas as pd
import matplotlib.pyplot as plt
import os

# 训练结果列表
results_files = [
    'runs/train/exp/results.csv',
    'runs/train/exp2/results.csv',

]

# 与results_files顺序对应
custom_labels = [
    'yolov8n-MobileNetV3',
    'yolov8n',


]
def plot_metric_comparison(metric_key, metric_label,custom_labels):
    plt.figure(figsize=(10, 6))

    for file_path, custom_label in zip(results_files, custom_labels):
        exp_name = os.path.basename(os.path.dirname(file_path))
        df = pd.read_csv(file_path)

        # 清理列名中的多余空格
        df.columns = df.columns.str.strip()

        # 检查 'epoch' 列是否存在
        if 'epoch' not in df.columns:
            print(f"'epoch' column not found in {file_path}. Available columns: {df.columns}")
            continue

        # 检查目标指标列是否存在
        if metric_key not in df.columns:
            print(f"'{metric_key}' column not found in {file_path}. Available columns: {df.columns}")
            continue

        # 绘制没有圆点的线条
        plt.plot(df['epoch'], df[metric_key], label=f'{custom_label}')

    plt.title(f'{metric_label} ')
    plt.xlabel('Epochs')
    plt.ylabel(metric_label)
    plt.legend()
    plt.show()




if __name__ == '__main__':

    metrics = [
        ('metrics/precision(B)', 'Precision'),
        ('metrics/recall(B)', 'Recall'),
        ('metrics/mAP50(B)', 'mAP@50'),
        ('metrics/mAP50-95(B)', 'mAP@50-95')
    ]

    for metric, label in metrics:
        plot_metric_comparison(metric, label, custom_labels)

    loss_metrics = [
        ('train/box_loss', 'Train Box Loss'),
        ('train/cls_loss', 'Train Class Loss'),
        ('train/dfl_loss', 'Train DFL Loss'),
        ('val/box_loss', 'Val Box Loss'),
        ('val/cls_loss', 'Val Class Loss'),
        ('val/dfl_loss', 'Val DFL Loss')
    ]

    for metric, label in loss_metrics:
        plot_metric_comparison(metric, label, custom_labels)

🎓三、代码需要修改的地方

在这里插入图片描述

results_files填入训练生成results.csv文件路径,你想画几个就写几个

results_files = [
‘runs/train/exp/results.csv’,
‘runs/train/exp2/results.csv’,
‘runs/train/exp3/results.csv’,
]
在这里插入图片描述

custom_labels是自定义标签(通常是对应的模型名称),这个标签会在绘图时用于标注不同模型的曲线
custom_labels = [
‘yolov8n-MobileNetV3’,
‘yolov8n’,
]
如图,custom_labels就是每条线的名字,这个名字可以自己定义
在这里插入图片描述

总结

创作不易,喜欢帮点个赞谢谢

YOLOv10是一种基于You Only Look Once(YOLO,一种实时物体检测算法)系列的最新版本,它是由 Ultralytics(一家专注于计算机视觉的公司)开发的。YOLOv10的主要特点是高效、准确,并且支持实时检测。以下是手把手YOLOv10的一些基本步骤: 1. **下载预训练模型**:首先,从Ultralytics的GitHub仓库下载预训练的YOLOv10权重文件,例如`yolov10.weights`。 2. **安装依赖**:确保你已经安装了PyTorch库以及其相关的深度学习工具,如TensorRT(用于加速推理)。 3. **加载模型**:使用`torch.hub.load()`函数加载模型,同时设置合适的输入大小(如416x416),例如: ```python model = torch.hub.load('ultralytics/yolov5', 'yolov10', pretrained=True) ``` 4. **配置数据集**:为了在实际场景中使用模型,你需要准备相应的数据集,包括训练集和测试集标签文件。可以使用COCO等标准格式,或者自定义标注工具。 5. **训练**:如果你需要微调模型,可以加载预训练模型并对其进行训练。这通常涉及划分数据集,定义损失函数和优化器,然后迭代训练过程。 6. **预测**:对于实时应用,通过输入片或视频帧到模型进行预测,返回每个检测框的位置、类别和置信度信息。可以使用`model(torch.Tensor(img))`来进行预测。 7. **可视化结果**:使用像`plottitle`, `line_plot`这样的工具将预测结果显示出来,以便更好地理解和评估性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

挂科边缘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值