diff --git a/configs/3dssd/3dssd_kitti-3d-car.py b/configs/3dssd/3dssd_kitti-3d-car.py index 1b5e205e3b..62f3f744cb 100644 --- a/configs/3dssd/3dssd_kitti-3d-car.py +++ b/configs/3dssd/3dssd_kitti-3d-car.py @@ -108,7 +108,7 @@ optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) lr_config = dict(policy='step', warmup=None, step=[80, 120]) # runtime settings -runner = dict(max_epochs=150) +runner = dict(type='EpochBasedRunner', max_epochs=150) # yapf:disable log_config = dict( diff --git a/configs/_base_/models/3dssd.py b/configs/_base_/models/3dssd.py index 325cbe522c..55344c7ddf 100644 --- a/configs/_base_/models/3dssd.py +++ b/configs/_base_/models/3dssd.py @@ -75,13 +75,3 @@ score_thr=0.0, per_class_proposal=True, max_output_num=100)) - -# optimizer -# This schedule is mainly used by models on indoor dataset, -# e.g., VoteNet on SUNRGBD and ScanNet -lr = 0.002 # max learning rate -optimizer = dict(type='AdamW', lr=lr, weight_decay=0) -optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) -lr_config = dict(policy='step', warmup=None, step=[80, 120]) -# runtime settings -runner = dict(max_epochs=150) diff --git a/configs/_base_/models/hv_pointpillars_secfpn_kitti.py b/configs/_base_/models/hv_pointpillars_secfpn_kitti.py index 824ac53c7f..85076d0798 100644 --- a/configs/_base_/models/hv_pointpillars_secfpn_kitti.py +++ b/configs/_base_/models/hv_pointpillars_secfpn_kitti.py @@ -1,11 +1,13 @@ voxel_size = [0.16, 0.16, 4] + model = dict( type='VoxelNet', voxel_layer=dict( - max_num_points=32, + max_num_points=32, # max_points_per_voxel point_cloud_range=[0, -39.68, -3, 69.12, 39.68, 1], voxel_size=voxel_size, - max_voxels=(16000, 40000)), + max_voxels=(16000, 40000) # (training, testing) max_voxels + ), voxel_encoder=dict( type='PillarFeatureNet', in_channels=4, diff --git a/configs/_base_/models/hv_second_secfpn_kitti.py b/configs/_base_/models/hv_second_secfpn_kitti.py index 2da46496c1..6bf18abe1d 100644 --- a/configs/_base_/models/hv_second_secfpn_kitti.py +++ b/configs/_base_/models/hv_second_secfpn_kitti.py @@ -1,9 +1,11 @@ +voxel_size = [0.05, 0.05, 0.1] + model = dict( type='VoxelNet', voxel_layer=dict( max_num_points=5, point_cloud_range=[0, -40, -3, 70.4, 40, 1], - voxel_size=[0.05, 0.05, 0.1], + voxel_size=voxel_size, max_voxels=(16000, 40000)), voxel_encoder=dict(type='HardSimpleVFE'), middle_encoder=dict( diff --git a/configs/_base_/models/parta2.py b/configs/_base_/models/parta2.py new file mode 100644 index 0000000000..6c5ae9a663 --- /dev/null +++ b/configs/_base_/models/parta2.py @@ -0,0 +1,201 @@ +# model settings +voxel_size = [0.05, 0.05, 0.1] +point_cloud_range = [0, -40, -3, 70.4, 40, 1] + +model = dict( + type='PartA2', + voxel_layer=dict( + max_num_points=5, # max_points_per_voxel + point_cloud_range=point_cloud_range, + voxel_size=voxel_size, + max_voxels=(16000, 40000) # (training, testing) max_voxels + ), + voxel_encoder=dict(type='HardSimpleVFE'), + middle_encoder=dict( + type='SparseUNet', + in_channels=4, + sparse_shape=[41, 1600, 1408], + order=('conv', 'norm', 'act')), + backbone=dict( + type='SECOND', + in_channels=256, + layer_nums=[5, 5], + layer_strides=[1, 2], + out_channels=[128, 256]), + neck=dict( + type='SECONDFPN', + in_channels=[128, 256], + upsample_strides=[1, 2], + out_channels=[256, 256]), + rpn_head=dict( + type='PartA2RPNHead', + num_classes=3, + in_channels=512, + feat_channels=512, + use_direction_classifier=True, + anchor_generator=dict( + type='Anchor3DRangeGenerator', + ranges=[[0, -40.0, -0.6, 70.4, 40.0, -0.6], + [0, -40.0, -0.6, 70.4, 40.0, -0.6], + [0, -40.0, -1.78, 70.4, 40.0, -1.78]], + sizes=[[0.6, 0.8, 1.73], [0.6, 1.76, 1.73], [1.6, 3.9, 1.56]], + rotations=[0, 1.57], + reshape_out=False), + diff_rad_by_sin=True, + assigner_per_size=True, + assign_per_class=True, + bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder'), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=2.0), + loss_dir=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.2)), + roi_head=dict( + type='PartAggregationROIHead', + num_classes=3, + semantic_head=dict( + type='PointwiseSemanticHead', + in_channels=16, + extra_width=0.2, + seg_score_thr=0.3, + num_classes=3, + loss_seg=dict( + type='FocalLoss', + use_sigmoid=True, + reduction='sum', + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_part=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)), + seg_roi_extractor=dict( + type='Single3DRoIAwareExtractor', + roi_layer=dict( + type='RoIAwarePool3d', + out_size=14, + max_pts_per_voxel=128, + mode='max')), + part_roi_extractor=dict( + type='Single3DRoIAwareExtractor', + roi_layer=dict( + type='RoIAwarePool3d', + out_size=14, + max_pts_per_voxel=128, + mode='avg')), + bbox_head=dict( + type='PartA2BboxHead', + num_classes=3, + seg_in_channels=16, + part_in_channels=4, + seg_conv_channels=[64, 64], + part_conv_channels=[64, 64], + merge_conv_channels=[128, 128], + down_conv_channels=[128, 256], + bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder'), + shared_fc_channels=[256, 512, 512, 512], + cls_channels=[256, 256], + reg_channels=[256, 256], + dropout_ratio=0.1, + roi_feat_size=14, + with_corner_loss=True, + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0 / 9.0, + reduction='sum', + loss_weight=1.0), + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + reduction='sum', + loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=[ + dict( # for Pedestrian + type='MaxIoUAssigner', + iou_calculator=dict(type='BboxOverlapsNearest3D'), + pos_iou_thr=0.5, + neg_iou_thr=0.35, + min_pos_iou=0.35, + ignore_iof_thr=-1), + dict( # for Cyclist + type='MaxIoUAssigner', + iou_calculator=dict(type='BboxOverlapsNearest3D'), + pos_iou_thr=0.5, + neg_iou_thr=0.35, + min_pos_iou=0.35, + ignore_iof_thr=-1), + dict( # for Car + type='MaxIoUAssigner', + iou_calculator=dict(type='BboxOverlapsNearest3D'), + pos_iou_thr=0.6, + neg_iou_thr=0.45, + min_pos_iou=0.45, + ignore_iof_thr=-1) + ], + allowed_border=0, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_pre=9000, + nms_post=512, + max_num=512, + nms_thr=0.8, + score_thr=0, + use_rotate_nms=False), + rcnn=dict( + assigner=[ + dict( # for Pedestrian + type='MaxIoUAssigner', + iou_calculator=dict( + type='BboxOverlaps3D', coordinate='lidar'), + pos_iou_thr=0.55, + neg_iou_thr=0.55, + min_pos_iou=0.55, + ignore_iof_thr=-1), + dict( # for Cyclist + type='MaxIoUAssigner', + iou_calculator=dict( + type='BboxOverlaps3D', coordinate='lidar'), + pos_iou_thr=0.55, + neg_iou_thr=0.55, + min_pos_iou=0.55, + ignore_iof_thr=-1), + dict( # for Car + type='MaxIoUAssigner', + iou_calculator=dict( + type='BboxOverlaps3D', coordinate='lidar'), + pos_iou_thr=0.55, + neg_iou_thr=0.55, + min_pos_iou=0.55, + ignore_iof_thr=-1) + ], + sampler=dict( + type='IoUNegPiecewiseSampler', + num=128, + pos_fraction=0.55, + neg_piece_fractions=[0.8, 0.2], + neg_iou_piece_thrs=[0.55, 0.1], + neg_pos_ub=-1, + add_gt_as_proposals=False, + return_iou=True), + cls_pos_thr=0.75, + cls_neg_thr=0.25)), + test_cfg=dict( + rpn=dict( + nms_pre=1024, + nms_post=100, + max_num=100, + nms_thr=0.7, + score_thr=0, + use_rotate_nms=True), + rcnn=dict( + use_rotate_nms=True, + use_raw_score=True, + nms_thr=0.01, + score_thr=0.1))) diff --git a/configs/_base_/schedules/cosine.py b/configs/_base_/schedules/cosine.py new file mode 100644 index 0000000000..69cb7df87d --- /dev/null +++ b/configs/_base_/schedules/cosine.py @@ -0,0 +1,20 @@ +# This schedule is mainly used by models with dynamic voxelization +# optimizer +lr = 0.003 # max learning rate +optimizer = dict( + type='AdamW', + lr=lr, + betas=(0.95, 0.99), # the momentum is change during training + weight_decay=0.001) +optimizer_config = dict(grad_clip=dict(max_norm=10, norm_type=2)) + +lr_config = dict( + policy='CosineAnnealing', + warmup='linear', + warmup_iters=1000, + warmup_ratio=1.0 / 10, + min_lr_ratio=1e-5) + +momentum_config = None + +runner = dict(type='EpochBasedRunner', max_epochs=40) diff --git a/configs/benchmark/hv_PartA2_secfpn_4x8_cyclic_80e_pcdet_kitti-3d-3class.py b/configs/benchmark/hv_PartA2_secfpn_4x8_cyclic_80e_pcdet_kitti-3d-3class.py index c390a05f24..19862097a3 100644 --- a/configs/benchmark/hv_PartA2_secfpn_4x8_cyclic_80e_pcdet_kitti-3d-3class.py +++ b/configs/benchmark/hv_PartA2_secfpn_4x8_cyclic_80e_pcdet_kitti-3d-3class.py @@ -322,7 +322,7 @@ ]) # yapf:enable # runtime settings -runner = dict(max_epochs=80) +runner = dict(type='EpochBasedRunner', max_epochs=80) dist_params = dict(backend='nccl', port=29506) log_level = 'INFO' find_unused_parameters = True diff --git a/configs/benchmark/hv_pointpillars_secfpn_3x8_100e_det3d_kitti-3d-car.py b/configs/benchmark/hv_pointpillars_secfpn_3x8_100e_det3d_kitti-3d-car.py index 554bd5d275..26601c2928 100644 --- a/configs/benchmark/hv_pointpillars_secfpn_3x8_100e_det3d_kitti-3d-car.py +++ b/configs/benchmark/hv_pointpillars_secfpn_3x8_100e_det3d_kitti-3d-car.py @@ -192,7 +192,7 @@ ]) # yapf:enable # runtime settings -runner = dict(max_epochs=50) +runner = dict(type='EpochBasedRunner', max_epochs=50) dist_params = dict(backend='nccl') log_level = 'INFO' work_dir = './work_dirs/pp_secfpn_100e' diff --git a/configs/benchmark/hv_pointpillars_secfpn_4x8_80e_pcdet_kitti-3d-3class.py b/configs/benchmark/hv_pointpillars_secfpn_4x8_80e_pcdet_kitti-3d-3class.py index 4c4617437b..76ddd69a06 100644 --- a/configs/benchmark/hv_pointpillars_secfpn_4x8_80e_pcdet_kitti-3d-3class.py +++ b/configs/benchmark/hv_pointpillars_secfpn_4x8_80e_pcdet_kitti-3d-3class.py @@ -235,7 +235,7 @@ ]) # yapf:enable # runtime settings -runner = dict(max_epochs=80) +runner = dict(type='EpochBasedRunner', max_epochs=80) dist_params = dict(backend='nccl') log_level = 'INFO' work_dir = './work_dirs/pp_secfpn_80e' diff --git a/configs/benchmark/hv_second_secfpn_4x8_80e_pcdet_kitti-3d-3class.py b/configs/benchmark/hv_second_secfpn_4x8_80e_pcdet_kitti-3d-3class.py index 30e2a08dba..1f2b109bf8 100644 --- a/configs/benchmark/hv_second_secfpn_4x8_80e_pcdet_kitti-3d-3class.py +++ b/configs/benchmark/hv_second_secfpn_4x8_80e_pcdet_kitti-3d-3class.py @@ -242,7 +242,7 @@ ]) # yapf:enable # runtime settings -runner = dict(max_epochs=80) +runner = dict(type='EpochBasedRunner', max_epochs=80) dist_params = dict(backend='nccl') log_level = 'INFO' work_dir = './work_dirs/sec_secfpn_80e' diff --git a/configs/dynamic_voxelization/dv_second_secfpn_2x8_cosine_80e_kitti-3d-3class.py b/configs/dynamic_voxelization/dv_second_secfpn_2x8_cosine_80e_kitti-3d-3class.py index 8add406000..87fefaddb2 100644 --- a/configs/dynamic_voxelization/dv_second_secfpn_2x8_cosine_80e_kitti-3d-3class.py +++ b/configs/dynamic_voxelization/dv_second_secfpn_2x8_cosine_80e_kitti-3d-3class.py @@ -1,4 +1,8 @@ -_base_ = '../second/hv_second_secfpn_6x8_80e_kitti-3d-3class.py' +_base_ = [ + '../_base_/models/hv_second_secfpn_kitti.py', + '../_base_/datasets/kitti-3d-3class.py', '../_base_/schedules/cosine.py', + '../_base_/default_runtime.py' +] point_cloud_range = [0, -40, -3, 70.4, 40, 1] voxel_size = [0.05, 0.05, 0.1] @@ -16,20 +20,3 @@ type='DynamicSimpleVFE', voxel_size=voxel_size, point_cloud_range=point_cloud_range)) - -# optimizer -lr = 0.003 # max learning rate -optimizer = dict( - _delete_=True, - type='AdamW', - lr=lr, - betas=(0.95, 0.99), # the momentum is change during training - weight_decay=0.001) -lr_config = dict( - _delete_=True, - policy='CosineAnnealing', - warmup='linear', - warmup_iters=1000, - warmup_ratio=1.0 / 10, - min_lr_ratio=1e-5) -momentum_config = None diff --git a/configs/h3dnet/h3dnet_3x8_scannet-3d-18class.py b/configs/h3dnet/h3dnet_3x8_scannet-3d-18class.py index c90abb7803..e6534a4be6 100644 --- a/configs/h3dnet/h3dnet_3x8_scannet-3d-18class.py +++ b/configs/h3dnet/h3dnet_3x8_scannet-3d-18class.py @@ -59,12 +59,6 @@ data = dict(samples_per_gpu=3, workers_per_gpu=2) -# optimizer # yapf:disable -log_config = dict( - interval=30, - hooks=[ - dict(type='TextLoggerHook'), - dict(type='TensorboardLoggerHook') - ]) +log_config = dict(interval=30) # yapf:enable diff --git a/configs/imvotenet/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class.py b/configs/imvotenet/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class.py index 58b26bb4e6..e999c65026 100644 --- a/configs/imvotenet/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class.py +++ b/configs/imvotenet/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class.py @@ -53,6 +53,6 @@ warmup_iters=500, warmup_ratio=0.001, step=[6]) -runner = dict(max_epochs=8) +runner = dict(type='EpochBasedRunner', max_epochs=8) load_from = 'http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth' # noqa diff --git a/configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py b/configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py index 06b4edd588..213b626dcb 100644 --- a/configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py +++ b/configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py @@ -1,3 +1,5 @@ +_base_ = ['../_base_/schedules/cosine.py', '../_base_/default_runtime.py'] + # model settings voxel_size = [0.05, 0.05, 0.1] point_cloud_range = [0, -40, -3, 70.4, 40, 1] @@ -237,33 +239,13 @@ classes=class_names, test_mode=True, box_type_3d='LiDAR')) + # Training settings -optimizer = dict(type='AdamW', lr=0.003, betas=(0.95, 0.99), weight_decay=0.01) +optimizer = dict(weight_decay=0.01) # max_norm=10 is better for SECOND optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) -lr_config = dict( - policy='CosineAnnealing', - warmup='linear', - warmup_iters=1000, - warmup_ratio=1.0 / 10, - min_lr_ratio=1e-5) -momentum_config = None -checkpoint_config = dict(interval=1) -# yapf:disable -log_config = dict( - interval=50, - hooks=[ - dict(type='TextLoggerHook'), - dict(type='TensorboardLoggerHook') - ]) -# yapf:enable + evaluation = dict(interval=1, pipeline=eval_pipeline) -# runtime settings -runner = dict(max_epochs=40) -dist_params = dict(backend='nccl') -log_level = 'INFO' -work_dir = None + # You may need to download the model first is the network is unstable load_from = 'https://download.openmmlab.com/mmdetection3d/pretrain_models/mvx_faster_rcnn_detectron2-caffe_20e_coco-pretrain_gt-sample_kitti-3-class_moderate-79.3_20200207-a4a6a3c7.pth' # noqa -resume_from = None -workflow = [('train', 1)] diff --git a/configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class.py b/configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class.py index 2f7edabff3..4bb3b2c94c 100644 --- a/configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class.py +++ b/configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class.py @@ -1,206 +1,10 @@ -_base_ = ['../_base_/schedules/cyclic_40e.py', '../_base_/default_runtime.py'] +_base_ = [ + '../_base_/schedules/cyclic_40e.py', '../_base_/default_runtime.py', + '../_base_/models/parta2.py' +] -# model settings -voxel_size = [0.05, 0.05, 0.1] point_cloud_range = [0, -40, -3, 70.4, 40, 1] -model = dict( - type='PartA2', - voxel_layer=dict( - max_num_points=5, - point_cloud_range=point_cloud_range, - voxel_size=voxel_size, - max_voxels=(16000, 40000)), - voxel_encoder=dict(type='HardSimpleVFE'), - middle_encoder=dict( - type='SparseUNet', - in_channels=4, - sparse_shape=[41, 1600, 1408], - order=('conv', 'norm', 'act')), - backbone=dict( - type='SECOND', - in_channels=256, - layer_nums=[5, 5], - layer_strides=[1, 2], - out_channels=[128, 256]), - neck=dict( - type='SECONDFPN', - in_channels=[128, 256], - upsample_strides=[1, 2], - out_channels=[256, 256]), - rpn_head=dict( - type='PartA2RPNHead', - num_classes=3, - in_channels=512, - feat_channels=512, - use_direction_classifier=True, - anchor_generator=dict( - type='Anchor3DRangeGenerator', - ranges=[[0, -40.0, -0.6, 70.4, 40.0, -0.6], - [0, -40.0, -0.6, 70.4, 40.0, -0.6], - [0, -40.0, -1.78, 70.4, 40.0, -1.78]], - sizes=[[0.6, 0.8, 1.73], [0.6, 1.76, 1.73], [1.6, 3.9, 1.56]], - rotations=[0, 1.57], - reshape_out=False), - diff_rad_by_sin=True, - assigner_per_size=True, - assign_per_class=True, - bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder'), - loss_cls=dict( - type='FocalLoss', - use_sigmoid=True, - gamma=2.0, - alpha=0.25, - loss_weight=1.0), - loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=2.0), - loss_dir=dict( - type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.2)), - roi_head=dict( - type='PartAggregationROIHead', - num_classes=3, - semantic_head=dict( - type='PointwiseSemanticHead', - in_channels=16, - extra_width=0.2, - seg_score_thr=0.3, - num_classes=3, - loss_seg=dict( - type='FocalLoss', - use_sigmoid=True, - reduction='sum', - gamma=2.0, - alpha=0.25, - loss_weight=1.0), - loss_part=dict( - type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)), - seg_roi_extractor=dict( - type='Single3DRoIAwareExtractor', - roi_layer=dict( - type='RoIAwarePool3d', - out_size=14, - max_pts_per_voxel=128, - mode='max')), - part_roi_extractor=dict( - type='Single3DRoIAwareExtractor', - roi_layer=dict( - type='RoIAwarePool3d', - out_size=14, - max_pts_per_voxel=128, - mode='avg')), - bbox_head=dict( - type='PartA2BboxHead', - num_classes=3, - seg_in_channels=16, - part_in_channels=4, - seg_conv_channels=[64, 64], - part_conv_channels=[64, 64], - merge_conv_channels=[128, 128], - down_conv_channels=[128, 256], - bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder'), - shared_fc_channels=[256, 512, 512, 512], - cls_channels=[256, 256], - reg_channels=[256, 256], - dropout_ratio=0.1, - roi_feat_size=14, - with_corner_loss=True, - loss_bbox=dict( - type='SmoothL1Loss', - beta=1.0 / 9.0, - reduction='sum', - loss_weight=1.0), - loss_cls=dict( - type='CrossEntropyLoss', - use_sigmoid=True, - reduction='sum', - loss_weight=1.0))), - # model training and testing settings - train_cfg=dict( - rpn=dict( - assigner=[ - dict( # for Pedestrian - type='MaxIoUAssigner', - iou_calculator=dict(type='BboxOverlapsNearest3D'), - pos_iou_thr=0.5, - neg_iou_thr=0.35, - min_pos_iou=0.35, - ignore_iof_thr=-1), - dict( # for Cyclist - type='MaxIoUAssigner', - iou_calculator=dict(type='BboxOverlapsNearest3D'), - pos_iou_thr=0.5, - neg_iou_thr=0.35, - min_pos_iou=0.35, - ignore_iof_thr=-1), - dict( # for Car - type='MaxIoUAssigner', - iou_calculator=dict(type='BboxOverlapsNearest3D'), - pos_iou_thr=0.6, - neg_iou_thr=0.45, - min_pos_iou=0.45, - ignore_iof_thr=-1) - ], - allowed_border=0, - pos_weight=-1, - debug=False), - rpn_proposal=dict( - nms_pre=9000, - nms_post=512, - max_num=512, - nms_thr=0.8, - score_thr=0, - use_rotate_nms=False), - rcnn=dict( - assigner=[ - dict( # for Pedestrian - type='MaxIoUAssigner', - iou_calculator=dict( - type='BboxOverlaps3D', coordinate='lidar'), - pos_iou_thr=0.55, - neg_iou_thr=0.55, - min_pos_iou=0.55, - ignore_iof_thr=-1), - dict( # for Cyclist - type='MaxIoUAssigner', - iou_calculator=dict( - type='BboxOverlaps3D', coordinate='lidar'), - pos_iou_thr=0.55, - neg_iou_thr=0.55, - min_pos_iou=0.55, - ignore_iof_thr=-1), - dict( # for Car - type='MaxIoUAssigner', - iou_calculator=dict( - type='BboxOverlaps3D', coordinate='lidar'), - pos_iou_thr=0.55, - neg_iou_thr=0.55, - min_pos_iou=0.55, - ignore_iof_thr=-1) - ], - sampler=dict( - type='IoUNegPiecewiseSampler', - num=128, - pos_fraction=0.55, - neg_piece_fractions=[0.8, 0.2], - neg_iou_piece_thrs=[0.55, 0.1], - neg_pos_ub=-1, - add_gt_as_proposals=False, - return_iou=True), - cls_pos_thr=0.75, - cls_neg_thr=0.25)), - test_cfg=dict( - rpn=dict( - nms_pre=1024, - nms_post=100, - max_num=100, - nms_thr=0.7, - score_thr=0, - use_rotate_nms=True), - rcnn=dict( - use_rotate_nms=True, - use_raw_score=True, - nms_thr=0.01, - score_thr=0.1))) - # dataset settings dataset_type = 'KittiDataset' data_root = 'data/kitti/' diff --git a/configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car.py b/configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car.py index a7a5c122bd..91cf983d9c 100644 --- a/configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car.py +++ b/configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car.py @@ -1,6 +1,5 @@ _base_ = './hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class.py' -voxel_size = [0.05, 0.05, 0.1] point_cloud_range = [0, -40, -3, 70.4, 40, 1] # velodyne coordinates, x, y, z model = dict( diff --git a/configs/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class.py b/configs/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class.py index ac0825016d..5c5c939de5 100644 --- a/configs/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class.py +++ b/configs/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class.py @@ -78,9 +78,10 @@ # development of the codebase thus we keep the setting. But we does not # specifically tune this parameter. optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) -# Use evaluation interval=2 reduce the number of evaluation timese -evaluation = dict(interval=2) # PointPillars usually need longer schedule than second, we simply double # the training schedule. Do remind that since we use RepeatDataset and # repeat factor is 2, so we actually train 160 epochs. runner = dict(max_epochs=80) + +# Use evaluation interval=2 reduce the number of evaluation timese +evaluation = dict(interval=2) diff --git a/configs/votenet/votenet_8x8_scannet-3d-18class.py b/configs/votenet/votenet_8x8_scannet-3d-18class.py index a00fb8f752..62e5630316 100644 --- a/configs/votenet/votenet_8x8_scannet-3d-18class.py +++ b/configs/votenet/votenet_8x8_scannet-3d-18class.py @@ -31,12 +31,6 @@ [1.1511526, 1.0546296, 0.49706793], [0.47535285, 0.49249494, 0.5802117]]))) -# optimizer # yapf:disable -log_config = dict( - interval=30, - hooks=[ - dict(type='TextLoggerHook'), - dict(type='TensorboardLoggerHook') - ]) +log_config = dict(interval=30) # yapf:enable diff --git a/docs/tutorials/config.md b/docs/tutorials/config.md index e89f92a284..2dc514c4eb 100644 --- a/docs/tutorials/config.md +++ b/docs/tutorials/config.md @@ -413,7 +413,7 @@ gpu_ids = range(0, 1) # ids of gpus ### Ignore some fields in the base configs Sometimes, you may set `_delete_=True` to ignore some of fields in base configs. -You may refer to [mmcv](https://mmcv.readthedocs.io/en/latest/utils.html#inherit-from-base-config-with-ignored-fields) for simple inllustration. +You may refer to [mmcv](https://mmcv.readthedocs.io/en/latest/utils.html#inherit-from-base-config-with-ignored-fields) for simple illustration. In MMDetection or MMDetection3D, for example, to change the FPN neck of PointPillars with the following config.