From 3c7641151b88b911815b65460bf644e3e380b3e9 Mon Sep 17 00:00:00 2001 From: David Josef Emmerichs Date: Thu, 16 Mar 2023 17:33:39 +0100 Subject: [PATCH 1/8] add cfg_to_yaml_file --- pcdet/config.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pcdet/config.py b/pcdet/config.py index 02e5daf16..62faa8673 100644 --- a/pcdet/config.py +++ b/pcdet/config.py @@ -80,6 +80,18 @@ def cfg_from_yaml_file(cfg_file, config): return config +def dict_representer(dumper, ed: EasyDict): + return dumper.represent_mapping('tag:yaml.org,2002:map', ed) + + +yaml.add_representer(EasyDict, dict_representer) + + +def cfg_to_yaml_file(config, cfg_file): + with open(cfg_file, 'w') as f: + yaml.dump(config, f, default_flow_style=False) + + cfg = EasyDict() cfg.ROOT_DIR = (Path(__file__).resolve().parent / '../').resolve() cfg.LOCAL_RANK = 0 From 34440b0d972bf7a7307dfe0184cad9088a12b20e Mon Sep 17 00:00:00 2001 From: David Josef Emmerichs Date: Fri, 17 Mar 2023 10:33:32 +0100 Subject: [PATCH 2/8] add cfg tooling for runcon --- pcdet/config.py | 31 +++++++++++++++++++++++++++++++ requirements.txt | 3 ++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/pcdet/config.py b/pcdet/config.py index 62faa8673..de16de3d9 100644 --- a/pcdet/config.py +++ b/pcdet/config.py @@ -2,6 +2,7 @@ import yaml from easydict import EasyDict +from runcon import Config def log_config_to_file(cfg, pre='cfg', logger=None): @@ -92,6 +93,36 @@ def cfg_to_yaml_file(config, cfg_file): yaml.dump(config, f, default_flow_style=False) +def check_recursive_dict_type(cfg, type): + if isinstance(cfg, dict): + if not isinstance(cfg, type): + raise ValueError( + "The config is of type %s but was expected to be of type %s!\n%s" + % (type(cfg), type, cfg) + ) + for k in cfg: + check_recursive_dict_type(cfg[k], type) + + +def ed_to_rc(ed_cfg: EasyDict) -> Config: + check_recursive_dict_type(ed_cfg, EasyDict) + rc_cfg = Config(ed_cfg) + check_recursive_dict_type(rc_cfg, Config) + return rc_cfg + + +def rc_to_ed(rc_cfg: Config) -> EasyDict: + check_recursive_dict_type(rc_cfg, Config) + ed_cfg = EasyDict() + for k in rc_cfg: + if isinstance(rc_cfg[k], Config): + ed_cfg[k] = rc_to_ed(rc_cfg[k]) + else: + ed_cfg[k] = rc_cfg[k] + check_recursive_dict_type(ed_cfg, EasyDict) + return ed_cfg + + cfg = EasyDict() cfg.ROOT_DIR = (Path(__file__).resolve().parent / '../').resolve() cfg.LOCAL_RANK = 0 diff --git a/requirements.txt b/requirements.txt index a730fd7e3..08362c4f5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,5 @@ tqdm torchvision SharedArray opencv-python -pyquaternion \ No newline at end of file +pyquaternion +runcon From f7ebeecc19af7c608dba9d233f3e5111a8f01431 Mon Sep 17 00:00:00 2001 From: David Josef Emmerichs Date: Fri, 17 Mar 2023 13:34:25 +0100 Subject: [PATCH 3/8] add hierarchical configuration via runcon --- pcdet/config.py | 26 ++++++++++++++++++++++++++ tools/train.py | 16 +++++++++++----- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/pcdet/config.py b/pcdet/config.py index de16de3d9..b4ba17089 100644 --- a/pcdet/config.py +++ b/pcdet/config.py @@ -1,4 +1,5 @@ from pathlib import Path +from typing import List import yaml from easydict import EasyDict @@ -123,6 +124,31 @@ def rc_to_ed(rc_cfg: Config) -> EasyDict: return ed_cfg +def modify_rc_cfg(cfg: Config, modify_cfgs: List[Path]) -> Config: + from copy import deepcopy + cfg = deepcopy(cfg) + for m in modify_cfgs: + cfg.rupdate(Config.from_file(m)) + cfg = cfg.resolve_transforms() + return cfg + + +def create_cfg_from_sets( + cfg_file: Path, + modify_cfgs: List[Path], + set_cfgs: List[str], + cfg: EasyDict = None, +) -> EasyDict: + if cfg is None: + cfg = EasyDict() + cfg_from_yaml_file(cfg_file, cfg) + cfg = ed_to_rc(cfg) + cfg = modify_rc_cfg(cfg, modify_cfgs) + cfg = rc_to_ed(cfg) + cfg_from_list(set_cfgs, cfg) + return cfg + + cfg = EasyDict() cfg.ROOT_DIR = (Path(__file__).resolve().parent / '../').resolve() cfg.LOCAL_RANK = 0 diff --git a/tools/train.py b/tools/train.py index 29a88bde9..a67e9c6d4 100644 --- a/tools/train.py +++ b/tools/train.py @@ -10,7 +10,7 @@ import torch.nn as nn from tensorboardX import SummaryWriter -from pcdet.config import cfg, cfg_from_list, cfg_from_yaml_file, log_config_to_file +from pcdet.config import cfg, log_config_to_file, create_cfg_from_sets from pcdet.datasets import build_dataloader from pcdet.models import build_network, model_fn_decorator from pcdet.utils import common_utils @@ -19,6 +19,8 @@ def parse_config(): + global cfg + parser = argparse.ArgumentParser(description='arg parser') parser.add_argument('--cfg_file', type=str, default=None, help='specify the config for training') @@ -38,6 +40,8 @@ def parse_config(): parser.add_argument('--merge_all_iters_to_one_epoch', action='store_true', default=False, help='') parser.add_argument('--set', dest='set_cfgs', default=None, nargs=argparse.REMAINDER, help='set extra config keys if needed') + parser.add_argument('--modify', type=str, dest='modify_cfgs', default=None, nargs='*', + help='specify extra modifier configs') parser.add_argument('--max_waiting_mins', type=int, default=0, help='max waiting minutes') parser.add_argument('--start_epoch', type=int, default=0, help='') @@ -52,16 +56,18 @@ def parse_config(): args = parser.parse_args() + if args.set_cfgs is None: + args.set_cfgs = [] + if args.modify_cfgs is None: + args.modify_cfgs = [] + + cfg = create_cfg_from_sets(args.cfg_file, args.modify_cfgs, args.set_cfgs, cfg) - cfg_from_yaml_file(args.cfg_file, cfg) cfg.TAG = Path(args.cfg_file).stem cfg.EXP_GROUP_PATH = '/'.join(args.cfg_file.split('/')[1:-1]) # remove 'cfgs' and 'xxxx.yaml' args.use_amp = args.use_amp or cfg.OPTIMIZATION.get('USE_AMP', False) - if args.set_cfgs is not None: - cfg_from_list(args.set_cfgs, cfg) - return args, cfg From 331bfe6c14eb1e667e29949254ecbee94dbe4010 Mon Sep 17 00:00:00 2001 From: David Josef Emmerichs Date: Fri, 17 Mar 2023 13:35:31 +0100 Subject: [PATCH 4/8] save not only base configuration file but also modified configuration --- tools/train.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/train.py b/tools/train.py index a67e9c6d4..72f4e061b 100644 --- a/tools/train.py +++ b/tools/train.py @@ -115,7 +115,9 @@ def main(): logger.info('{:16} {}'.format(key, val)) log_config_to_file(cfg, logger=logger) if cfg.LOCAL_RANK == 0: - os.system('cp %s %s' % (args.cfg_file, output_dir)) + os.system('cp %s %s' % (args.cfg_file, output_dir / ("BASE_" + Path(args.cfg_file).name))) + set_cfg = create_cfg_from_sets(args.cfg_file, args.modify_cfgs, args.set_cfgs) + cfg_to_yaml_file(set_cfg, output_dir / Path(args.cfg_file).name) tb_log = SummaryWriter(log_dir=str(output_dir / 'tensorboard')) if cfg.LOCAL_RANK == 0 else None From 90fc160e369c498d0e2ca3108208019cee94ad90 Mon Sep 17 00:00:00 2001 From: David Josef Emmerichs Date: Fri, 17 Mar 2023 13:37:40 +0100 Subject: [PATCH 5/8] make train TAG more descriptive based on modifier and setter --- tools/train.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/train.py b/tools/train.py index 72f4e061b..abd6e1d04 100644 --- a/tools/train.py +++ b/tools/train.py @@ -63,11 +63,16 @@ def parse_config(): cfg = create_cfg_from_sets(args.cfg_file, args.modify_cfgs, args.set_cfgs, cfg) - cfg.TAG = Path(args.cfg_file).stem cfg.EXP_GROUP_PATH = '/'.join(args.cfg_file.split('/')[1:-1]) # remove 'cfgs' and 'xxxx.yaml' args.use_amp = args.use_amp or cfg.OPTIMIZATION.get('USE_AMP', False) + cfg.TAG = Path(args.cfg_file).stem + if len(args.modify_cfgs): + cfg.TAG += '__' + '__'.join([Path(m).stem for m in args.modify_cfgs]) + if len(args.set_cfgs): + cfg.TAG += '__s__' + '__'.join([s.replace('/', '_') for s in args.set_cfgs]) + return args, cfg From 308007915fe8676dfa9d399c220d7ca221379630 Mon Sep 17 00:00:00 2001 From: David Josef Emmerichs Date: Wed, 22 Mar 2023 01:24:32 +0100 Subject: [PATCH 6/8] use pcdet file loading to resolve base configs --- pcdet/config.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pcdet/config.py b/pcdet/config.py index b4ba17089..862c34853 100644 --- a/pcdet/config.py +++ b/pcdet/config.py @@ -128,8 +128,9 @@ def modify_rc_cfg(cfg: Config, modify_cfgs: List[Path]) -> Config: from copy import deepcopy cfg = deepcopy(cfg) for m in modify_cfgs: - cfg.rupdate(Config.from_file(m)) - cfg = cfg.resolve_transforms() + m = cfg_from_yaml_file(m, EasyDict()) + cfg.rupdate(ed_to_rc(m)) + cfg = cfg.resolve_transforms() return cfg From a0b943f102c38d9d64cf9247200d6155e6004c94 Mon Sep 17 00:00:00 2001 From: David Josef Emmerichs Date: Wed, 22 Mar 2023 01:51:12 +0100 Subject: [PATCH 7/8] add config refactor example --- .../modifiers/waymo/multiframe.yaml | 64 ++++++ .../modifiers/mppnet/16frames.yaml | 16 ++ .../modifiers/mppnet/4frames.yaml | 15 ++ .../mppnet/e2e_memorybank_inference.yaml | 93 +++++++++ tools/cfgs/waymo_models/mppnet.yaml | 170 +++++++++++++++ ...net_e2e_memorybank_inference_16frames.yaml | 194 ++++++++++++++++++ tools/test_cfg_refactor.bash | 115 +++++++++++ 7 files changed, 667 insertions(+) create mode 100644 tools/cfgs/dataset_configs/modifiers/waymo/multiframe.yaml create mode 100644 tools/cfgs/waymo_models/modifiers/mppnet/16frames.yaml create mode 100644 tools/cfgs/waymo_models/modifiers/mppnet/4frames.yaml create mode 100644 tools/cfgs/waymo_models/modifiers/mppnet/e2e_memorybank_inference.yaml create mode 100644 tools/cfgs/waymo_models/mppnet.yaml create mode 100644 tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml create mode 100644 tools/test_cfg_refactor.bash diff --git a/tools/cfgs/dataset_configs/modifiers/waymo/multiframe.yaml b/tools/cfgs/dataset_configs/modifiers/waymo/multiframe.yaml new file mode 100644 index 000000000..3ea65c0eb --- /dev/null +++ b/tools/cfgs/dataset_configs/modifiers/waymo/multiframe.yaml @@ -0,0 +1,64 @@ +SEQUENCE_CONFIG: + ENABLED: True + SAMPLE_OFFSET: [-3, 0] + +TRAIN_WITH_SPEED: True + + +DATA_AUGMENTOR: + AUG_CONFIG_LIST: + - NAME: gt_sampling + USE_ROAD_PLANE: False + DB_INFO_PATH: + - waymo_processed_data_v0_5_0_waymo_dbinfos_train_sampled_1_multiframe_-4_to_0.pkl + + USE_SHARED_MEMORY: False # set it to True to speed up (it costs about 50GB? shared memory) + DB_DATA_PATH: + - waymo_processed_data_v0_5_0_gt_database_train_sampled_1_multiframe_-4_to_0_global.npy + + PREPARE: { + filter_by_min_points: ['Vehicle:5', 'Pedestrian:5', 'Cyclist:5'], + filter_by_difficulty: [-1], + } + + SAMPLE_GROUPS: ['Vehicle:15', 'Pedestrian:10', 'Cyclist:10'] + NUM_POINT_FEATURES: 6 + REMOVE_EXTRA_WIDTH: [0.0, 0.0, 0.0] + LIMIT_WHOLE_SCENE: True + + FILTER_OBJ_POINTS_BY_TIMESTAMP: True + TIME_RANGE: [0.3, 0.0] # 0.3s-0.0s indicates 4 frames + + - NAME: random_world_flip + ALONG_AXIS_LIST: ['x', 'y'] + + - NAME: random_world_rotation + WORLD_ROT_ANGLE: [-0.78539816, 0.78539816] + + - NAME: random_world_scaling + WORLD_SCALE_RANGE: [0.95, 1.05] + + +POINT_FEATURE_ENCODING: + used_feature_list: ['x', 'y', 'z', 'intensity', 'elongation', 'timestamp'] + src_feature_list: ['x', 'y', 'z', 'intensity', 'elongation', 'timestamp'] + + +DATA_PROCESSOR: + - NAME: mask_points_and_boxes_outside_range + REMOVE_OUTSIDE_BOXES: True + USE_CENTER_TO_FILTER: True + + - NAME: shuffle_points + SHUFFLE_ENABLED: { + 'train': True, + 'test': True + } + + - NAME: transform_points_to_voxels + VOXEL_SIZE: [0.1, 0.1, 0.15] + MAX_POINTS_PER_VOXEL: 5 + MAX_NUMBER_OF_VOXELS: { + 'train': 180000, + 'test': 400000 + } diff --git a/tools/cfgs/waymo_models/modifiers/mppnet/16frames.yaml b/tools/cfgs/waymo_models/modifiers/mppnet/16frames.yaml new file mode 100644 index 000000000..272a39b45 --- /dev/null +++ b/tools/cfgs/waymo_models/modifiers/mppnet/16frames.yaml @@ -0,0 +1,16 @@ +DATA_CONFIG: + SEQUENCE_CONFIG: + SAMPLE_OFFSET: [-15,0] + +MODEL: + ROI_HEAD: + TRANS_INPUT: 64 + + ROI_GRID_POOL: + MLPS: [[64,64]] + POOL_RADIUS: [0.8] + NSAMPLE: [16] + + Transformer: + num_frames: 16 + sequence_stride: 4 diff --git a/tools/cfgs/waymo_models/modifiers/mppnet/4frames.yaml b/tools/cfgs/waymo_models/modifiers/mppnet/4frames.yaml new file mode 100644 index 000000000..7cec9de64 --- /dev/null +++ b/tools/cfgs/waymo_models/modifiers/mppnet/4frames.yaml @@ -0,0 +1,15 @@ +DATA_CONFIG: + SEQUENCE_CONFIG: + SAMPLE_OFFSET: [-3,0] + +MODEL: + ROI_HEAD: + TRANS_INPUT: 256 + + ROI_GRID_POOL: + MLPS: [[128,128], [128,128]] + POOL_RADIUS: [0.8, 1.6] + NSAMPLE: [16, 16] + + Transformer: + num_frames: 4 diff --git a/tools/cfgs/waymo_models/modifiers/mppnet/e2e_memorybank_inference.yaml b/tools/cfgs/waymo_models/modifiers/mppnet/e2e_memorybank_inference.yaml new file mode 100644 index 000000000..bea260600 --- /dev/null +++ b/tools/cfgs/waymo_models/modifiers/mppnet/e2e_memorybank_inference.yaml @@ -0,0 +1,93 @@ +DATA_CONFIG: + _BASE_CONFIG_: cfgs/dataset_configs/modifiers/waymo/multiframe.yaml + _TRANSFORM: + - name: remove_element + target: ROI_BOXES_PATH + - name: remove_element + target: USE_PREDBOX + + SAMPLED_INTERVAL: { + 'train': 5, + 'test': 1 + } + + POINT_FEATURE_ENCODING: + encoding_type: absolute_coordinates_encoding + used_feature_list: ['x', 'y', 'z', 'intensity', 'elongation', 'time'] + src_feature_list: ['x', 'y', 'z', 'intensity', 'elongation', 'time'] + +MODEL: + NAME: MPPNetE2E + + VFE: + NAME: DynMeanVFE + + BACKBONE_3D: + NAME: VoxelResBackBone8x + + MAP_TO_BEV: + NAME: HeightCompression + NUM_BEV_FEATURES: 256 + + BACKBONE_2D: + NAME: BaseBEVBackbone + NUM_FRAME: 2 + LAYER_NUMS: [5, 5] + LAYER_STRIDES: [1, 2] + NUM_FILTERS: [128, 256] + UPSAMPLE_STRIDES: [1, 2] + NUM_UPSAMPLE_FILTERS: [256, 256] + + DENSE_HEAD: + NAME: CenterHead + CLASS_AGNOSTIC: False + + CLASS_NAMES_EACH_HEAD: [ + ['Vehicle', 'Pedestrian', 'Cyclist'] + ] + + SHARED_CONV_CHANNEL: 64 + USE_BIAS_BEFORE_NORM: True + NUM_HM_CONV: 2 + SEPARATE_HEAD_CFG: + HEAD_ORDER: ['center', 'center_z', 'dim', 'rot','vel'] + HEAD_DICT: { + 'center': {'out_channels': 2, 'num_conv': 2}, + 'center_z': {'out_channels': 1, 'num_conv': 2}, + 'dim': {'out_channels': 3, 'num_conv': 2}, + 'rot': {'out_channels': 2, 'num_conv': 2}, + 'vel': {'out_channels': 2, 'num_conv': 2}, + + } + + TARGET_ASSIGNER_CONFIG: + FEATURE_MAP_STRIDE: 8 + NUM_MAX_OBJS: 500 + GAUSSIAN_OVERLAP: 0.1 + MIN_RADIUS: 2 + + LOSS_CONFIG: + LOSS_WEIGHTS: { + 'cls_weight': 1.0, + 'loc_weight': 2.0, + 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.2, 0.2] + } + + POST_PROCESSING: + SCORE_THRESH: 0.1 + POST_CENTER_LIMIT_RANGE: [-75.2, -75.2, -2, 75.2, 75.2, 4] + MAX_OBJ_PER_SAMPLE: 500 + NMS_CONFIG: + NMS_TYPE: nms_gpu + NMS_THRESH: 0.7 + NMS_PRE_MAXSIZE: 4096 + NMS_POST_MAXSIZE: 500 + + ROI_HEAD: + NAME: MPPNetHeadE2E + USE_BOX_ENCODING: + NORM_T0: True + ALL_YAW_T0: True + + Transformer: + sequence_stride: 1 #16frame using 4 diff --git a/tools/cfgs/waymo_models/mppnet.yaml b/tools/cfgs/waymo_models/mppnet.yaml new file mode 100644 index 000000000..f0e7f99f8 --- /dev/null +++ b/tools/cfgs/waymo_models/mppnet.yaml @@ -0,0 +1,170 @@ +CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist'] + +DATA_CONFIG: + _BASE_CONFIG_: cfgs/dataset_configs/waymo_dataset.yaml + PROCESSED_DATA_TAG: 'waymo_processed_data_v0_5_0' + + SAMPLED_INTERVAL: { + 'train': 1, + 'test': 1 + } + FILTER_EMPTY_BOXES_FOR_TRAIN: True + DISABLE_NLZ_FLAG_ON_POINTS: True + + SEQUENCE_CONFIG: + ENABLED: True + SAMPLE_OFFSET: [-3,0] + + USE_PREDBOX: True + ROI_BOXES_PATH: { + 'train': '../output/xxxxx/train/result.pkl', # example: predicted boxes of RPN in training set + 'test': '../output/xxxxx/val/result.pkl', # example: predicted boxes of RPN in evalulation set + } + + DATA_AUGMENTOR: + DISABLE_AUG_LIST: [ 'placeholder' ] + AUG_CONFIG_LIST: + + - NAME: random_world_flip + ALONG_AXIS_LIST: [ 'x', 'y' ] + + - NAME: random_world_rotation + WORLD_ROT_ANGLE: [ -0.78539816, 0.78539816 ] + + - NAME: random_world_scaling + WORLD_SCALE_RANGE: [ 0.95, 1.05 ] + + DATA_PROCESSOR: + - NAME: mask_points_and_boxes_outside_range + REMOVE_OUTSIDE_BOXES: True + + - NAME: shuffle_points + SHUFFLE_ENABLED: { + 'train': True, + 'test': True + } + + POINT_FEATURE_ENCODING: { + encoding_type: absolute_coordinates_encoding, + used_feature_list: ['x', 'y', 'z', 'intensity', 'elongation', 'time'], + src_feature_list: ['x', 'y', 'z', 'intensity', 'elongation', 'time'], + } + + +MODEL: + NAME: MPPNet + + ROI_HEAD: + NAME: MPPNetHead + TRANS_INPUT: 256 + CLASS_AGNOSTIC: True + USE_BOX_ENCODING: + ENABLED: True + AVG_STAGE1_SCORE: True + USE_TRAJ_EMPTY_MASK: True + USE_AUX_LOSS: True + IOU_WEIGHT: [0.5,0.4] + + + + ROI_GRID_POOL: + GRID_SIZE: 4 + MLPS: [[128,128], [128,128]] + POOL_RADIUS: [0.8, 1.6] + NSAMPLE: [16, 16] + POOL_METHOD: max_pool + + + _TRANSFORM: + name: copy + src: TRANS_INPUT + dest: Transformer.hidden_dim + Transformer: + num_lidar_points: 128 + num_proxy_points: 64 # GRID_SIZE*GRID_SIZE*GRID_SIZE + pos_hidden_dim: 64 + enc_layers: 3 + dim_feedforward: 512 + dropout: 0.1 + nheads: 4 + pre_norm: False + num_frames: 4 + num_groups: 4 + use_grid_pos: + enabled: True + init_type: index + + use_mlp_mixer: + enabled: True + hidden_dim: 16 + + TARGET_CONFIG: + BOX_CODER: ResidualCoder + ROI_PER_IMAGE: 96 + FG_RATIO: 0.5 + REG_AUG_METHOD: single + ROI_FG_AUG_TIMES: 10 + RATIO: 0.2 + USE_ROI_AUG: True + USE_TRAJ_AUG: + ENABLED: True + THRESHOD: 0.8 + SAMPLE_ROI_BY_EACH_CLASS: True + CLS_SCORE_TYPE: roi_iou + + CLS_FG_THRESH: 0.75 + CLS_BG_THRESH: 0.25 + CLS_BG_THRESH_LO: 0.1 + HARD_BG_RATIO: 0.8 + + REG_FG_THRESH: 0.55 + + LOSS_CONFIG: + CLS_LOSS: BinaryCrossEntropy + REG_LOSS: smooth-l1 + CORNER_LOSS_REGULARIZATION: True + LOSS_WEIGHTS: { + 'rcnn_cls_weight': 1.0, + 'rcnn_reg_weight': 1.0, + 'rcnn_corner_weight': 2.0, + 'traj_reg_weight': [2.0, 2.0, 2.0], + 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] + } + + POST_PROCESSING: + RECALL_THRESH_LIST: [0.3, 0.5, 0.7] + SCORE_THRESH: 0.1 + OUTPUT_RAW_SCORE: False + SAVE_BBOX: False + EVAL_METRIC: waymo + NOT_APPLY_NMS_FOR_VEL: True + + NMS_CONFIG: + MULTI_CLASSES_NMS: False + NMS_TYPE: nms_gpu + NMS_THRESH: 0.7 + NMS_PRE_MAXSIZE: 4096 + NMS_POST_MAXSIZE: 500 + + +OPTIMIZATION: + BATCH_SIZE_PER_GPU: 2 + NUM_EPOCHS: 6 + + OPTIMIZER: adam_onecycle + LR: 0.003 + WEIGHT_DECAY: 0.01 + MOMENTUM: 0.9 + + MOMS: [0.95, 0.85] + PCT_START: 0.4 + DIV_FACTOR: 10 + DECAY_STEP_LIST: [35, 45] + LR_DECAY: 0.1 + LR_CLIP: 0.0000001 + + LR_WARMUP: False + WARMUP_EPOCH: 1 + + GRAD_NORM_CLIP: 10 + diff --git a/tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml b/tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml new file mode 100644 index 000000000..1543f3e84 --- /dev/null +++ b/tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml @@ -0,0 +1,194 @@ +CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist'] + +DATA_CONFIG: + + _BASE_CONFIG_: cfgs/dataset_configs/waymo_dataset_multiframe.yaml + PROCESSED_DATA_TAG: 'waymo_processed_data_v0_5_0' + + SEQUENCE_CONFIG: + ENABLED: True + SAMPLE_OFFSET: [-15, 0] #16frame using [-15,0] + + POINT_FEATURE_ENCODING: { + encoding_type: absolute_coordinates_encoding, + used_feature_list: ['x', 'y', 'z', 'intensity', 'elongation','time'], + src_feature_list: ['x', 'y', 'z', 'intensity', 'elongation','time'], + } + + +MODEL: + NAME: MPPNetE2E + + VFE: + NAME: DynMeanVFE + + BACKBONE_3D: + NAME: VoxelResBackBone8x + + MAP_TO_BEV: + NAME: HeightCompression + NUM_BEV_FEATURES: 256 + + BACKBONE_2D: + NAME: BaseBEVBackbone + NUM_FRAME: 2 + LAYER_NUMS: [5, 5] + LAYER_STRIDES: [1, 2] + NUM_FILTERS: [128, 256] + UPSAMPLE_STRIDES: [1, 2] + NUM_UPSAMPLE_FILTERS: [256, 256] + + DENSE_HEAD: + NAME: CenterHead + CLASS_AGNOSTIC: False + + CLASS_NAMES_EACH_HEAD: [ + ['Vehicle', 'Pedestrian', 'Cyclist'] + ] + + SHARED_CONV_CHANNEL: 64 + USE_BIAS_BEFORE_NORM: True + NUM_HM_CONV: 2 + SEPARATE_HEAD_CFG: + HEAD_ORDER: ['center', 'center_z', 'dim', 'rot','vel'] + HEAD_DICT: { + 'center': {'out_channels': 2, 'num_conv': 2}, + 'center_z': {'out_channels': 1, 'num_conv': 2}, + 'dim': {'out_channels': 3, 'num_conv': 2}, + 'rot': {'out_channels': 2, 'num_conv': 2}, + 'vel': {'out_channels': 2, 'num_conv': 2}, + + } + + TARGET_ASSIGNER_CONFIG: + FEATURE_MAP_STRIDE: 8 + NUM_MAX_OBJS: 500 + GAUSSIAN_OVERLAP: 0.1 + MIN_RADIUS: 2 + + LOSS_CONFIG: + LOSS_WEIGHTS: { + 'cls_weight': 1.0, + 'loc_weight': 2.0, + 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.2, 0.2] + } + + POST_PROCESSING: + SCORE_THRESH: 0.1 + POST_CENTER_LIMIT_RANGE: [-75.2, -75.2, -2, 75.2, 75.2, 4] + MAX_OBJ_PER_SAMPLE: 500 + NMS_CONFIG: + NMS_TYPE: nms_gpu + NMS_THRESH: 0.7 + NMS_PRE_MAXSIZE: 4096 + NMS_POST_MAXSIZE: 500 + + ROI_HEAD: + NAME: MPPNetHeadE2E + TRANS_INPUT: 256 + CLASS_AGNOSTIC: True + USE_BOX_ENCODING: + ENABLED: True + NORM_T0: True + ALL_YAW_T0: True + AVG_STAGE1_SCORE: True + USE_TRAJ_EMPTY_MASK: True + USE_AUX_LOSS: True + IOU_WEIGHT: [0.5,0.4] + + ROI_GRID_POOL: #if using 16frame, change to the corresponding setting + GRID_SIZE: 4 + MLPS: [[64,64]] + POOL_RADIUS: [0.8] + NSAMPLE: [16] + POOL_METHOD: max_pool + + Transformer: + num_lidar_points: 128 + num_proxy_points: 64 # GRID_SIZE*GRID_SIZE*GRID_SIZE + pos_hidden_dim: 64 + enc_layers: 3 + dim_feedforward: 512 + hidden_dim: 256 #equal to ROI_HEAD.TRANS_INPUT + dropout: 0.1 + nheads: 4 + pre_norm: False + num_frames: 16 #16frame using 16 + num_groups: 4 + sequence_stride: 4 #16frame using 4 + use_grid_pos: + enabled: True + init_type: index + use_mlp_mixer: + enabled: True + hidden_dim: 16 + + TARGET_CONFIG: + BOX_CODER: ResidualCoder + ROI_PER_IMAGE: 96 + FG_RATIO: 0.5 + REG_AUG_METHOD: single + ROI_FG_AUG_TIMES: 10 + RATIO: 0.2 + USE_ROI_AUG: True + USE_TRAJ_AUG: + ENABLED: True + THRESHOD: 0.8 + SAMPLE_ROI_BY_EACH_CLASS: True + CLS_SCORE_TYPE: roi_iou + + CLS_FG_THRESH: 0.75 + CLS_BG_THRESH: 0.25 + CLS_BG_THRESH_LO: 0.1 + HARD_BG_RATIO: 0.8 + + REG_FG_THRESH: 0.55 + + LOSS_CONFIG: + CLS_LOSS: BinaryCrossEntropy + REG_LOSS: smooth-l1 + CORNER_LOSS_REGULARIZATION: True + LOSS_WEIGHTS: { + 'rcnn_cls_weight': 1.0, + 'rcnn_reg_weight': 1.0, + 'rcnn_corner_weight': 2.0, + 'traj_reg_weight': [2.0, 2.0, 2.0], + 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] + } + + POST_PROCESSING: + RECALL_THRESH_LIST: [0.3, 0.5, 0.7] + SCORE_THRESH: 0.1 + OUTPUT_RAW_SCORE: False + SAVE_BBOX: False + EVAL_METRIC: waymo + NOT_APPLY_NMS_FOR_VEL: True + + NMS_CONFIG: + MULTI_CLASSES_NMS: False + NMS_TYPE: nms_gpu + NMS_THRESH: 0.7 + NMS_PRE_MAXSIZE: 4096 + NMS_POST_MAXSIZE: 500 + + +OPTIMIZATION: + BATCH_SIZE_PER_GPU: 2 + NUM_EPOCHS: 6 + + OPTIMIZER: adam_onecycle + LR: 0.003 + WEIGHT_DECAY: 0.01 + MOMENTUM: 0.9 + + MOMS: [0.95, 0.85] + PCT_START: 0.4 + DIV_FACTOR: 10 + DECAY_STEP_LIST: [35, 45] + LR_DECAY: 0.1 + LR_CLIP: 0.0000001 + + LR_WARMUP: False + WARMUP_EPOCH: 1 + + GRAD_NORM_CLIP: 10 diff --git a/tools/test_cfg_refactor.bash b/tools/test_cfg_refactor.bash new file mode 100644 index 000000000..34f41af7b --- /dev/null +++ b/tools/test_cfg_refactor.bash @@ -0,0 +1,115 @@ +#!/usr/bin/env bash + +mppnet=$(python -c " +from train import parse_config +import sys +import yaml +sys.argv += [ + '--cfg_file', + 'cfgs/waymo_models/mppnet.yaml', +] +print(yaml.dump(parse_config()[1], default_flow_style=None)) +") + +mppnet_4frames=$(python -c " +from train import parse_config +import sys +import yaml +sys.argv += [ + '--cfg_file', + 'cfgs/waymo_models/mppnet_4frames.yaml', +] +print(yaml.dump(parse_config()[1], default_flow_style=None)) +") + +agg_mppnet_4frames=$(python -c " +from train import parse_config +import sys +import yaml +sys.argv += [ + '--cfg_file', + 'cfgs/waymo_models/mppnet.yaml', + '--modify', + 'cfgs/waymo_models/modifiers/mppnet/4frames.yaml', +] +print(yaml.dump(parse_config()[1], default_flow_style=None)) +") + +mppnet_16frames=$(python -c " +from train import parse_config +import sys +import yaml +sys.argv += [ + '--cfg_file', + 'cfgs/waymo_models/mppnet_16frames.yaml', +] +print(yaml.dump(parse_config()[1], default_flow_style=None)) +") + +agg_mppnet_16frames=$(python -c " +from train import parse_config +import sys +import yaml +sys.argv += [ + '--cfg_file', + 'cfgs/waymo_models/mppnet.yaml', + '--modify', + 'cfgs/waymo_models/modifiers/mppnet/16frames.yaml', +] +print(yaml.dump(parse_config()[1], default_flow_style=None)) +") + +mppnet_e2e_membank_inf=$(python -c " +from train import parse_config +import sys +import yaml +sys.argv += [ + '--cfg_file', + 'cfgs/waymo_models/mppnet_e2e_memorybank_inference.yaml', +] +print(yaml.dump(parse_config()[1], default_flow_style=None)) +") + +agg_mppnet_e2e_membank_inf=$(python -c " +from train import parse_config +import sys +import yaml +sys.argv += [ + '--cfg_file', + 'cfgs/waymo_models/mppnet.yaml', + '--modify', + 'cfgs/waymo_models/modifiers/mppnet/e2e_memorybank_inference.yaml', +] +print(yaml.dump(parse_config()[1], default_flow_style=None)) +") + +mppnet_e2e_membank_inf_16frames=$(python -c " +from train import parse_config +import sys +import yaml +sys.argv += [ + '--cfg_file', + 'cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml', +] +print(yaml.dump(parse_config()[1], default_flow_style=None)) +") + +agg_mppnet_e2e_membank_inf_16frames=$(python -c " +from train import parse_config +import sys +import yaml +sys.argv += [ + '--cfg_file', + 'cfgs/waymo_models/mppnet.yaml', + '--modify', + 'cfgs/waymo_models/modifiers/mppnet/e2e_memorybank_inference.yaml', + 'cfgs/waymo_models/modifiers/mppnet/16frames.yaml', +] +print(yaml.dump(parse_config()[1], default_flow_style=None)) +") + +diff <(echo "$mppnet") <(echo "$mppnet_4frames") +diff <(echo "$mppnet_4frames") <(echo "$agg_mppnet_4frames") +diff <(echo "$mppnet_16frames") <(echo "$agg_mppnet_16frames") +diff <(echo "$mppnet_e2e_membank_inf") <(echo "$agg_mppnet_e2e_membank_inf") +diff <(echo "$mppnet_e2e_membank_inf_16frames") <(echo "$agg_mppnet_e2e_membank_inf_16frames") \ No newline at end of file From 47cbcd0a304729e2ddc6bd70528e5c212a365d21 Mon Sep 17 00:00:00 2001 From: David Josef Emmerichs Date: Wed, 22 Mar 2023 02:07:12 +0100 Subject: [PATCH 8/8] remove old mppnet configuration files --- tools/cfgs/waymo_models/mppnet_16frames.yaml | 162 --------------- tools/cfgs/waymo_models/mppnet_4frames.yaml | 167 --------------- .../mppnet_e2e_memorybank_inference.yaml | 194 ------------------ ...net_e2e_memorybank_inference_16frames.yaml | 194 ------------------ tools/test_cfg_refactor.bash | 115 ----------- 5 files changed, 832 deletions(-) delete mode 100644 tools/cfgs/waymo_models/mppnet_16frames.yaml delete mode 100644 tools/cfgs/waymo_models/mppnet_4frames.yaml delete mode 100644 tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference.yaml delete mode 100644 tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml delete mode 100644 tools/test_cfg_refactor.bash diff --git a/tools/cfgs/waymo_models/mppnet_16frames.yaml b/tools/cfgs/waymo_models/mppnet_16frames.yaml deleted file mode 100644 index d36848b4c..000000000 --- a/tools/cfgs/waymo_models/mppnet_16frames.yaml +++ /dev/null @@ -1,162 +0,0 @@ -CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist'] - -DATA_CONFIG: - _BASE_CONFIG_: cfgs/dataset_configs/waymo_dataset.yaml - PROCESSED_DATA_TAG: 'waymo_processed_data_v0_5_0' - - SAMPLED_INTERVAL: { - 'train': 1, - 'test': 1 - } - FILTER_EMPTY_BOXES_FOR_TRAIN: True - DISABLE_NLZ_FLAG_ON_POINTS: True - - SEQUENCE_CONFIG: - ENABLED: True - SAMPLE_OFFSET: [-15,0] - - USE_PREDBOX: True - ROI_BOXES_PATH: { - 'train': '../output/xxxxx/train/result.pkl', # example: predicted boxes of RPN in training set - 'test': '../output/xxxxx/val/result.pkl', # example: predicted boxes of RPN in evalulation set - } - - DATA_AUGMENTOR: - DISABLE_AUG_LIST: [ 'placeholder' ] - AUG_CONFIG_LIST: - - NAME: random_world_flip - ALONG_AXIS_LIST: [ 'x', 'y' ] - - - NAME: random_world_rotation - WORLD_ROT_ANGLE: [ -0.78539816, 0.78539816 ] - - - NAME: random_world_scaling - WORLD_SCALE_RANGE: [ 0.95, 1.05 ] - - DATA_PROCESSOR: - - NAME: mask_points_and_boxes_outside_range - REMOVE_OUTSIDE_BOXES: True - - - NAME: shuffle_points - SHUFFLE_ENABLED: { - 'train': True, - 'test': True - } - - - POINT_FEATURE_ENCODING: { - encoding_type: absolute_coordinates_encoding, - used_feature_list: ['x', 'y', 'z', 'intensity', 'elongation', 'time'], - src_feature_list: ['x', 'y', 'z', 'intensity', 'elongation', 'time'], - } - - -MODEL: - NAME: MPPNet - - ROI_HEAD: - NAME: MPPNetHead - TRANS_INPUT: 64 - CLASS_AGNOSTIC: True - USE_BOX_ENCODING: - ENABLED: True - AVG_STAGE1_SCORE: True - USE_TRAJ_EMPTY_MASK: True - USE_AUX_LOSS: True - IOU_WEIGHT: [0.5,0.4] - - ROI_GRID_POOL: - GRID_SIZE: 4 - MLPS: [[64,64]] - POOL_RADIUS: [0.8] - NSAMPLE: [16] - POOL_METHOD: max_pool - - Transformer: - num_lidar_points: 128 - num_proxy_points: 64 # GRID_SIZE*GRID_SIZE*GRID_SIZE - pos_hidden_dim: 64 - enc_layers: 3 - dim_feedforward: 512 - hidden_dim: 64 #equal to ROI_HEAD.TRANS_INPUT - dropout: 0.1 - nheads: 4 - pre_norm: False - num_frames: 16 - num_groups: 4 - sequence_stride: 4 - use_grid_pos: - enabled: True - init_type: index - use_mlp_mixer: - enabled: True - hidden_dim: 16 - - TARGET_CONFIG: - BOX_CODER: ResidualCoder - ROI_PER_IMAGE: 96 - FG_RATIO: 0.5 - REG_AUG_METHOD: single - ROI_FG_AUG_TIMES: 10 - RATIO: 0.2 - USE_ROI_AUG: True - USE_TRAJ_AUG: - ENABLED: True - THRESHOD: 0.8 - SAMPLE_ROI_BY_EACH_CLASS: True - CLS_SCORE_TYPE: roi_iou - - CLS_FG_THRESH: 0.75 - CLS_BG_THRESH: 0.25 - CLS_BG_THRESH_LO: 0.1 - HARD_BG_RATIO: 0.8 - - REG_FG_THRESH: 0.55 - - LOSS_CONFIG: - CLS_LOSS: BinaryCrossEntropy - REG_LOSS: smooth-l1 - CORNER_LOSS_REGULARIZATION: True - LOSS_WEIGHTS: { - 'rcnn_cls_weight': 1.0, - 'rcnn_reg_weight': 1.0, - 'rcnn_corner_weight': 2.0, - 'traj_reg_weight': [2.0, 2.0, 2.0], - 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] - } - - POST_PROCESSING: - RECALL_THRESH_LIST: [0.3, 0.5, 0.7] - SCORE_THRESH: 0.1 - OUTPUT_RAW_SCORE: False - SAVE_BBOX: False - EVAL_METRIC: waymo - NOT_APPLY_NMS_FOR_VEL: True - - NMS_CONFIG: - MULTI_CLASSES_NMS: False - NMS_TYPE: nms_gpu - NMS_THRESH: 0.7 - NMS_PRE_MAXSIZE: 4096 - NMS_POST_MAXSIZE: 500 - -OPTIMIZATION: - BATCH_SIZE_PER_GPU: 2 - NUM_EPOCHS: 6 - - OPTIMIZER: adam_onecycle - LR: 0.003 - WEIGHT_DECAY: 0.01 - MOMENTUM: 0.9 - - MOMS: [0.95, 0.85] - PCT_START: 0.4 - DIV_FACTOR: 10 - DECAY_STEP_LIST: [35, 45] - LR_DECAY: 0.1 - LR_CLIP: 0.0000001 - - LR_WARMUP: False - WARMUP_EPOCH: 1 - - GRAD_NORM_CLIP: 10 diff --git a/tools/cfgs/waymo_models/mppnet_4frames.yaml b/tools/cfgs/waymo_models/mppnet_4frames.yaml deleted file mode 100644 index db5593ea2..000000000 --- a/tools/cfgs/waymo_models/mppnet_4frames.yaml +++ /dev/null @@ -1,167 +0,0 @@ -CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist'] - -DATA_CONFIG: - _BASE_CONFIG_: cfgs/dataset_configs/waymo_dataset.yaml - PROCESSED_DATA_TAG: 'waymo_processed_data_v0_5_0' - - SAMPLED_INTERVAL: { - 'train': 1, - 'test': 1 - } - FILTER_EMPTY_BOXES_FOR_TRAIN: True - DISABLE_NLZ_FLAG_ON_POINTS: True - - SEQUENCE_CONFIG: - ENABLED: True - SAMPLE_OFFSET: [-3,0] - - USE_PREDBOX: True - ROI_BOXES_PATH: { - 'train': '../output/xxxxx/train/result.pkl', # example: predicted boxes of RPN in training set - 'test': '../output/xxxxx/val/result.pkl', # example: predicted boxes of RPN in evalulation set - } - - DATA_AUGMENTOR: - DISABLE_AUG_LIST: [ 'placeholder' ] - AUG_CONFIG_LIST: - - - NAME: random_world_flip - ALONG_AXIS_LIST: [ 'x', 'y' ] - - - NAME: random_world_rotation - WORLD_ROT_ANGLE: [ -0.78539816, 0.78539816 ] - - - NAME: random_world_scaling - WORLD_SCALE_RANGE: [ 0.95, 1.05 ] - - DATA_PROCESSOR: - - NAME: mask_points_and_boxes_outside_range - REMOVE_OUTSIDE_BOXES: True - - - NAME: shuffle_points - SHUFFLE_ENABLED: { - 'train': True, - 'test': True - } - - POINT_FEATURE_ENCODING: { - encoding_type: absolute_coordinates_encoding, - used_feature_list: ['x', 'y', 'z', 'intensity', 'elongation','time'], - src_feature_list: ['x', 'y', 'z', 'intensity', 'elongation','time'], - } - - -MODEL: - NAME: MPPNet - - ROI_HEAD: - NAME: MPPNetHead - TRANS_INPUT: 256 - CLASS_AGNOSTIC: True - USE_BOX_ENCODING: - ENABLED: True - AVG_STAGE1_SCORE: True - USE_TRAJ_EMPTY_MASK: True - USE_AUX_LOSS: True - IOU_WEIGHT: [0.5,0.4] - - - - ROI_GRID_POOL: - GRID_SIZE: 4 - MLPS: [[128,128], [128,128]] - POOL_RADIUS: [0.8, 1.6] - NSAMPLE: [16, 16] - POOL_METHOD: max_pool - - - Transformer: - num_lidar_points: 128 - num_proxy_points: 64 # GRID_SIZE*GRID_SIZE*GRID_SIZE - pos_hidden_dim: 64 - enc_layers: 3 - dim_feedforward: 512 - hidden_dim: 256 #equal to ROI_HEAD.TRANS_INPUT - dropout: 0.1 - nheads: 4 - pre_norm: False - num_frames: 4 - num_groups: 4 - use_grid_pos: - enabled: True - init_type: index - - use_mlp_mixer: - enabled: True - hidden_dim: 16 - - TARGET_CONFIG: - BOX_CODER: ResidualCoder - ROI_PER_IMAGE: 96 - FG_RATIO: 0.5 - REG_AUG_METHOD: single - ROI_FG_AUG_TIMES: 10 - RATIO: 0.2 - USE_ROI_AUG: True - USE_TRAJ_AUG: - ENABLED: True - THRESHOD: 0.8 - SAMPLE_ROI_BY_EACH_CLASS: True - CLS_SCORE_TYPE: roi_iou - - CLS_FG_THRESH: 0.75 - CLS_BG_THRESH: 0.25 - CLS_BG_THRESH_LO: 0.1 - HARD_BG_RATIO: 0.8 - - REG_FG_THRESH: 0.55 - - LOSS_CONFIG: - CLS_LOSS: BinaryCrossEntropy - REG_LOSS: smooth-l1 - CORNER_LOSS_REGULARIZATION: True - LOSS_WEIGHTS: { - 'rcnn_cls_weight': 1.0, - 'rcnn_reg_weight': 1.0, - 'rcnn_corner_weight': 2.0, - 'traj_reg_weight': [2.0, 2.0, 2.0], - 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] - } - - POST_PROCESSING: - RECALL_THRESH_LIST: [0.3, 0.5, 0.7] - SCORE_THRESH: 0.1 - OUTPUT_RAW_SCORE: False - SAVE_BBOX: False - EVAL_METRIC: waymo - NOT_APPLY_NMS_FOR_VEL: True - - NMS_CONFIG: - MULTI_CLASSES_NMS: False - NMS_TYPE: nms_gpu - NMS_THRESH: 0.7 - NMS_PRE_MAXSIZE: 4096 - NMS_POST_MAXSIZE: 500 - - -OPTIMIZATION: - BATCH_SIZE_PER_GPU: 2 - NUM_EPOCHS: 6 - - OPTIMIZER: adam_onecycle - LR: 0.003 - WEIGHT_DECAY: 0.01 - MOMENTUM: 0.9 - - MOMS: [0.95, 0.85] - PCT_START: 0.4 - DIV_FACTOR: 10 - DECAY_STEP_LIST: [35, 45] - LR_DECAY: 0.1 - LR_CLIP: 0.0000001 - - LR_WARMUP: False - WARMUP_EPOCH: 1 - - GRAD_NORM_CLIP: 10 - diff --git a/tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference.yaml b/tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference.yaml deleted file mode 100644 index 585747340..000000000 --- a/tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference.yaml +++ /dev/null @@ -1,194 +0,0 @@ -CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist'] - -DATA_CONFIG: - - _BASE_CONFIG_: cfgs/dataset_configs/waymo_dataset_multiframe.yaml - PROCESSED_DATA_TAG: 'waymo_processed_data_v0_5_0' - - SEQUENCE_CONFIG: - ENABLED: True - SAMPLE_OFFSET: [-3, 0] #16frame using [-15,0] - - POINT_FEATURE_ENCODING: { - encoding_type: absolute_coordinates_encoding, - used_feature_list: ['x', 'y', 'z', 'intensity', 'elongation','time'], - src_feature_list: ['x', 'y', 'z', 'intensity', 'elongation','time'], - } - - -MODEL: - NAME: MPPNetE2E - - VFE: - NAME: DynMeanVFE - - BACKBONE_3D: - NAME: VoxelResBackBone8x - - MAP_TO_BEV: - NAME: HeightCompression - NUM_BEV_FEATURES: 256 - - BACKBONE_2D: - NAME: BaseBEVBackbone - NUM_FRAME: 2 - LAYER_NUMS: [5, 5] - LAYER_STRIDES: [1, 2] - NUM_FILTERS: [128, 256] - UPSAMPLE_STRIDES: [1, 2] - NUM_UPSAMPLE_FILTERS: [256, 256] - - DENSE_HEAD: - NAME: CenterHead - CLASS_AGNOSTIC: False - - CLASS_NAMES_EACH_HEAD: [ - ['Vehicle', 'Pedestrian', 'Cyclist'] - ] - - SHARED_CONV_CHANNEL: 64 - USE_BIAS_BEFORE_NORM: True - NUM_HM_CONV: 2 - SEPARATE_HEAD_CFG: - HEAD_ORDER: ['center', 'center_z', 'dim', 'rot','vel'] - HEAD_DICT: { - 'center': {'out_channels': 2, 'num_conv': 2}, - 'center_z': {'out_channels': 1, 'num_conv': 2}, - 'dim': {'out_channels': 3, 'num_conv': 2}, - 'rot': {'out_channels': 2, 'num_conv': 2}, - 'vel': {'out_channels': 2, 'num_conv': 2}, - - } - - TARGET_ASSIGNER_CONFIG: - FEATURE_MAP_STRIDE: 8 - NUM_MAX_OBJS: 500 - GAUSSIAN_OVERLAP: 0.1 - MIN_RADIUS: 2 - - LOSS_CONFIG: - LOSS_WEIGHTS: { - 'cls_weight': 1.0, - 'loc_weight': 2.0, - 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.2, 0.2] - } - - POST_PROCESSING: - SCORE_THRESH: 0.1 - POST_CENTER_LIMIT_RANGE: [-75.2, -75.2, -2, 75.2, 75.2, 4] - MAX_OBJ_PER_SAMPLE: 500 - NMS_CONFIG: - NMS_TYPE: nms_gpu - NMS_THRESH: 0.7 - NMS_PRE_MAXSIZE: 4096 - NMS_POST_MAXSIZE: 500 - - ROI_HEAD: - NAME: MPPNetHeadE2E - TRANS_INPUT: 256 - CLASS_AGNOSTIC: True - USE_BOX_ENCODING: - ENABLED: True - NORM_T0: True - ALL_YAW_T0: True - AVG_STAGE1_SCORE: True - USE_TRAJ_EMPTY_MASK: True - USE_AUX_LOSS: True - IOU_WEIGHT: [0.5,0.4] - - ROI_GRID_POOL: #if using 16frame, change to the corresponding setting - GRID_SIZE: 4 - MLPS: [[128,128], [128,128]] - POOL_RADIUS: [0.8, 1.6] - NSAMPLE: [16, 16] - POOL_METHOD: max_pool - - Transformer: - num_lidar_points: 128 - num_proxy_points: 64 - pos_hidden_dim: 64 - enc_layers: 3 - dim_feedforward: 512 - hidden_dim: 256 - dropout: 0.1 - nheads: 4 - pre_norm: False - num_frames: 4 #16frame using 16 - num_groups: 4 - sequence_stride: 1 #16frame using 4 - use_grid_pos: - enabled: True - init_type: index - use_mlp_mixer: - enabled: True - hidden_dim: 16 - - TARGET_CONFIG: - BOX_CODER: ResidualCoder - ROI_PER_IMAGE: 96 - FG_RATIO: 0.5 - REG_AUG_METHOD: single - ROI_FG_AUG_TIMES: 10 - RATIO: 0.2 - USE_ROI_AUG: True - USE_TRAJ_AUG: - ENABLED: True - THRESHOD: 0.8 - SAMPLE_ROI_BY_EACH_CLASS: True - CLS_SCORE_TYPE: roi_iou - - CLS_FG_THRESH: 0.75 - CLS_BG_THRESH: 0.25 - CLS_BG_THRESH_LO: 0.1 - HARD_BG_RATIO: 0.8 - - REG_FG_THRESH: 0.55 - - LOSS_CONFIG: - CLS_LOSS: BinaryCrossEntropy - REG_LOSS: smooth-l1 - CORNER_LOSS_REGULARIZATION: True - LOSS_WEIGHTS: { - 'rcnn_cls_weight': 1.0, - 'rcnn_reg_weight': 1.0, - 'rcnn_corner_weight': 2.0, - 'traj_reg_weight': [2.0, 2.0, 2.0], - 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] - } - - POST_PROCESSING: - RECALL_THRESH_LIST: [0.3, 0.5, 0.7] - SCORE_THRESH: 0.1 - OUTPUT_RAW_SCORE: False - SAVE_BBOX: False - EVAL_METRIC: waymo - NOT_APPLY_NMS_FOR_VEL: True - - NMS_CONFIG: - MULTI_CLASSES_NMS: False - NMS_TYPE: nms_gpu - NMS_THRESH: 0.7 - NMS_PRE_MAXSIZE: 4096 - NMS_POST_MAXSIZE: 500 - - -OPTIMIZATION: - BATCH_SIZE_PER_GPU: 2 - NUM_EPOCHS: 6 - - OPTIMIZER: adam_onecycle - LR: 0.003 - WEIGHT_DECAY: 0.01 - MOMENTUM: 0.9 - - MOMS: [0.95, 0.85] - PCT_START: 0.4 - DIV_FACTOR: 10 - DECAY_STEP_LIST: [35, 45] - LR_DECAY: 0.1 - LR_CLIP: 0.0000001 - - LR_WARMUP: False - WARMUP_EPOCH: 1 - - GRAD_NORM_CLIP: 10 \ No newline at end of file diff --git a/tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml b/tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml deleted file mode 100644 index 1543f3e84..000000000 --- a/tools/cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml +++ /dev/null @@ -1,194 +0,0 @@ -CLASS_NAMES: ['Vehicle', 'Pedestrian', 'Cyclist'] - -DATA_CONFIG: - - _BASE_CONFIG_: cfgs/dataset_configs/waymo_dataset_multiframe.yaml - PROCESSED_DATA_TAG: 'waymo_processed_data_v0_5_0' - - SEQUENCE_CONFIG: - ENABLED: True - SAMPLE_OFFSET: [-15, 0] #16frame using [-15,0] - - POINT_FEATURE_ENCODING: { - encoding_type: absolute_coordinates_encoding, - used_feature_list: ['x', 'y', 'z', 'intensity', 'elongation','time'], - src_feature_list: ['x', 'y', 'z', 'intensity', 'elongation','time'], - } - - -MODEL: - NAME: MPPNetE2E - - VFE: - NAME: DynMeanVFE - - BACKBONE_3D: - NAME: VoxelResBackBone8x - - MAP_TO_BEV: - NAME: HeightCompression - NUM_BEV_FEATURES: 256 - - BACKBONE_2D: - NAME: BaseBEVBackbone - NUM_FRAME: 2 - LAYER_NUMS: [5, 5] - LAYER_STRIDES: [1, 2] - NUM_FILTERS: [128, 256] - UPSAMPLE_STRIDES: [1, 2] - NUM_UPSAMPLE_FILTERS: [256, 256] - - DENSE_HEAD: - NAME: CenterHead - CLASS_AGNOSTIC: False - - CLASS_NAMES_EACH_HEAD: [ - ['Vehicle', 'Pedestrian', 'Cyclist'] - ] - - SHARED_CONV_CHANNEL: 64 - USE_BIAS_BEFORE_NORM: True - NUM_HM_CONV: 2 - SEPARATE_HEAD_CFG: - HEAD_ORDER: ['center', 'center_z', 'dim', 'rot','vel'] - HEAD_DICT: { - 'center': {'out_channels': 2, 'num_conv': 2}, - 'center_z': {'out_channels': 1, 'num_conv': 2}, - 'dim': {'out_channels': 3, 'num_conv': 2}, - 'rot': {'out_channels': 2, 'num_conv': 2}, - 'vel': {'out_channels': 2, 'num_conv': 2}, - - } - - TARGET_ASSIGNER_CONFIG: - FEATURE_MAP_STRIDE: 8 - NUM_MAX_OBJS: 500 - GAUSSIAN_OVERLAP: 0.1 - MIN_RADIUS: 2 - - LOSS_CONFIG: - LOSS_WEIGHTS: { - 'cls_weight': 1.0, - 'loc_weight': 2.0, - 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.2, 0.2] - } - - POST_PROCESSING: - SCORE_THRESH: 0.1 - POST_CENTER_LIMIT_RANGE: [-75.2, -75.2, -2, 75.2, 75.2, 4] - MAX_OBJ_PER_SAMPLE: 500 - NMS_CONFIG: - NMS_TYPE: nms_gpu - NMS_THRESH: 0.7 - NMS_PRE_MAXSIZE: 4096 - NMS_POST_MAXSIZE: 500 - - ROI_HEAD: - NAME: MPPNetHeadE2E - TRANS_INPUT: 256 - CLASS_AGNOSTIC: True - USE_BOX_ENCODING: - ENABLED: True - NORM_T0: True - ALL_YAW_T0: True - AVG_STAGE1_SCORE: True - USE_TRAJ_EMPTY_MASK: True - USE_AUX_LOSS: True - IOU_WEIGHT: [0.5,0.4] - - ROI_GRID_POOL: #if using 16frame, change to the corresponding setting - GRID_SIZE: 4 - MLPS: [[64,64]] - POOL_RADIUS: [0.8] - NSAMPLE: [16] - POOL_METHOD: max_pool - - Transformer: - num_lidar_points: 128 - num_proxy_points: 64 # GRID_SIZE*GRID_SIZE*GRID_SIZE - pos_hidden_dim: 64 - enc_layers: 3 - dim_feedforward: 512 - hidden_dim: 256 #equal to ROI_HEAD.TRANS_INPUT - dropout: 0.1 - nheads: 4 - pre_norm: False - num_frames: 16 #16frame using 16 - num_groups: 4 - sequence_stride: 4 #16frame using 4 - use_grid_pos: - enabled: True - init_type: index - use_mlp_mixer: - enabled: True - hidden_dim: 16 - - TARGET_CONFIG: - BOX_CODER: ResidualCoder - ROI_PER_IMAGE: 96 - FG_RATIO: 0.5 - REG_AUG_METHOD: single - ROI_FG_AUG_TIMES: 10 - RATIO: 0.2 - USE_ROI_AUG: True - USE_TRAJ_AUG: - ENABLED: True - THRESHOD: 0.8 - SAMPLE_ROI_BY_EACH_CLASS: True - CLS_SCORE_TYPE: roi_iou - - CLS_FG_THRESH: 0.75 - CLS_BG_THRESH: 0.25 - CLS_BG_THRESH_LO: 0.1 - HARD_BG_RATIO: 0.8 - - REG_FG_THRESH: 0.55 - - LOSS_CONFIG: - CLS_LOSS: BinaryCrossEntropy - REG_LOSS: smooth-l1 - CORNER_LOSS_REGULARIZATION: True - LOSS_WEIGHTS: { - 'rcnn_cls_weight': 1.0, - 'rcnn_reg_weight': 1.0, - 'rcnn_corner_weight': 2.0, - 'traj_reg_weight': [2.0, 2.0, 2.0], - 'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] - } - - POST_PROCESSING: - RECALL_THRESH_LIST: [0.3, 0.5, 0.7] - SCORE_THRESH: 0.1 - OUTPUT_RAW_SCORE: False - SAVE_BBOX: False - EVAL_METRIC: waymo - NOT_APPLY_NMS_FOR_VEL: True - - NMS_CONFIG: - MULTI_CLASSES_NMS: False - NMS_TYPE: nms_gpu - NMS_THRESH: 0.7 - NMS_PRE_MAXSIZE: 4096 - NMS_POST_MAXSIZE: 500 - - -OPTIMIZATION: - BATCH_SIZE_PER_GPU: 2 - NUM_EPOCHS: 6 - - OPTIMIZER: adam_onecycle - LR: 0.003 - WEIGHT_DECAY: 0.01 - MOMENTUM: 0.9 - - MOMS: [0.95, 0.85] - PCT_START: 0.4 - DIV_FACTOR: 10 - DECAY_STEP_LIST: [35, 45] - LR_DECAY: 0.1 - LR_CLIP: 0.0000001 - - LR_WARMUP: False - WARMUP_EPOCH: 1 - - GRAD_NORM_CLIP: 10 diff --git a/tools/test_cfg_refactor.bash b/tools/test_cfg_refactor.bash deleted file mode 100644 index 34f41af7b..000000000 --- a/tools/test_cfg_refactor.bash +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env bash - -mppnet=$(python -c " -from train import parse_config -import sys -import yaml -sys.argv += [ - '--cfg_file', - 'cfgs/waymo_models/mppnet.yaml', -] -print(yaml.dump(parse_config()[1], default_flow_style=None)) -") - -mppnet_4frames=$(python -c " -from train import parse_config -import sys -import yaml -sys.argv += [ - '--cfg_file', - 'cfgs/waymo_models/mppnet_4frames.yaml', -] -print(yaml.dump(parse_config()[1], default_flow_style=None)) -") - -agg_mppnet_4frames=$(python -c " -from train import parse_config -import sys -import yaml -sys.argv += [ - '--cfg_file', - 'cfgs/waymo_models/mppnet.yaml', - '--modify', - 'cfgs/waymo_models/modifiers/mppnet/4frames.yaml', -] -print(yaml.dump(parse_config()[1], default_flow_style=None)) -") - -mppnet_16frames=$(python -c " -from train import parse_config -import sys -import yaml -sys.argv += [ - '--cfg_file', - 'cfgs/waymo_models/mppnet_16frames.yaml', -] -print(yaml.dump(parse_config()[1], default_flow_style=None)) -") - -agg_mppnet_16frames=$(python -c " -from train import parse_config -import sys -import yaml -sys.argv += [ - '--cfg_file', - 'cfgs/waymo_models/mppnet.yaml', - '--modify', - 'cfgs/waymo_models/modifiers/mppnet/16frames.yaml', -] -print(yaml.dump(parse_config()[1], default_flow_style=None)) -") - -mppnet_e2e_membank_inf=$(python -c " -from train import parse_config -import sys -import yaml -sys.argv += [ - '--cfg_file', - 'cfgs/waymo_models/mppnet_e2e_memorybank_inference.yaml', -] -print(yaml.dump(parse_config()[1], default_flow_style=None)) -") - -agg_mppnet_e2e_membank_inf=$(python -c " -from train import parse_config -import sys -import yaml -sys.argv += [ - '--cfg_file', - 'cfgs/waymo_models/mppnet.yaml', - '--modify', - 'cfgs/waymo_models/modifiers/mppnet/e2e_memorybank_inference.yaml', -] -print(yaml.dump(parse_config()[1], default_flow_style=None)) -") - -mppnet_e2e_membank_inf_16frames=$(python -c " -from train import parse_config -import sys -import yaml -sys.argv += [ - '--cfg_file', - 'cfgs/waymo_models/mppnet_e2e_memorybank_inference_16frames.yaml', -] -print(yaml.dump(parse_config()[1], default_flow_style=None)) -") - -agg_mppnet_e2e_membank_inf_16frames=$(python -c " -from train import parse_config -import sys -import yaml -sys.argv += [ - '--cfg_file', - 'cfgs/waymo_models/mppnet.yaml', - '--modify', - 'cfgs/waymo_models/modifiers/mppnet/e2e_memorybank_inference.yaml', - 'cfgs/waymo_models/modifiers/mppnet/16frames.yaml', -] -print(yaml.dump(parse_config()[1], default_flow_style=None)) -") - -diff <(echo "$mppnet") <(echo "$mppnet_4frames") -diff <(echo "$mppnet_4frames") <(echo "$agg_mppnet_4frames") -diff <(echo "$mppnet_16frames") <(echo "$agg_mppnet_16frames") -diff <(echo "$mppnet_e2e_membank_inf") <(echo "$agg_mppnet_e2e_membank_inf") -diff <(echo "$mppnet_e2e_membank_inf_16frames") <(echo "$agg_mppnet_e2e_membank_inf_16frames") \ No newline at end of file