Skip to content

Commit

Permalink
Merge branch 'master' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
sshaoshuai committed Jul 17, 2020
2 parents f4bd7b0 + 9f5d201 commit 6f9d92b
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 34 deletions.
52 changes: 26 additions & 26 deletions pcdet/datasets/kitti/kitti_object_eval_python/eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}, "
f"{mAPaos[j, 1, i]:.2f}, "
f"{mAPaos[j, 2, i]:.2f}"))
if i == 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_hard' % class_to_name[curcls]] = mAPaos[j, 2, 0]
# if i == 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/hard' % class_to_name[curcls]] = mAPaos[j, 2, 0]

result += print_str(
(f"{class_to_name[curcls]} "
Expand All @@ -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, 2, i]:.2f}"))
if i == 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_hard_R40' % class_to_name[curcls]] = mAPaos_R40[j, 2, 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/hard_R40' % class_to_name[curcls]] = mAPaos_R40[j, 2, 0]

if i == 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_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_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_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_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_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_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_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_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_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/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/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_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/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/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_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/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/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]

return result, ret_dict

Expand Down
6 changes: 4 additions & 2 deletions pcdet/models/dense_heads/anchor_head_multi.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from ..backbones_2d import BaseBEVBackbone
import torch


class SingleHead(BaseBEVBackbone):
def __init__(self, model_cfg, input_channels, num_class, num_anchors_per_location, code_size, encode_conv_cfg=None):
super().__init__(encode_conv_cfg, input_channels)
Expand Down Expand Up @@ -75,14 +76,14 @@ def forward(self, spatial_features_2d):

return ret_dict


class AnchorHeadMulti(AnchorHeadTemplate):
def __init__(self, model_cfg, input_channels, num_class, class_names, grid_size, point_cloud_range, predict_boxes_when_training=True):
super().__init__(
model_cfg=model_cfg, num_class=num_class, class_names=class_names, grid_size=grid_size, point_cloud_range=point_cloud_range, predict_boxes_when_training=predict_boxes_when_training
)
self.model_cfg = model_cfg
self.make_multihead(input_channels)


def make_multihead(self, input_channels):
rpn_head_cfgs = self.model_cfg.RPN_HEAD_CFGS
Expand Down Expand Up @@ -123,7 +124,8 @@ def forward(self, data_dict):
gt_boxes=data_dict['gt_boxes']
)
self.forward_ret_dict.update(targets_dict)
else:

if not self.training or self.predict_boxes_when_training:
batch_cls_preds, batch_box_preds = self.generate_predicted_boxes(
batch_size=data_dict['batch_size'],
cls_preds=cls_preds, box_preds=box_preds, dir_cls_preds=dir_cls_preds
Expand Down
1 change: 1 addition & 0 deletions pcdet/models/roi_heads/roi_head_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def make_fc_layers(self, input_channels, output_channels, fc_list):
fc_layers = nn.Sequential(*fc_layers)
return fc_layers

@torch.no_grad()
def proposal_layer(self, batch_dict, nms_config):
"""
Args:
Expand Down
4 changes: 2 additions & 2 deletions tools/eval_utils/eval_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
logger.info('recall_roi_%s: %f' % (cur_thresh, cur_roi_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_rcnn_%s' % str(cur_thresh)] = cur_rcnn_recall
ret_dict['recall/roi_%s' % str(cur_thresh)] = cur_roi_recall
ret_dict['recall/rcnn_%s' % str(cur_thresh)] = cur_rcnn_recall

total_pred_objects = 0
for anno in det_annos:
Expand Down
8 changes: 4 additions & 4 deletions tools/train_utils/train_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def train_one_epoch(model, optimizer, train_loader, model_func, lr_scheduler, ac
cur_lr = optimizer.param_groups[0]['lr']

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()
optimizer.zero_grad()
Expand All @@ -51,10 +51,10 @@ def train_one_epoch(model, optimizer, train_loader, model_func, lr_scheduler, ac
tbar.refresh()

if tb_log is not None:
tb_log.add_scalar('train_loss', loss, accumulated_iter)
tb_log.add_scalar('learning_rate', cur_lr, accumulated_iter)
tb_log.add_scalar('train/loss', loss, accumulated_iter)
tb_log.add_scalar('meta_data/learning_rate', cur_lr, accumulated_iter)
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:
pbar.close()
return accumulated_iter
Expand Down

0 comments on commit 6f9d92b

Please sign in to comment.