对YOLO训练过程生成的results.csv文件中的Precision,Recall,mAP50,mAP50-95进行整合利用
使用方法:数据文件是 results.csv,实现方式就是代码names字段中,用每个算法名字的文件夹,如下所示,将每个算法生成的results.csv,分别放入以下对应的文件夹中
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes, mark_inset
plt.rcParams.update({'font.size': 18})
pwd = os.getcwd()
names = ['YOLOv5s','YOLOv8s','YOLOv10s','YOLOv11s','YOLOv12s',]
# 创建主图
fig, ax = plt.subplots(figsize=(10, 10))
for i in names:
data = pd.read_csv(f'./{i}/results.csv')
data[' metrics/recall(B)'] = data[' metrics/recall(B)'].astype(np.float32).replace(np.inf, np.nan)
data[' metrics/recall(B)'] = data[' metrics/recall(B)'].fillna(data[' metrics/recall(B)'].interpolate())
plt.plot(data[' metrics/recall(B)'], label=i)
plt.tick_params(axis='both', labelsize=20)
plt.xlabel('Epoch')
plt.legend(fontsize=20)
plt.title('Recall')
plt.tight_layout()
# # 添加局部放大图
# axins = inset_axes(ax, width="30%", height="30%", loc='center') # 创建局部放大图
# # 绘制局部放大图
# for i in names:
# data = pd.read_csv(f'./{i}/results.csv')
# data[' metrics/recall(B)'] = data[' metrics/recall(B)'].astype(np.float32).replace(np.inf, np.nan)
# data[' metrics/recall(B)'] = data[' metrics/recall(B)'].fillna(data[' metrics/recall(B)'].interpolate())
# axins.plot(data[' metrics/recall(B)'], label=i)
# # 设定放大区域
# x1, x2, y1, y2 = 220, 290, 0.83, 0.76 # 放大区域为(300, 340, 0.58, 0.67)
# axins.set_xlim(x1, x2)
# axins.set_ylim(y2, y1)
# # 添加连接线
# mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec='0.5')
# 保存和显示图表
plt.savefig('./recall.png')
print(f'metrice_curve.png save in {pwd}/metrice_curve.png')
plt.show()
运行代码效果如下,
Precision,Recall,mAP50,mAP50-95, 生成其余类型,只要将代码中的Recall,替换为其它评价指标字段即可。