YOLOX之绘制AP图与损失曲线

文章内容:如何在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 = 0 # 初始化为0

lines = fi_1.readlines()

list_loss = []

for line in lines:
    if 'total_loss' in line:
    	iters_num += 1  # 每得到一个损失值,+1
        #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'

iters_num *= 10 # 乘以10是对应txt中每10步输出一次
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()

效果如下:
在这里插入图片描述

  • 18
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 47
    评论
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值