-
Notifications
You must be signed in to change notification settings - Fork 0
/
eval_carrada_oi.py
93 lines (75 loc) · 3.36 KB
/
eval_carrada_oi.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import argparse
import yaml
import os
import torch
from torch.utils.data import DataLoader, ConcatDataset
import pytorch_lightning as pl
from utils.args import parse_configs, update_config_dict
from datasets.carrada.dataset import Carrada
from datasets.carrada.dataloaders import SequenceCarradaDataset, CarradaDataset
from pytorch_lightning.loggers import TensorBoardLogger
from utils.models_utils import get_models
def parse_args():
parser = argparse.ArgumentParser(description='MV-RECORD-OI - Evaluate model')
parser.add_argument('--config', required=True, type=str, help='configuration file path')
parser.add_argument('--log_dir', required=True, type=str, help='Log directory (e.g. ./logs/)')
parser.add_argument('--version', required=True, type=str, help='Version of the run to evaluate')
parser.add_argument('--ckpt', required=True, type=str, help='Ckpt to resume the training')
parser = parse_configs(parser)
args = parser.parse_args()
return args
args = parse_args()
config_dict = yaml.load(open(args.config, 'r'), Loader=yaml.FullLoader)
config_dict = update_config_dict(config_dict, args)
model_cfg = config_dict['model_cfg']
train_cfg = config_dict['train_cfg']
dataset_cfg = config_dict['dataset_cfg']
n_frames = model_cfg['win_size']
# Load model
nb_classes = config_dict['model_cfg']['nb_classes']
# Load model
model_instance = get_models(model_cfg)
model_name = model_cfg['name']
log_dir = args.log_dir
name = model_name
version = args.version
ckpt_path = args.ckpt
logger = TensorBoardLogger(save_dir=log_dir, name=name, version=version, default_hp_metric=False)
# Load Pytorch Lightning models
if model_name == 'MV-RECORD-OI':
from executors import MVRECORDOIExecutor as Model
model = Model(config_dict, model=model_instance)
metric_to_monitor = 'val_metrics/global_prec'
elif model_name in ('RECORD-RD-OI', 'RECORD-RA-OI'):
from executors import SVRECORDOIExecutor as Model
model = Model(config_dict, model=model_instance, view=model_cfg['view'])
metric_to_monitor = 'val_metrics/rd_prec' if model_cfg['view'] == 'range_doppler' else 'val_metrics/ra_prec'
else:
raise ValueError
if torch.cuda.is_available():
print('CUDA available, use GPU')
accelerator = 'gpu'
else:
print('WARNING: CUDA not available, use CPU')
accelerator = 'cpu'
trainer = pl.Trainer(logger=logger, accelerator=accelerator, devices=1,
max_epochs=config_dict['train_cfg']['n_epoch'])
print("Start evaluation")
### Test dataset
test_dataset = Carrada(config_dict).get('Test')
seq_dataloader = DataLoader(SequenceCarradaDataset(test_dataset), batch_size=1,
shuffle=False, num_workers=0)
all_datasets = []
for _, data in enumerate(seq_dataloader):
seq_name, seq = data
dataset_pth = config_dict['dataset_cfg']['carrada']
batch_size = config_dict['train_cfg']['batch_size']
path_to_frames = os.path.join(dataset_pth, seq_name[0])
all_datasets.append(CarradaDataset(seq,
'dense',
path_to_frames,
process_signal=True,
n_frames=1, add_temp=False))
test_dataloader = DataLoader(ConcatDataset(all_datasets), batch_size=1,
shuffle=False, num_workers=4)
trainer.test(model, dataloaders=test_dataloader, ckpt_path=ckpt_path)