mirror of
https://github.com/pjreddie/darknet.git
synced 2023-08-10 21:13:14 +03:00
Added compute_mAP.cmd for calculation mAP for Pascal VOC 2007 dataset.
Added reval_voc_py3.py and voc_eval_py3.py for Python3.
This commit is contained in:
104
scripts/reval_voc_py3.py
Normal file
104
scripts/reval_voc_py3.py
Normal file
@ -0,0 +1,104 @@
|
||||
#!/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 cPickle
|
||||
|
||||
from voc_eval_py3 import voc_eval
|
||||
|
||||
def 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 args
|
||||
|
||||
def 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 path
|
||||
|
||||
def 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 2010
|
||||
use_07_metric = True if int(year) < 2010 else False
|
||||
print('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__':
|
||||
continue
|
||||
filename = 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)
|
Reference in New Issue
Block a user