Índice
1. Renderização
2. Conheça o conteúdo do resultado
2.1 Resultado do YOLOv7.txt
- Link de referência: análise de resultados YOLOv7, conteúdo do arquivo txt
0/299 14.7G 0.07522 0.009375 0.02266 0.1073 58 640 0.0002958 0.1458 0.0002676 4.469e-05 0.1005 0.01098 0.02545
训练轮数 GPU消耗 train/box_loss train/obj_loss train/cls_loss train/total_loss 本轮中数据中目标数量 输入图片大小 P R mAP@.5 mAP@.5:.95 val/Box_loss val/obj_loss val/cls_loss
2.2 YOLOv5 | YOLOv8 result.csv (cada coluna tem o mesmo significado)
O significado de cada coluna é o mesmo , provavelmente porque o mesmo autor escreveu o código, então o conteúdo salvo de result.csv não mudou
YOLOv5
YOLOv8
3. Código (somente mapa e perda)
- O que precisa ser alterado : apenas o conteúdo, cada linha representa e
result_dict
模型名称
该模型训练得到的result文件地址
- Ambos v5 e v8 estão
csv
no formato e v7 estátxt
no formato - Pontos-chave a serem observados : No código a seguir
关于下标的注释位置
, os subscritos são todos0
incrementados do início para a direita plt.savefig("mAP50.png", dpi=600)
# dpi pode ser definido como 300/600/900, o que significa salvar como uma imagem vetorial de alta definiçãodata = pd.read_csv(res_path, usecols=[6]).values.ravel()
Indica que depois de lercsv
o arquivo, pegue apenas o6
valor da coluna subscritavalues
eravel()
achate o valor em uma matriz unidimensional (se você quiser desenharresult.csv/result.txt
outros valores, basta alterar o subscrito correspondente diretamente. Por exemplo, se você quiser desenhartrain/box_loss
, Em seguida,绘制map50
altere 6 para 1 e altere 10 para 2)plt.plot(x, data, label=modelname, linewidth='1')
# A espessura da linha é definida como 1
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
if __name__ == '__main__':
# 列出待获取数据内容的文件位置
# v5、v8都是csv格式的,v7是txt格式的
result_dict = {
'YOLOv5m': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov5m\results.csv',
'YOLOv7': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7\results.txt',
'YOLOv7-tiny': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny\results.txt',
'YOLOv7-tiny-large': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny-large\results.txt',
'YOLOv7-tiny-PConv': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny-PConv\results.txt',
'YOLOv7-tiny-GhostNetv2': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny-GhostNetv2\results.txt',
# 'YOLOv8s': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov8s\results.csv',
'YOLOv7-tiny-large-GhostNetv2': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-tiny-large-GhostNetv2\results.txt',
'YOLOv7-GhostNetv2': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-GhostNetv2\results.txt',
'YOLOv7-FasterNet': r'C:\Users\dadandan\Desktop\workspace_temp\NeimengA_train_resultcsv\yolov7-FasterNet\results.txt'
}
# 绘制map50
for modelname in result_dict:
res_path = result_dict[modelname]
ext = res_path.split('.')[-1]
if ext == 'csv':
data = pd.read_csv(res_path, usecols=[6]).values.ravel() # 6是指map50的下标(每行从0开始向右数)
else: # 文件后缀是txt
with open(res_path, 'r') as f:
datalist = f.readlines()
data = []
for d in datalist:
data.append(float(d.strip().split()[10])) # 10是指map50的下标(每行从0开始向右数)
data = np.array(data)
x = range(len(data))
plt.plot(x, data, label=modelname, linewidth='1') # 线条粗细设为1
# 添加x轴和y轴标签
plt.xlabel('Epochs')
plt.ylabel('[email protected]')
plt.legend()
plt.grid()
# 显示图像
plt.savefig("mAP50.png", dpi=600) # dpi可设为300/600/900,表示存为更高清的矢量图
plt.show()
# 绘制map50-95
for modelname in result_dict:
res_path = result_dict[modelname]
ext = res_path.split('.')[-1]
if ext == 'csv':
data = pd.read_csv(res_path, usecols=[7]).values.ravel() # 7是指map50-95的下标(每行从0开始向右数)
else:
with open(res_path, 'r') as f:
datalist = f.readlines()
data = []
for d in datalist:
data.append(float(d.strip().split()[11])) # 11是指map50-95的下标(每行从0开始向右数)
data = np.array(data)
x = range(len(data))
plt.plot(x, data, label=modelname, linewidth='1')
# 添加x轴和y轴标签
plt.xlabel('Epochs')
plt.ylabel('[email protected]:0.95')
plt.legend()
plt.grid()
# 显示图像
plt.savefig("mAP50-95.png", dpi=600)
plt.show()
# 绘制训练的总loss
for modelname in result_dict:
res_path = result_dict[modelname]
ext = res_path.split('.')[-1]
if ext == 'csv':
box_loss = pd.read_csv(res_path, usecols=[1]).values.ravel()
obj_loss = pd.read_csv(res_path, usecols=[2]).values.ravel()
cls_loss = pd.read_csv(res_path, usecols=[3]).values.ravel()
data = np.round(box_loss + obj_loss + cls_loss, 5) # 3个loss相加并且保留小数点后5位(与v7一致)
else:
with open(res_path, 'r') as f:
datalist = f.readlines()
data = []
for d in datalist:
data.append(float(d.strip().split()[5]))
data = np.array(data)
x = range(len(data))
plt.plot(x, data, label=modelname, linewidth='1')
# 添加x轴和y轴标签
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.grid()
# 显示图像
plt.savefig("loss.png", dpi=600)
plt.show()