可视化绘制mmdetection的log.json日志文件(绝对好用)

可视化绘制mmdetection的log.json日志文件(绝对好用),第1张

1、(点个赞吧~)

mmdetection将训练的结果保存在****.log.json文件中,绘制其中的mAP、loss指标可使用mmdetection自带的py文件,官方可视化api如下:https://mmdetection.readthedocs.io/en/latest/useful_tools.htmlhttps://mmdetection.readthedocs.io/en/latest/useful_tools.html但我用了总是报错,干脆自己写一个~

2、以下是我的代码可视化结果:

3、代码如下(visual_log.py)​​​​​​​
import json
import matplotlib.pyplot as plt
import argparse
'''
解析参数
'''
parser = argparse.ArgumentParser()
parser.add_argument("--mode", type=str, default='val')
parser.add_argument("--select", type=str, default='bbox_mAP_50')
parser.add_argument("--json_path", type=str)
parser.add_argument("--out_dir", type=str,default='./')
args = parser.parse_args()


select = args.select  # 选择绘图的指标
mode = args.mode  # 选择log文件中的模式
json_path = args.json_path
out_dir=args.out_dir

x = []  # 存放epoch
y = []  # 存放指标
y_min = 1000000  # 存放指标最大值   ap不会超过1000000  绘制loss可自由更改
y_max = -1  # 存放指标最小值   ap不会小于-1   绘制loss可自由更改
x_min = 0  # 出现最小值的epoch
x_max = 0  # 出现最大值的epoch


isFirst = True
with open(json_path, 'r') as f:
    for jsonstr in f.readlines():
        if isFirst:  # mmdetection生成的log  json文件第一行是配置信息  跳过
            isFirst = False
            continue
        row_data = json.loads(jsonstr)
        if row_data['mode'] == mode:  # 选择train或者val模式中的指标数据
            item_select = float(row_data[select])
            x_select = int(row_data['epoch'])
            x.append(x_select)
            y.append(item_select)
            if item_select >= y_max:  # 选择最大值  为什么不用numpy.argmax呢?  因为epoch可 
                                      # 能不从1开始  xmin和ymin会匹配错误  处理麻烦
                y_max = item_select
                x_max = x_select
            if item_select <= y_min:  # 选择最小值
                y_min = item_select
                x_min = x_select

plt.figure(figsize=(12, 8), dpi=300)
plt.grid(True, linestyle='--', alpha=0.5)
#plt.ylim(0.8, 1.0)  # 设置y轴坐标范围
plt.xlabel('epoch')
plt.ylabel(select)
plt.plot(x, y)
plt.plot(x_min,y_min,'g-p',x_max,y_max,'r-p')
show_min = '[' + str(x_min) + ' , ' + str(y_min) + ']'
show_max = '[' + str(x_max) + ' , ' + str(y_max) + ']'
plt.annotate(show_min, xy=(x_min, y_min), xytext=(x_min, y_min))
plt.annotate(show_max, xy=(x_max, y_max), xytext=(x_max, y_max))
plt.savefig(args.out_dir+'/'+select+'.jpg', dpi=300)

 4、运行参数解析
  • --mode   train或val   非必选,默认为val,选择绘制train还是val中的指标,train中有loss,没有mAP等指标,需要与--select配合使用,如图:
  • --select   bbox_mAP或loss 等等  非必选,默认为bbox_mAP_50,选择绘制的指标,只要json文件中出现的均可以选择,需要与--mode配合使用
  • --json_path  待解析的json位置   必选,无默认值
  • --out_dir  分析结果图片的父文件夹位置 非必选,默认是当前目录下
  • 指令模板
  • python  [visual_log.py文件位置]  [--json_path  log.json文件位置]  [--mode train或val模式] [--select 绘制的指标名称]  [--out_dir  图片保存的父文件夹]

5、使用流程
  • 将visual_log.py存放在mmdetection的tools文件夹下(当然你也可以放在其它地方),按照模板运行python脚本并传入对应的参数,如图:
  • 可见mmdetection-master/recordSwinRetina文件夹下有分析的结果图片:
 6、注意事项
  • 代码处理的是这种**.log.json文件,即mmdetection默认生成的json结果文件,如图:
  • --out_dir 参数末尾不要加'/'
  • json文件中的某一次'val'未生成mAP等指标,代码会报错KeyError,请将未生成的epoch记录整行删去

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)