用caffe训练生成的log文件画mAP

虽说caffe自带了处理log画loss等的函数,不过用着不舒服,而且对于SSD这样自己定义的一些loss层,不适用。
用SSD训练完,每次都要去看detection_eval也就是mAP。对不同的参数还要对比,不如写一个函数画出来对比好了,比较直观。

import os
import argparse
import re
import math

import matplotlib.pyplot as plt

def parse_args():
    args = argparse.ArgumentParser()
    args.add_argument('logs',nargs='+')
    return args.parse_args()

def get_detection_eval(logfile):
    test_iteration = re.compile(r'Iteration \d+, Testing net \(#0\)')
    test_iter = re.compile(r'\d+')

    regex_detection_eval = re.compile(r'cls_[aA]cc = \d\.\d+')
    regex_num = re.compile(r'\d\.\d+')

    detection_eval = []
    iteration = []
    with open(logfile) as f:
        for line in f:
            test = test_iteration.findall(line)
            detection = regex_detection_eval.findall(line)
            if test:
                test_num = test_iter.findall(test[0])
                iteration.append(int(test_num[0])/1000)
            if detection:
                acc = regex_num.findall(detection[0])
                detection_eval.append(float(acc[0]))
    return iteration, detection_eval


def draw_plot(logs):
    for log in logs:
        iteration, detection_eval = get_detection_eval(log)
        print len(detection_eval)
        plt.plot(iteration, detection_eval, label=log.split('\\')[-1][:-4])
        detection_eval_sorted = sorted(detection_eval, reverse=True)
        print log.split('\\')[-1][:-4],"max: ",detection_eval_sorted[:3]
    plt.legend(loc='upper left')
    plt.show()

if __name__ == "__main__":
    args = parse_args()
    draw_plot(args.logs)
    print args
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值