import csv
import matplotlib.pyplot as plt
# 读取结果文件
results_file = r"F:\yolov8\ultralytics-main\runs\train\exp\results.csv"
data = {
'box': [],
'cls': [],
'dfl': [],
'p': [],
'r': [],
'val_box': [],
'val_cls': [],
'val_dfl': [],
'map@0.5': [],
'map@0.5:0.95': []
}
with open(results_file, 'r') as f:
reader = csv.reader(f)
next(reader) # 跳过文件头部分
for line in reader:
data['box'].append(float(line[1]))
data['cls'].append(float(line[2]))
data['dfl'].append(float(line[3]))
data['p'].append(float(line[4]))
data['r'].append(float(line[5]))
data['val_box'].append(float(line[8]))
data['val_cls'].append(float(line[9]))
data['val_dfl'].append(float(line[10]))
data['map@0.5'].append(float(line[6]))
data['map@0.5:0.95'].append(float(line[7]))
# 绘制图形
fig, axs = plt.subplots(2, 5, figsize=(20, 10))
# 训练损失
color = 'lightblue' # 设置点和线的颜色
axs[0, 0].plot(data['box'], linewidth=2, color=color)
axs[0, 0].scatter(range(len(data['box'])), data['box'], s=30, linewidths=0, color=color, label='box_Loss')
axs[0, 0].set_xlabel('Epoch')
axs[0, 0].set_ylabel('box_Loss')
axs[0, 0].legend()
axs[0, 1].plot(data['cls'], linewidth=2, color=color)
axs[0, 1].scatter(range(len(data['cls'])), data['cls'], s=30, linewidths=0, color=color, label='cls_Loss')
axs[0, 1].set_xlabel('Epoch')
axs[0, 1].set_ylabel('cls_Loss')
axs[0, 1].legend()
axs[0, 2].plot(data['dfl'], linewidth=2, color=color)
axs[0, 2].scatter(range(len(data['dfl'])), data['dfl'], s=30, linewidths=0, color=color, label='dfl_Loss')
axs[0, 2].set_xlabel('Epoch')
axs[0, 2].set_ylabel('dfl_Loss')
axs[0, 2].legend()
axs[0, 3].plot(data['p'], linewidth=2, color=color)
axs[0, 3].scatter(range(len(data['p'])), data['p'], s=30, linewidths=0, color=color, label='Precision')
axs[0, 3].set_xlabel('Epoch')
axs[0, 3].set_ylabel('Precision')
axs[0, 3].legend()
axs[0, 4].plot(data['r'], linewidth=2, color=color)
axs[0, 4].scatter(range(len(data['r'])), data['r'], s=30, linewidths=0, color=color, label='Recall')
axs[0, 4].set_xlabel('Epoch')
axs[0, 4].set_ylabel('Recall')
axs[0, 4].legend()
# 验证损失
axs[1, 0].plot(data['val_box'], linewidth=2, color=color)
axs[1, 0].scatter(range(len(data['val_box'])), data['val_box'], s=30, linewidths=0, color=color, label='val_box')
axs[1, 0].set_xlabel('Epoch')
axs[1, 0].set_ylabel('val_box')
axs[1, 0].legend()
axs[1, 1].plot(data['val_cls'], linewidth=2, color=color)
axs[1, 1].scatter(range(len(data['val_cls'])), data['val_cls'], s=30, linewidths=0, color=color, label='val_cls')
axs[1, 1].set_xlabel('Epoch')
axs[1, 1].set_ylabel('val_cls')
axs[1, 1].legend()
axs[1, 2].plot(data['val_dfl'], linewidth=2, color=color)
axs[1, 2].scatter(range(len(data['val_dfl'])), data['val_dfl'], s=30, linewidths=0, color=color, label='val_dfl')
axs[1, 2].set_xlabel('Epoch')
axs[1, 2].set_ylabel('val_dfl')
axs[1, 2].legend()
axs[1, 3].plot(data['map@0.5'], linewidth=2, color=color)
axs[1, 3].scatter(range(len(data['map@0.5'])), data['map@0.5'], s=30, linewidths=0, color=color, label='map@0.5')
axs[1, 3].set_xlabel('Epoch')
axs[1, 3].set_ylabel('map@0.5')
axs[1, 3].legend()
axs[1, 4].plot(data['map@0.5:0.95'], linewidth=2, color=color)
axs[1, 4].scatter(range(len(data['map@0.5:0.95'])), data['map@0.5:0.95'], s=30, linewidths=0, color=color, label='map@0.5:0.95')
axs[1, 4].set_xlabel('Epoch')
axs[1, 4].set_ylabel('map@0.5:0.95')
axs[1, 4].legend()
# 删除空白的子图
# fig.delaxes(axs[0, 4])
# fig.delaxes(axs[1, 4])
fig.tight_layout()
plt.show()
YOLOv8训练时根据results.cvs画出最终结果图
于 2024-03-22 16:42:10 首次发布