Unverified Commit 2400fdf2 authored by Martin Hahner's avatar Martin Hahner Committed by GitHub
Browse files

Make browsing TensorBoard easier (#152)

* Make TensorBoard more concise

* Export only metrics using 40 recalll positions
parent f4bd7b0b
...@@ -694,10 +694,10 @@ def get_official_eval_result(gt_annos, dt_annos, current_classes, PR_detail_dict ...@@ -694,10 +694,10 @@ def get_official_eval_result(gt_annos, dt_annos, current_classes, PR_detail_dict
result += print_str((f"aos AP:{mAPaos[j, 0, i]:.2f}, " result += print_str((f"aos AP:{mAPaos[j, 0, i]:.2f}, "
f"{mAPaos[j, 1, i]:.2f}, " f"{mAPaos[j, 1, i]:.2f}, "
f"{mAPaos[j, 2, i]:.2f}")) f"{mAPaos[j, 2, i]:.2f}"))
if i == 0: # if i == 0:
ret_dict['%s_aos_easy' % class_to_name[curcls]] = mAPaos[j, 0, 0] # ret_dict['%s_aos/easy' % class_to_name[curcls]] = mAPaos[j, 0, 0]
ret_dict['%s_aos_moderate' % class_to_name[curcls]] = mAPaos[j, 1, 0] # ret_dict['%s_aos/moderate' % class_to_name[curcls]] = mAPaos[j, 1, 0]
ret_dict['%s_aos_hard' % class_to_name[curcls]] = mAPaos[j, 2, 0] # ret_dict['%s_aos/hard' % class_to_name[curcls]] = mAPaos[j, 2, 0]
result += print_str( result += print_str(
(f"{class_to_name[curcls]} " (f"{class_to_name[curcls]} "
...@@ -716,30 +716,30 @@ def get_official_eval_result(gt_annos, dt_annos, current_classes, PR_detail_dict ...@@ -716,30 +716,30 @@ def get_official_eval_result(gt_annos, dt_annos, current_classes, PR_detail_dict
f"{mAPaos_R40[j, 1, i]:.2f}, " f"{mAPaos_R40[j, 1, i]:.2f}, "
f"{mAPaos_R40[j, 2, i]:.2f}")) f"{mAPaos_R40[j, 2, i]:.2f}"))
if i == 0: if i == 0:
ret_dict['%s_aos_easy_R40' % class_to_name[curcls]] = mAPaos_R40[j, 0, 0] ret_dict['%s_aos/easy_R40' % class_to_name[curcls]] = mAPaos_R40[j, 0, 0]
ret_dict['%s_aos_moderate_R40' % class_to_name[curcls]] = mAPaos_R40[j, 1, 0] ret_dict['%s_aos/moderate_R40' % class_to_name[curcls]] = mAPaos_R40[j, 1, 0]
ret_dict['%s_aos_hard_R40' % class_to_name[curcls]] = mAPaos_R40[j, 2, 0] ret_dict['%s_aos/hard_R40' % class_to_name[curcls]] = mAPaos_R40[j, 2, 0]
if i == 0: if i == 0:
ret_dict['%s_3d_easy' % class_to_name[curcls]] = mAP3d[j, 0, 0] # ret_dict['%s_3d/easy' % class_to_name[curcls]] = mAP3d[j, 0, 0]
ret_dict['%s_3d_moderate' % class_to_name[curcls]] = mAP3d[j, 1, 0] # ret_dict['%s_3d/moderate' % class_to_name[curcls]] = mAP3d[j, 1, 0]
ret_dict['%s_3d_hard' % class_to_name[curcls]] = mAP3d[j, 2, 0] # ret_dict['%s_3d/hard' % class_to_name[curcls]] = mAP3d[j, 2, 0]
ret_dict['%s_bev_easy' % class_to_name[curcls]] = mAPbev[j, 0, 0] # ret_dict['%s_bev/easy' % class_to_name[curcls]] = mAPbev[j, 0, 0]
ret_dict['%s_bev_moderate' % class_to_name[curcls]] = mAPbev[j, 1, 0] # ret_dict['%s_bev/moderate' % class_to_name[curcls]] = mAPbev[j, 1, 0]
ret_dict['%s_bev_hard' % class_to_name[curcls]] = mAPbev[j, 2, 0] # ret_dict['%s_bev/hard' % class_to_name[curcls]] = mAPbev[j, 2, 0]
ret_dict['%s_image_easy' % class_to_name[curcls]] = mAPbbox[j, 0, 0] # ret_dict['%s_image/easy' % class_to_name[curcls]] = mAPbbox[j, 0, 0]
ret_dict['%s_image_moderate' % class_to_name[curcls]] = mAPbbox[j, 1, 0] # ret_dict['%s_image/moderate' % class_to_name[curcls]] = mAPbbox[j, 1, 0]
ret_dict['%s_image_hard' % class_to_name[curcls]] = mAPbbox[j, 2, 0] # ret_dict['%s_image/hard' % class_to_name[curcls]] = mAPbbox[j, 2, 0]
ret_dict['%s_3d_easy_R40' % class_to_name[curcls]] = mAP3d_R40[j, 0, 0] ret_dict['%s_3d/easy_R40' % class_to_name[curcls]] = mAP3d_R40[j, 0, 0]
ret_dict['%s_3d_moderate_R40' % class_to_name[curcls]] = mAP3d_R40[j, 1, 0] ret_dict['%s_3d/moderate_R40' % class_to_name[curcls]] = mAP3d_R40[j, 1, 0]
ret_dict['%s_3d_hard_R40' % class_to_name[curcls]] = mAP3d_R40[j, 2, 0] ret_dict['%s_3d/hard_R40' % class_to_name[curcls]] = mAP3d_R40[j, 2, 0]
ret_dict['%s_bev_easy_R40' % class_to_name[curcls]] = mAPbev_R40[j, 0, 0] ret_dict['%s_bev/easy_R40' % class_to_name[curcls]] = mAPbev_R40[j, 0, 0]
ret_dict['%s_bev_moderate_R40' % class_to_name[curcls]] = mAPbev_R40[j, 1, 0] ret_dict['%s_bev/moderate_R40' % class_to_name[curcls]] = mAPbev_R40[j, 1, 0]
ret_dict['%s_bev_hard_R40' % class_to_name[curcls]] = mAPbev_R40[j, 2, 0] ret_dict['%s_bev/hard_R40' % class_to_name[curcls]] = mAPbev_R40[j, 2, 0]
ret_dict['%s_image_easy_R40' % class_to_name[curcls]] = mAPbbox_R40[j, 0, 0] ret_dict['%s_image/easy_R40' % class_to_name[curcls]] = mAPbbox_R40[j, 0, 0]
ret_dict['%s_image_moderate_R40' % class_to_name[curcls]] = mAPbbox_R40[j, 1, 0] ret_dict['%s_image/moderate_R40' % class_to_name[curcls]] = mAPbbox_R40[j, 1, 0]
ret_dict['%s_image_hard_R40' % class_to_name[curcls]] = mAPbbox_R40[j, 2, 0] ret_dict['%s_image/hard_R40' % class_to_name[curcls]] = mAPbbox_R40[j, 2, 0]
return result, ret_dict return result, ret_dict
......
...@@ -95,8 +95,8 @@ def eval_one_epoch(cfg, model, dataloader, epoch_id, logger, dist_test=False, sa ...@@ -95,8 +95,8 @@ def eval_one_epoch(cfg, model, dataloader, epoch_id, logger, dist_test=False, sa
cur_rcnn_recall = metric['recall_rcnn_%s' % str(cur_thresh)] / max(gt_num_cnt, 1) cur_rcnn_recall = metric['recall_rcnn_%s' % str(cur_thresh)] / max(gt_num_cnt, 1)
logger.info('recall_roi_%s: %f' % (cur_thresh, cur_roi_recall)) logger.info('recall_roi_%s: %f' % (cur_thresh, cur_roi_recall))
logger.info('recall_rcnn_%s: %f' % (cur_thresh, cur_rcnn_recall)) logger.info('recall_rcnn_%s: %f' % (cur_thresh, cur_rcnn_recall))
ret_dict['recall_roi_%s' % str(cur_thresh)] = cur_roi_recall ret_dict['recall/roi_%s' % str(cur_thresh)] = cur_roi_recall
ret_dict['recall_rcnn_%s' % str(cur_thresh)] = cur_rcnn_recall ret_dict['recall/rcnn_%s' % str(cur_thresh)] = cur_rcnn_recall
total_pred_objects = 0 total_pred_objects = 0
for anno in det_annos: for anno in det_annos:
......
...@@ -29,7 +29,7 @@ def train_one_epoch(model, optimizer, train_loader, model_func, lr_scheduler, ac ...@@ -29,7 +29,7 @@ def train_one_epoch(model, optimizer, train_loader, model_func, lr_scheduler, ac
cur_lr = optimizer.param_groups[0]['lr'] cur_lr = optimizer.param_groups[0]['lr']
if tb_log is not None: if tb_log is not None:
tb_log.add_scalar('learning_rate', cur_lr, accumulated_iter) tb_log.add_scalar('meta_data/learning_rate', cur_lr, accumulated_iter)
model.train() model.train()
optimizer.zero_grad() optimizer.zero_grad()
...@@ -51,10 +51,10 @@ def train_one_epoch(model, optimizer, train_loader, model_func, lr_scheduler, ac ...@@ -51,10 +51,10 @@ def train_one_epoch(model, optimizer, train_loader, model_func, lr_scheduler, ac
tbar.refresh() tbar.refresh()
if tb_log is not None: if tb_log is not None:
tb_log.add_scalar('train_loss', loss, accumulated_iter) tb_log.add_scalar('train/loss', loss, accumulated_iter)
tb_log.add_scalar('learning_rate', cur_lr, accumulated_iter) tb_log.add_scalar('meta_data/learning_rate', cur_lr, accumulated_iter)
for key, val in tb_dict.items(): for key, val in tb_dict.items():
tb_log.add_scalar('train_' + key, val, accumulated_iter) tb_log.add_scalar('train/' + key, val, accumulated_iter)
if rank == 0: if rank == 0:
pbar.close() pbar.close()
return accumulated_iter return accumulated_iter
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment