根据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()

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

### YOLO中的CSV文件处理 #### CSV文件结构与用途 在YOLO训练过程中,`results.csv` 文件用于记录每次训练迭代后的性能指标。该文件通常包含多个列,每列表示不同的评估参数,如精度、召回率等[^1]。 #### 处理CSV文件绘制模型对比曲线 为了直观比较不同版本的YOLO模型表现,可以通过读取并解析 `results.csv` 来提取所需的数据点。Python 的pandas库非常适合此类操作: ```python import pandas as pd import matplotlib.pyplot as plt # 加载CSV数据到DataFrame对象中 df = pd.read_csv('path/to/results.csv') # 绘制特定列(例如precision) plt.plot(df['epoch'], df['precision']) plt.xlabel('Epoch') plt.ylabel('Precision') plt.title('Model Precision Over Epochs') plt.show() ``` 上述代码片段展示了如何加载CSV文件,并选取其中两列——‘epoch’ 和 ‘precision’作为X轴和Y轴来创建表[^2]。 #### 将其他格式转换为CSV 有时原始标注可能不是保存成CSV形式而是JSON或TXT。对于这种情况,可以编写脚本来完成格式间的相互转化。比如从JSON转至TXT时需要注意调整类别ID编号以及是否要对边界框坐标做归一化处理等问题[^3]: ```python import json def convert_json_to_txt(json_file, txt_file): with open(json_file) as f: data = json.load(f) lines = [] for item in data["annotations"]: line = " ".join([ str(item["category_id"] - 1), # 减去1是因为某些框架下索引是从0开始计算 *[str(coord) for coord in item["bbox"]] ]) lines.append(line + "\n") with open(txt_file, 'w') as file: file.writelines(lines) ``` 此函数接收两个路径参数分别指向输入源(`json_file`)及目标输位置(`txt_file`). 它会遍历给定JSON文档内的所有注解项并将它们按照指定规则写入纯文本文件.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值