YOLO训练多评价指标曲线画图

发布于:2025-04-18 ⋅ 阅读:(18) ⋅ 点赞:(0)

对YOLO训练过程生成的results.csv文件中的PrecisionRecallmAP50mAP50-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()

运行代码效果如下,

PrecisionRecallmAP50mAP50-95, 生成其余类型,只要将代码中的Recall,替换为其它评价指标字段即可。


网站公告

今日签到

点亮在社区的每一天
去签到