# Copyright (c) OpenMMLab. All rights reserved. from torch.nn.modules.conv import Conv1d from mmdet3d.models.backbones.pointnet2_sa_ssg import PointNet2SASSG from mmdet3d.models.data_preprocessors.data_preprocessor import \ Det3DDataPreprocessor from mmdet3d.models.dense_heads.vote_head import VoteHead from mmdet3d.models.detectors.votenet import VoteNet from mmdet3d.models.losses.chamfer_distance import ChamferDistance model = dict( type=VoteNet, data_preprocessor=dict(type=Det3DDataPreprocessor), backbone=dict( type=PointNet2SASSG, in_channels=4, num_points=(2048, 1024, 512, 256), radius=(0.2, 0.4, 0.8, 1.2), num_samples=(64, 32, 16, 16), sa_channels=((64, 64, 128), (128, 128, 256), (128, 128, 256), (128, 128, 256)), fp_channels=((256, 256), (256, 256)), norm_cfg=dict(type='BN2d'), sa_cfg=dict( type='PointSAModule', pool_mod='max', use_xyz=True, normalize_xyz=True)), bbox_head=dict( type=VoteHead, vote_module_cfg=dict( in_channels=256, vote_per_seed=1, gt_per_seed=3, conv_channels=(256, 256), conv_cfg=dict(type=Conv1d), norm_cfg=dict(type='BN1d'), norm_feats=True, vote_loss=dict( type=ChamferDistance, mode='l1', reduction='none', loss_dst_weight=10.0)), vote_aggregation_cfg=dict( type='PointSAModule', num_point=256, radius=0.3, num_sample=16, mlp_channels=[256, 128, 128, 128], use_xyz=True, normalize_xyz=True), pred_layer_cfg=dict( in_channels=128, shared_conv_channels=(128, 128), bias=True), objectness_loss=dict( type='mmdet.CrossEntropyLoss', class_weight=[0.2, 0.8], reduction='sum', loss_weight=5.0), center_loss=dict( type=ChamferDistance, mode='l2', reduction='sum', loss_src_weight=10.0, loss_dst_weight=10.0), dir_class_loss=dict( type='mmdet.CrossEntropyLoss', reduction='sum', loss_weight=1.0), dir_res_loss=dict( type='mmdet.SmoothL1Loss', reduction='sum', loss_weight=10.0), size_class_loss=dict( type='mmdet.CrossEntropyLoss', reduction='sum', loss_weight=1.0), size_res_loss=dict( type='mmdet.SmoothL1Loss', reduction='sum', loss_weight=10.0 / 3.0), semantic_loss=dict( type='mmdet.CrossEntropyLoss', reduction='sum', loss_weight=1.0)), # model training and testing settings train_cfg=dict( pos_distance_thr=0.3, neg_distance_thr=0.6, sample_mode='vote'), test_cfg=dict( sample_mode='seed', nms_thr=0.25, score_thr=0.05, per_class_proposal=True))