yolo模型(四)绘制PR曲线所用到的reval_voc_py.py代码
生活随笔
收集整理的這篇文章主要介紹了
yolo模型(四)绘制PR曲线所用到的reval_voc_py.py代码
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在繪制PR曲線時(shí)要自己生成一個(gè)pkl文件,需要reval_voc_py.py代碼來(lái)生。現(xiàn)貼出基于python2和python3的代碼,按照自己的python版本直接復(fù)制即可。拿走不謝~
reval_voc_py.py
#!/usr/bin/env python# Adapt from -> # -------------------------------------------------------- # Fast R-CNN # Copyright (c) 2015 Microsoft # Licensed under The MIT License [see LICENSE for details] # Written by Ross Girshick # -------------------------------------------------------- # <- Written by Yaping Sun"""Reval = re-eval. Re-evaluate saved detections."""import os, sys, argparse import numpy as np import cPicklefrom voc_eval import voc_evaldef parse_args():"""Parse input arguments"""parser = argparse.ArgumentParser(description='Re-evaluate results')parser.add_argument('output_dir', nargs=1, help='results directory',type=str)parser.add_argument('--voc_dir', dest='voc_dir', default='data/VOCdevkit', type=str)parser.add_argument('--year', dest='year', default='2017', type=str)parser.add_argument('--image_set', dest='image_set', default='test', type=str)parser.add_argument('--classes', dest='class_file', default='data/voc.names', type=str)if len(sys.argv) == 1:parser.print_help()sys.exit(1)args = parser.parse_args()return argsdef get_voc_results_file_template(image_set, out_dir = 'results'):filename = 'comp4_det_' + image_set + '_{:s}.txt'path = os.path.join(out_dir, filename)return pathdef do_python_eval(devkit_path, year, image_set, classes, output_dir = 'results'):annopath = os.path.join(devkit_path,'VOC' + year,'Annotations','{:s}.xml')imagesetfile = os.path.join(devkit_path,'VOC' + year,'ImageSets','Main',image_set + '.txt')cachedir = os.path.join(devkit_path, 'annotations_cache')aps = []# The PASCAL VOC metric changed in 2010use_07_metric = True if int(year) < 2010 else Falseprint 'VOC07 metric? ' + ('Yes' if use_07_metric else 'No')if not os.path.isdir(output_dir):os.mkdir(output_dir)for i, cls in enumerate(classes):if cls == '__background__':continuefilename = get_voc_results_file_template(image_set).format(cls)rec, prec, ap = voc_eval(filename, annopath, imagesetfile, cls, cachedir, ovthresh=0.5,use_07_metric=use_07_metric)aps += [ap]print('AP for {} = {:.4f}'.format(cls, ap))with open(os.path.join(output_dir, cls + '_pr.pkl'), 'w') as f:cPickle.dump({'rec': rec, 'prec': prec, 'ap': ap}, f)print('Mean AP = {:.4f}'.format(np.mean(aps)))print('~~~~~~~~')print('Results:')for ap in aps:print('{:.3f}'.format(ap))print('{:.3f}'.format(np.mean(aps)))print('~~~~~~~~')print('')print('--------------------------------------------------------------')print('Results computed with the **unofficial** Python eval code.')print('Results should be very close to the official MATLAB eval code.')print('-- Thanks, The Management')print('--------------------------------------------------------------')if __name__ == '__main__':args = parse_args()output_dir = os.path.abspath(args.output_dir[0])with open(args.class_file, 'r') as f:lines = f.readlines()classes = [t.strip('\n') for t in lines]print 'Evaluating detections'do_python_eval(args.voc_dir, args.year, args.image_set, classes, output_dir)reval_voc_py3.py
#!/usr/bin/env python# Adapt from -> # -------------------------------------------------------- # Fast R-CNN # Copyright (c) 2015 Microsoft # Licensed under The MIT License [see LICENSE for details] # Written by Ross Girshick # -------------------------------------------------------- # <- Written by Yaping Sun"""Reval = re-eval. Re-evaluate saved detections."""import os, sys, argparse import numpy as np import _pickle as cPickle #import cPicklefrom voc_eval_py3 import voc_evaldef parse_args():"""Parse input arguments"""parser = argparse.ArgumentParser(description='Re-evaluate results')parser.add_argument('output_dir', nargs=1, help='results directory',type=str)parser.add_argument('--voc_dir', dest='voc_dir', default='data/VOCdevkit', type=str)parser.add_argument('--year', dest='year', default='2017', type=str)parser.add_argument('--image_set', dest='image_set', default='test', type=str)parser.add_argument('--classes', dest='class_file', default='data/voc.names', type=str)if len(sys.argv) == 1:parser.print_help()sys.exit(1)args = parser.parse_args()return argsdef get_voc_results_file_template(image_set, out_dir = 'results'):filename = 'comp4_det_' + image_set + '_{:s}.txt'path = os.path.join(out_dir, filename)return pathdef do_python_eval(devkit_path, year, image_set, classes, output_dir = 'results'):annopath = os.path.join(devkit_path,'VOC' + year,'Annotations','{}.xml')imagesetfile = os.path.join(devkit_path,'VOC' + year,'ImageSets','Main',image_set + '.txt')cachedir = os.path.join(devkit_path, 'annotations_cache')aps = []# The PASCAL VOC metric changed in 2010use_07_metric = True if int(year) < 2010 else Falseprint('VOC07 metric? ' + ('Yes' if use_07_metric else 'No'))print('devkit_path=',devkit_path,', year = ',year)if not os.path.isdir(output_dir):os.mkdir(output_dir)for i, cls in enumerate(classes):if cls == '__background__':continuefilename = get_voc_results_file_template(image_set).format(cls)rec, prec, ap = voc_eval(filename, annopath, imagesetfile, cls, cachedir, ovthresh=0.5,use_07_metric=use_07_metric)aps += [ap]print('AP for {} = {:.4f}'.format(cls, ap))with open(os.path.join(output_dir, cls + '_pr.pkl'), 'wb') as f:cPickle.dump({'rec': rec, 'prec': prec, 'ap': ap}, f)print('Mean AP = {:.4f}'.format(np.mean(aps)))print('~~~~~~~~')print('Results:')for ap in aps:print('{:.3f}'.format(ap))print('{:.3f}'.format(np.mean(aps)))print('~~~~~~~~')print('')print('--------------------------------------------------------------')print('Results computed with the **unofficial** Python eval code.')print('Results should be very close to the official MATLAB eval code.')print('-- Thanks, The Management')print('--------------------------------------------------------------')if __name__ == '__main__':args = parse_args()output_dir = os.path.abspath(args.output_dir[0])with open(args.class_file, 'r') as f:lines = f.readlines()classes = [t.strip('\n') for t in lines]print('Evaluating detections')do_python_eval(args.voc_dir, args.year, args.image_set, classes, output_dir)總結(jié)
以上是生活随笔為你收集整理的yolo模型(四)绘制PR曲线所用到的reval_voc_py.py代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HTML5+CSS3+JQuery打造自
- 下一篇: python 破解字体反爬 (二)