benchmark multiple scenes in one go

This commit is contained in:
Christian Forster
2014-04-09 20:09:01 +02:00
parent 0137f64c22
commit 8be2d1cb35
2 changed files with 66 additions and 56 deletions
+7
View File
@@ -0,0 +1,7 @@
experiment_label: 'svo fast'
param_settings: vo_fast
datasets:
- 1404091756_fr1_straight
- 1404091807_fr1_straight_rot
- 1404091819_fr1_sine_2d
- 1404091831_fr1_sine_3d
+59 -56
View File
@@ -14,67 +14,70 @@ import vikit_py.cpu_info as cpu_info
import vikit_py.ros_node as ros_node import vikit_py.ros_node as ros_node
import evaluate import evaluate
def run_experiment(dataset, params):
# load dataset parameters
params['dataset_directory'] = os.path.join(os.environ['SVO_DATASET_DIR'], dataset)
if not os.path.exists(params['dataset_directory']):
raise Exception("Provided dataset folder does not exist.")
dataset_params_file = os.path.join(params['dataset_directory'], 'dataset_params.yaml')
dataset_params = yaml.load(open(dataset_params_file,'r'))
# load algorithm parameters
algo_params_file = os.path.join(rospkg.RosPack().get_path('svo_ros'),
'param', params['param_settings']+'.yaml')
algo_params = yaml.load(open(algo_params_file,'r'))
# combine all parameters
params = dict(params.items() + algo_params.items() + dataset_params['rig']['cam0'].items())
# dump experiment params to file:
params_dump_file = params['trace_dir']+'/params.yaml'
with open(params_dump_file,'w') as outfile:
outfile.write(yaml.dump(params, default_flow_style=False))
# execute ros node
node = ros_node.RosNode(args.version, args.executable)
node.run(params)
if __name__=="__main__": if __name__=="__main__":
# parse command line # parse command line
parser = argparse.ArgumentParser(description=''' parser = argparse.ArgumentParser(description='''
Runs SVO with the dataset and parameters specified in the provided experiment file. Runs SVO with the dataset and parameters specified in the provided experiment file.
''') ''')
parser.add_argument('experiment_file', help='experiment file in svo_analysis/experiments folder') parser.add_argument('experiment_file', help='experiment file in svo_analysis/experiments folder')
parser.add_argument('--name', help='experiment name') parser.add_argument('--evaluate', help='evaluate tracefile after running SVO', action='store_true')
parser.add_argument('--evaluate', help='evaluate tracefile after running SVO', action='store_true') parser.add_argument('--version', help='version of svo to evaluate', default='svo_ros')
parser.add_argument('--version', help='version of svo to evaluate', default='svo_ros') parser.add_argument('--executable', help='the executable to be called', default='benchmark')
parser.add_argument('--executable', help='the executable to be called', default='benchmark') args = parser.parse_args()
args = parser.parse_args()
# load experiment parameters
# load experiment parameters experiment_params_file = os.path.join(rospkg.RosPack().get_path('svo_analysis'),
expParamsFile = os.path.join(rospkg.RosPack().get_path('svo_analysis'),
'experiments', args.experiment_file+'.yaml') 'experiments', args.experiment_file+'.yaml')
expParams = yaml.load(open(expParamsFile, 'r')) experiment_params = yaml.load(open(experiment_params_file, 'r'))
expParams['time'] = time.strftime("%Y%m%d_%H%M", time.localtime()) params = dict()
expParams['platform'] = cpu_info.get_cpu_info() params['experiment_label'] = experiment_params['experiment_label']
expParams['experiment_name'] = args.name params['param_settings'] = experiment_params['param_settings']
if(expParams['experiment_name'] == None): params['time'] = time.strftime("%Y%m%d_%H%M", time.localtime())
expParams['experiment_name'] = expParams['time']+'_'+args.version+'_' + args.experiment_file params['platform'] = cpu_info.get_cpu_info()
params['trace_name'] = 'trace'
# load dataset parameters
expParams['dataset_directory'] = os.path.join(os.environ['SVO_DATASET_DIR'], expParams['dataset']) trace_dirs = list()
if not os.path.exists(expParams['dataset_directory']): for dataset in experiment_params['datasets']:
raise Exception("Provided dataset folder does not exist.") params['experiment_name'] = params['time']+'_'+args.version+'_'+args.experiment_file+'_'+dataset
datasetParamsFile = os.path.join(expParams['dataset_directory'], 'dataset_params.yaml') params['trace_dir'] = os.path.join(rospkg.RosPack().get_path('svo_analysis'),
datasetParams = yaml.load(open(datasetParamsFile,'r')) 'results', params['experiment_name'])
if not os.path.exists(params['trace_dir']):
# load algorithm parameters os.makedirs(params['trace_dir'])
algoParamsFile = os.path.join(rospkg.RosPack().get_path('svo_ros'), trace_dirs.append(params['trace_dir'])
'param', expParams['param_settings']+'.yaml') run_experiment(dataset, params)
algoParams = yaml.load(open(algoParamsFile,'r'))
# TODO: check if it is a synthetic dataset
# combine all parameters for trace in trace_dirs:
params = dict(expParams.items() + datasetParams.items() + datasetParams['rig']['cam0'].items() + algoParams.items()) evaluate.evaluate_dataset(trace)
params['trace_name'] = 'trace'
params['trace_dir'] = os.path.join(rospkg.RosPack().get_path('svo_analysis'),
'results', params['experiment_name'])
# create folder for tracing
if not os.path.exists(params['trace_dir']):
os.makedirs(params['trace_dir'])
# dump experiment params to file:
params_dump_file = params['trace_dir']+'/params.yaml'
with open(params_dump_file,'w') as outfile:
outfile.write(yaml.dump(params, default_flow_style=False))
# execute ros node
node = ros_node.RosNode(args.version, args.executable)
node.run(params)
# TODO: check if it is a synthetic dataset
evaluate.evaluate_dataset(params['trace_dir'])