根据yolo训练的csv文件绘制模型对比曲线

复杂一点的

更简单的直接跳转

直接利用csv绘制

csv文件准备:

在这里插入图片描述
每个csv文件内容如下
在这里插入图片描述##### 代码

# 绘制目标检测损失对比曲线
import matplotlib
import pandas as pd
import warnings
import matplotlib.pyplot as plt

warnings.filterwarnings("ignore", category=matplotlib.MatplotlibDeprecationWarning)
# 进行绘图操作
net2 = pd.read_csv('/Volumes/LaCie/卷积神经网络实现minst数据集分类/minst_demo/edata2/logs2-train_loss/logs2-net2-train_loss.csv', usecols=['Step', 'Value'])
plt.plot(net2.Step, net2.Value, lw=1.0, label='net2', color='blue')

net4 = pd.read_csv('/Volumes/LaCie/卷积神经网络实现minst数据集分类/minst_demo/edata2/logs2-train_loss/logs2-net4-train_loss.csv', usecols=['Step', 'Value'])
plt.plot(net4.Step, net4.Value, lw=1.0, label='net4', color='red', linestyle='dashdot')  # 使用曲线插值

net5 = pd.read_csv('/Volumes/LaCie/卷积神经网络实现minst数据集分类/minst_demo/edata2/logs2-train_loss/logs2-net5-train_loss.csv', usecols=['Step', 'Value'])
plt.plot(net5.Step, net5.Value, lw=1.0, label='net5', color='black', linestyle='dashdot')  # 使用曲线插值


plt.xlabel('Epoch')
plt.ylabel('loss')

plt.legend(loc=0)
plt.show()

效果
在这里插入图片描述
写到这里突然发现有种更简单的方法,后面有时间在补吧!

直接利用csv绘制

还有一种简单一点的方法: 直接根据模型训练得到的csv文件来绘制曲线,一般csv文件的列名是下面这样的

在这里插入图片描述
放个清楚一点的就是这样的
在这里插入图片描述
注意,有的模型训练的时候使用了早停机制,所以两个需要对比的csv文件的epoch是不一样的,如果你需要实现以最小的那个epoch为准使用下面这段代码

import pandas as pd
import matplotlib.pyplot as plt

# 读取两个CSV文件
data1 = pd.read_csv('train_data/train23_1/results.csv')
data2 = pd.read_csv('train_data/train2_1/results.csv')

# 去除列名前后的空格
data1.columns = data1.columns.str.strip()
data2.columns = data2.columns.str.strip()

# 提取'epoch'和'metrics/recall(B)'列的数据
epoch1 = data1['epoch']
recall1 = data1['metrics/recall(B)']

epoch2 = data2['epoch']
recall2 = data2['metrics/recall(B)']

# 找到两个数据集中的最大epoch值
min_epoch1 = max(epoch1)
print(min_epoch1)
min_epoch2 = max(epoch2)
print(min_epoch2)

# 取两个数据集中最大epoch值的最小值,以确定共同的epoch范围
min_common_epoch = min(min_epoch1, min_epoch2)

# 仅保留小于最小共同epoch值的数据点
epoch1 = epoch1[epoch1 < min_common_epoch]
recall1 = recall1[:len(epoch1)]

epoch2 = epoch2[epoch2 < min_common_epoch]
recall2 = recall2[:len(epoch2)]

# 绘制曲线
plt.plot(epoch1, recall1, lw=1.0, label='net1', color='blue')
plt.plot(epoch2, recall2, lw=1.5, label='net2', color='red')

plt.xlabel('Epoch')
plt.ylabel('Recall')

plt.legend(loc=0)
plt.show()

效果如下:

在这里插入图片描述
当然,如果你想体现所有的epoch,那就更简单了。下面这段代码请食用:

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV文件,不仅仅包括'epoch'和'metrics/recall(B)'列
data1 = pd.read_csv('train_data/train23_1/results.csv')

# 去除列名前后的空格,并提取'epoch'和'metrics/recall(B)'列的数据
data1.columns = data1.columns.str.strip()
epoch1 = data1['epoch']
recall1 = data1['metrics/recall(B)']

plt.plot(epoch1, recall1, lw=1.0, label='YOLOv8', color='blue')

# 类似地处理第二个数据集
data2 = pd.read_csv('train_data/train2_1/results.csv')
data2.columns = data2.columns.str.strip()
epoch2 = data2['epoch']
recall2 = data2['metrics/recall(B)']

plt.plot(epoch2, recall2, lw=1.5, label='Diamond-YOLO', color='red')  # 使用曲线插值

plt.xlabel('Epoch')
plt.ylabel('Recall')

plt.legend(loc=0)
plt.show()

效果如下:
在这里插入图片描述
持续更新中…

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值