文章内容:如何在YOLOX官网代码中绘制AP图与损失曲线
环境:pytorch1.8
注意:只能利用运行结果”YOLOX_outputs/outputs/train_log.txt“文件绘制
图的格式:自己可以进一步修改,已经是新罗马字体
代码如下:
1、绘制AP图
使用:在YOLOX-main中创建AP.py文件即可
代码修改:文件路径+epoch次数(默认每次epoch评估)
import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocator import os import numpy as np fi_1 = open('YOLOX_outputs/outputs/train_log.txt','r')#,encoding='utf-8') # ################################ 1、修改路径 epoch_nums = 80 # ###################### 2、修改对应自己的训练总epoch数(对应下面x坐标) lines = fi_1.readlines() list_AP = [] list_AP50 = [] list_AP75 = [] list_APM = [] list_APL = [] list_AR100 = [] for line in lines: if 'Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ]' in line: # print(line[-6:]) list_AP.append(float(line[-6:])) elif 'Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ]' in line: # print(line[-6:]) list_AP50.append(float(line[-6:])) elif 'Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ]' in line: # print(line[-6:]) list_AP75.append(float(line[-6:])) elif 'Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ]' in line: # print(line[-6:]) list_APM.append(float(line[-6:])) elif 'Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ]' in line: # print(line[-6:]) list_APL.append(float(line[-6:])) elif 'Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ]' in line: # print(line[-6:]) list_AR100.append(float(line[-6:])) # print(list_AP) # print(list_AP50) # print(list_AP75) # print(list_APM) # print(list_APL) # print(list_AR100) plt.rc('font', family='Times New Roman', size=13) # 全局中英文为字体“罗马字体” plt.rcParams['xtick.direction'] = 'in' plt.rcParams['ytick.direction'] = 'in' x = np.arange(0, epoch_nums, 1) ######################################### 对应自己epoch plt.plot(x, list_AP, label="AP(IOU=0.5:0.95)") #plt.plot(x, list_AP50, label="IOU=0.5") plt.plot(x, list_AP75, label="AP(IOU=0.75)") #plt.plot(x, list_APM, label="medium") plt.plot(x, list_APL, label="AP(Large)") plt.plot(x, list_AR100, label="AR(maxDets=100)") plt.xlabel("Epoch") plt.xlim(0, epoch_nums) #################################################### 同上 x_major_locator = MultipleLocator(10) # 把x轴的刻度间隔设置为10,并存在变量里 ############################### 设置坐标轴间隔 ax = plt.gca() ax.xaxis.set_major_locator(x_major_locator) plt.grid(True) plt.legend(loc="lower right") plt.show()
效果如下:
2、绘制LOSS曲线
使用:在YOLOX-main中创建LOSS.py文件即可
代码修改:文件路径+iters_num次数(需要自己估计下)
import matplotlib.pyplot as plt import os import numpy as np fi_1 = open('YOLOX_outputs/outputs/train_log.txt','r',encoding='utf-8') ####################### 1、读取路径 iters_num = '' ################################ 2、自己估计下坐标轴x,这里是总迭代次数 lines = fi_1.readlines() list_loss = [] for line in lines: if 'total_loss' in line: #print(line) line = line.split('total_loss: ')[-1].split(', iou_loss:')[0] list_loss.append(float(line)) #print(line) #break print(len(list_loss)) plt.rc('font', family='Times New Roman', size=13) # 全局中英文为字体“罗马字体” plt.rcParams['xtick.direction'] = 'in' plt.rcParams['ytick.direction'] = 'in' x = np.arange(0, iters_num, 10) ################################ 自己估计下坐标轴x,这里10是源代码默认iter=10输出一次loss plt.plot(x, list_loss, label="Total Loss") plt.grid(True) plt.xlabel("Steps") plt.ylabel("Loss") #plt.ylim(2.0, 10.0) plt.legend(loc="uper right") #plt.annotate("Loss", (-2,10), xycoords='data',xytext=(-2,10),fontsize=15) plt.show()
效果如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)