手把手教你YOLOv8画对比图,支持多个实验结果可视化
创作时间:
作者:
@小白创作中心
手把手教你YOLOv8画对比图,支持多个实验结果可视化
引用
CSDN
1.
https://blog.csdn.net/weixin_44779079/article/details/142108605
本文将详细介绍如何使用Python代码绘制YOLOv8目标检测模型的训练结果对比图。通过两种不同的绘图方法,你可以直观地比较不同实验的性能指标和损失函数的变化情况。
介绍
在目标检测任务中,评估模型性能和监控训练过程是非常重要的环节。本文将介绍如何绘制YOLOv8模型的训练结果对比图,包括损失对比图、mAP(平均精度值)对比图、召回率对比图和精确率对比图。文章提供两种绘图方法:
- 合并画法:将所有指标显示在一个图形窗口中,便于直观对比。
- 逐个画法:逐个绘制每个指标的图,适合详细分析。
评价指标解释
- Precision(精确率):衡量模型预测结果的准确程度,即预测正确的结果数量占总预测数量的比值。精确率越高,表示模型的预测结果越可靠。
- Recall(召回率):衡量模型发现正确样本的能力,即模型预测正确的结果数量占总预测正确数量的比值。召回率越高,表示模型能捕获更多正确的样本,但可能导致误检率的增加。
- mAP(平均精度值):表示所有类别的平均准确率的均值。
- mAP@50:将IOU(Intersection over Union)设置为0.5,并对所有类别的图像进行平均。
- mAP@50-95:基于不同的IOU阈值(范围从0.5到0.95,步长为0.05)来计算的平均mAP值。
损失函数解释
- Box Loss(边界框回归损失):衡量模型预测的边界框与真实标签之间的误差。通常采用IoU、GIoU或CIoU等方法来计算重叠程度。
- Cls Loss(分类损失):评估模型预测物体类别的准确性。通常采用交叉熵损失或Focal Loss来计算预测类别与真实类别之间的误差。
- DFL Loss(分布焦点损失):帮助模型对预测的边界框进行更细粒度的学习,通过离散分布的方式表示边界框坐标,并最大化分布的正确性。
合并画法
合并画法将所有指标显示在一个图形窗口中,便于直观对比。以下是具体的代码实现:
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()
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))
效果图
逐个画法
逐个画法适合详细分析每个指标的变化情况。以下是具体的代码实现:
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()
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
文件路径,可以添加多个实验结果进行对比。custom_labels
:自定义标签(通常是对应的模型名称),这个标签会在绘图时用于标注不同模型的曲线。
例如:
results_files = [
'runs/train/exp/results.csv',
'runs/train/exp2/results.csv',
'runs/train/exp3/results.csv',
]
custom_labels = [
'yolov8n-MobileNetV3',
'yolov8n',
'yolov8s',
]
这样,你就可以根据自己的实验结果绘制相应的对比图了。
热门推荐
肩部训练:合理设计训练计划
Excel表格SUM函数小技巧-WPS高效文档技巧使用方法
制作一个机器人要准备和学习什么
拒绝瑟瑟发抖,冬天必会的"三明治穿衣"法了解一下?!
探寻人工智能的主体性与精神分析:伊莎贝尔·米拉的新视野
Excel表格按月统计数据的多种实用方法
心肌缺血治疗的中药方
增强免疫力的五大中成药全解析
衣能载政 | 政令影响下的民国服饰
高效沟通在公务员工作中有何重要性?
己巳日主四柱无火,己土身弱如何增旺
二手房交易中房产证未满两年需要交多少税?
超宽带技术(UWB):超高速、低功耗的未来无线通信解决方案
焊缝的无损检测要求及等级分类解释
染发与染发剂:全面解析种类、成分、危害及安全使用指南
合规经营下的助贷系统:精准客户线索开发与运营指南
2024年豆瓣高分好书推荐:12本不容错过的优质读物
赵林:中西文化的精神分野:传统与更新
DeepSeek为何爆火?看了ta的回答才知道……
佛手瓜种植全攻略(掌握种植技巧)
超级电容器的结构原理详解
普通话的四个基本声调:阴平、阳平、上声和去声
家长关心的麻腮风疫苗问题,一次说清
如何找回/恢复被替换了的图片文件
如何与爱抢功劳的同事相处
别墅整装装修如何提升生活品质与空间利用?
公司工作证明怎么弄
鼻过敏症的症状、触发因素和缓解方法
中欧班列领跑国际物流:1.9万列数据彰显强劲实力
恩次方梦境解码:长期做梦对健康的影响