一、本文介绍
本文用于绘制模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线。用以比较不同算法的收敛速度,最终精度等,并且能够在论文中直观的展示改进效果。支持多文件的数据比较。
文章目录
- 一、本文介绍
- 二、results.csv文件结构介绍
- 三、各指标绘制
- 3.1 代码
- 3.2 使用说明
- 3.3 效果
- 四、多文件绘制
- 4.1 代码
- 4.2 使用说明
- 4.3 效果
二、results.csv文件结构介绍
results.csv
文件是模型在训练过程中,实时记录训练的结果,和当时控制台输出的信息一致。当然还包含一些验证损失,学习率变化等数据。详细的记录项包括:epoch
、train/box_loss
、train/cls_loss
、train/dfl_loss
、metrics/precision
、metrics/recall
、metrics/mAP_0.5
、metrics/mAP_0.5:0.95
、val/box_loss
、val/cls_loss
、val/dfl_loss
、x/lr0
、x/lr1
、x/lr2
。
epoch
:记录训练的轮次,总轮次为训练文件中设置的epochs大小。
train/box_loss
:边界框损失。在训练过程中,此值逐渐变小,越小表示模型预测的边界框与真实边界框之间的差异越小。
train/cls_loss
:分类损失。在训练过程中,此值逐渐变小,越小表示模型对目标类别的预测越准确。
train/dfl_loss
:分布焦点损失。将边界框的回归问题转化为对边界框四个边的分布预测问题,越小表示预测越准确。
metrics/precision
:精确率也称为查准率。用于衡量所有被预测为正类的样本中,真正的正类样本所占的比例。
metrics/recall
:召回率也称为查全率。用于衡量所有实际为正类的样本中,被正确预测为正类的样本所占的比例。
metrics/mAP_0.5
:衡量目标检测模型在IoU 阈值为0.5时,对不同类别的检测性能的平均水平。
metrics/mAP_0.5:0.95
:表示在不同IoU阈值(从0.5到0.95,步长0.05)上的平均mAP。
val/box_loss
、val/cls_loss
、val/dfl_loss
:在验证集上的损失变换。
x/lr0
、x/lr1
、x/lr2
:训练过程中的学习率变化。
三、各指标绘制
3.1 代码
此处仅以mAP_0.5
这一列的数据为例进行展示,其余指标的绘制流程,代码与此完全一致。
import pandas as pd
import matplotlib.pyplot as plt
# 读取 CSV 文件
data = pd.read_csv('results.csv') #替换成训练结果的csv路径
# 获取'metrics/mAP_0.5'列的数据
mAP_05_data = data[' metrics/mAP_0.5']
# 绘制曲线
plt.plot(mAP_05_data, label='Model-1', color='red', linewidth=1)
# 添加图例
plt.legend(loc='lower right')
# 添加标题和坐标轴标签
plt.xlabel('Epoch')
plt.ylabel('mAP_0.5(%)')
plt.title('mAP_0.5 Curve')
# 网格线
plt.grid(True)
# 保存图像到同目录下
plt.savefig('mAP_05_curve.png')
# plt.show()
3.2 使用说明
- 代码中,每一步均作了注释,可自行修改。
- 此代码的位置要和
results.csv
文件在同一目录下,或者在data = pd.read_csv('results.csv')
中指定csv
路径。 - 在
mAP_05_data = data[' metrics/mAP_0.5']
这一行中,要注意列名是要包含前方这些空格的,这里很重要。想要绘制那个指标,直接从csv文件中复制对应的列名,确保无误。要换成其他指标,只需要修改这里的列名即可。
3.3 效果
单文件的mAP_0.5指标绘制效果如下:
四、多文件绘制
4.1 代码
import pandas as pd
import matplotlib.pyplot as plt
# 读取 CSV 文件
data = pd.read_csv('results.csv') #替换成训练结果的csv路径
data_2 = pd.read_csv('results (1).csv') #替换成训练结果的csv路径
data_3 = pd.read_csv('results (2).csv') #替换成训练结果的csv路径
# 获取'metrics/mAP_0.5'列的数据
mAP_05_data = data[' metrics/mAP_0.5']
mAP_05_data_2 = data_2[' metrics/mAP_0.5']
mAP_05_data_3 = data_3[' metrics/mAP_0.5']
# 绘制曲线
plt.plot(mAP_05_data, label='Model-1', color='red', linewidth=1)
plt.plot(mAP_05_data_2, label='Model-2', color='green', linewidth=1)
plt.plot(mAP_05_data_3, label='Model-3', color='blue', linewidth=1)
# 添加图例
plt.legend(loc='lower right')
# 添加标题和坐标轴标签
plt.xlabel('Epoch')
plt.ylabel('mAP_0.5(%)')
plt.title('mAP_0.5Curve')
# 网格线
plt.grid(True)
# 保存图像到同目录下
# plt.savefig('mAP_05_curve.png')
plt.show()
4.2 使用说明
除了满足单文件绘制的要求以外还需注意在添加多个文件时,只需要分别指定文件路径,获取指定列名,绘制曲线,三者全部完成后就可以在一张图上绘制结果并进行比较了。
4.3 效果
多文件的mAP_0.5指标绘制效果如下: