lkllkl's picture
Upload folder using huggingface_hub
da2e2ac verified
raw
history blame
8.54 kB
import logging
import os
import pickle
import numpy as np
import torch
logger = logging.getLogger(__name__)
"""
pkl -> search params and calculation process
"""
# pkl_path = '/mnt/g/navsim_vis/subscores/hydra_vitl_subscores.pkl'
pkl_path = '/mnt/g/navsim_vis/subscores/dreamer_wm_2sec.pkl'
valid_k_path = '/mnt/g/navsim_vis/subscores/dreamer_wm_2sec.pkl'
def main() -> None:
valid_keys = set(pickle.load(open(valid_k_path, 'rb')).keys())
merged_predictions = pickle.load(open(pkl_path, 'rb'))
navtest_scores = pickle.load(
open(f'/mnt/g/navsim/traj_pdm/vocab_score_full_8192_navtest/navtest.pkl', 'rb')
)
navtest_scores = {key: value for key, value in navtest_scores.items() if key in valid_keys}
# temporary
imi_weights = [0.01]
noc_weights = [0.1]
da_weights = [0.5]
tpc_weights = [3.0]
ttc_weights = [5.0]
progress_weights = [5.0]
comfort_weights = [2.0]
print(
f'Search space: {len(imi_weights) * len(noc_weights) * len(da_weights) * len(tpc_weights) * len(ttc_weights) * len(progress_weights) * len(comfort_weights)}')
(imi_preds,
noc_preds,
da_preds,
dd_preds,
ttc_preds,
progress_preds,
comfort_preds) = ([], [],
[], [],
[], [],
[])
pdm_scores, noc_scores, da_scores, dd_scores, ttc_scores, progress_scores, comfort_scores = (
[], [], [], [], [], [], [])
total_scene_cnt = len(navtest_scores)
print(f'total_scene_cnt: {total_scene_cnt}')
for k, v in navtest_scores.items():
pdm_scores.append(torch.from_numpy(v['total'][None]).cuda())
noc_scores.append(torch.from_numpy(v['noc'][None]).cuda())
da_scores.append(torch.from_numpy(v['da'][None]).cuda())
dd_scores.append(torch.from_numpy(v['dd'][None]).cuda())
ttc_scores.append(torch.from_numpy(v['ttc'][None]).cuda())
progress_scores.append(torch.from_numpy(v['progress'][None]).cuda())
comfort_scores.append(torch.from_numpy(v['comfort'][None]).cuda())
imi_preds.append(torch.from_numpy(merged_predictions[k]['imi'][None]).cuda())
noc_preds.append(torch.from_numpy(merged_predictions[k]['noc'][None]).cuda())
da_preds.append(torch.from_numpy(merged_predictions[k]['da'][None]).cuda())
ttc_preds.append(torch.from_numpy(merged_predictions[k]['ttc'][None]).cuda())
progress_preds.append(torch.from_numpy(merged_predictions[k]['progress'][None]).cuda())
comfort_preds.append(torch.from_numpy(merged_predictions[k]['comfort'][None]).cuda())
pdm_scores = torch.cat(pdm_scores, 0).contiguous()
noc_scores = torch.cat(noc_scores, 0).contiguous()
da_scores = torch.cat(da_scores, 0).contiguous()
dd_scores = torch.cat(dd_scores, 0).contiguous()
ttc_scores = torch.cat(ttc_scores, 0).contiguous()
progress_scores = torch.cat(progress_scores, 0).contiguous()
comfort_scores = torch.cat(comfort_scores, 0).contiguous()
imi_preds = torch.cat(imi_preds, 0).contiguous()
noc_preds = torch.cat(noc_preds, 0).contiguous()
da_preds = torch.cat(da_preds, 0).contiguous()
ttc_preds = torch.cat(ttc_preds, 0).contiguous()
progress_preds = torch.cat(progress_preds, 0).contiguous()
comfort_preds = torch.cat(comfort_preds, 0).contiguous()
rows = []
highest_info = {
'score': -100,
}
for imi_weight in imi_weights:
for noc_weight in noc_weights:
for da_weight in da_weights:
for ttc_weight in ttc_weights:
for comfort_weight in comfort_weights:
for progress_weight in progress_weights:
for tpc_weight in tpc_weights:
# old
scores = (
imi_weight * imi_preds +
noc_weight * noc_preds +
da_weight * da_preds +
tpc_weight * (
ttc_weight * torch.exp(ttc_preds) +
comfort_weight * torch.exp(comfort_preds) +
progress_weight * torch.exp(progress_preds)
).log()
)
chosen_idx = scores.argmax(-1)
scene_cnt_tensor = torch.arange(total_scene_cnt, device=pdm_scores.device)
pdm_score = pdm_scores[
scene_cnt_tensor,
chosen_idx
]
noc_score = noc_scores[
scene_cnt_tensor,
chosen_idx
]
da_score = da_scores[
scene_cnt_tensor,
chosen_idx
]
dd_score = dd_scores[
scene_cnt_tensor,
chosen_idx
]
ttc_score = ttc_scores[
scene_cnt_tensor,
chosen_idx
]
progress_score = progress_scores[
scene_cnt_tensor,
chosen_idx
]
comfort_score = comfort_scores[
scene_cnt_tensor,
chosen_idx
]
pdm_score = pdm_score.mean().item()
noc_score = noc_score.float().mean().item()
da_score = da_score.float().mean().item()
dd_score = dd_score.float().mean().item()
ttc_score = ttc_score.float().mean().item()
progress_score = progress_score.float().mean().item()
comfort_score = comfort_score.float().mean().item()
row = {
'imi_weight': imi_weight,
'noc_weight': noc_weight,
'da_weight': da_weight,
'ttc_weight': ttc_weight,
'progress_weight': progress_weight,
'comfort_weight': comfort_weight,
'tpc_weight': tpc_weight,
'overall_score': pdm_score
}
if pdm_score > highest_info['score']:
highest_info['score'] = pdm_score
highest_info['noc'] = noc_score
highest_info['da'] = da_score
highest_info['dd'] = dd_score
highest_info['ttc'] = ttc_score
highest_info['progress'] = progress_score
highest_info['comfort'] = comfort_score
highest_info['imi_weight'] = imi_weight
highest_info['noc_weight'] = noc_weight
highest_info['da_weight'] = da_weight
highest_info['ttc_weight'] = ttc_weight
highest_info['progress_weight'] = progress_weight
highest_info['comfort_weight'] = comfort_weight
highest_info['tpc_weight'] = tpc_weight
print(f'Done: {len(rows)}. score: {pdm_score}')
rows.append(row)
# save rows
# pdm_score_df = pd.DataFrame(rows)
# pdm_score_df.to_csv(Path(csv_path))
for k, v in highest_info.items():
print(k, v)
if __name__ == "__main__":
with torch.no_grad():
main()