text: _base_ = [
      'models/model_radar.py',
      'datasets/inhouse-3d-3class_radar.py',
      '../_base_/schedules/cyclic_40e.py',
      '../_base_/default_runtime.py'
  ]
  
  point_cloud_range = [0, -39.68, -2, 69.12, 39.68, 2]
  # dataset settings
  data_root = 'data/inhouse_radar_only/kitti_format/'
  load_dim = 6
  use_dim = 6
  class_names = ['Pedestrian', 'Cyclist', 'Car']
  # PointPillars adopted a different sampling strategies among classes
  db_sampler = dict(
      data_root=data_root,
      info_path=data_root + 'inhouse_dbinfos_train.pkl',
      rate=1.0,
      prepare=dict(
          filter_by_difficulty=[-1],
          filter_by_min_points=dict(Car=5, Pedestrian=10, Cyclist=10)),
      classes=class_names,
      sample_groups=dict(Car=15, Pedestrian=0, Cyclist=0),
      points_loader=dict(
                  type='LoadPointsFromFile',
                  coord_type='LIDAR',
                  load_dim=load_dim,
                  use_dim=use_dim))
  
  # PointPillars uses different augmentation hyper parameters
  train_pipeline = [
      dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=load_dim, use_dim=use_dim),
      dict(type='LoadAnnotations3D', with_bbox_3d=True, with_label_3d=True),
      dict(type='ObjectSample', db_sampler=db_sampler),
      dict(
          type='ObjectNoise',
          num_try=100,
          translation_std=[0.25, 0.25, 0.25],
          global_rot_range=[0.0, 0.0],
          rot_range=[-0.15707963267, 0.15707963267]),
      dict(type='RandomFlip3D', flip_ratio_bev_horizontal=0.5),
      dict(
          type='GlobalRotScaleTrans',
          rot_range=[-0.78539816, 0.78539816],
          scale_ratio_range=[0.95, 1.05]),
      dict(type='PointsRangeFilter', point_cloud_range=point_cloud_range),
      dict(type='ObjectRangeFilter', point_cloud_range=point_cloud_range),
      dict(type='PointShuffle'),
      dict(type='DefaultFormatBundle3D', class_names=class_names),
      dict(type='Collect3D', keys=['points', 'gt_bboxes_3d', 'gt_labels_3d'])
  ]
  test_pipeline = [
      dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=load_dim, use_dim=use_dim),
      dict(
          type='MultiScaleFlipAug3D',
          img_scale=(1333, 800),
          pts_scale_ratio=1,
          flip=False,
          transforms=[
              dict(
                  type='GlobalRotScaleTrans',
                  rot_range=[0, 0],
                  scale_ratio_range=[1., 1.],
                  translation_std=[0, 0, 0]),
              dict(type='RandomFlip3D'),
              dict(
                  type='PointsRangeFilter', point_cloud_range=point_cloud_range),
              dict(
                  type='DefaultFormatBundle3D',
                  class_names=class_names,
                  with_label=False),
              dict(type='Collect3D', keys=['points'])
          ])
  ]
  
  data = dict(
      train=dict(pipeline=train_pipeline, classes=class_names),
      val=dict(pipeline=test_pipeline, classes=class_names),
      test=dict(pipeline=test_pipeline, classes=class_names))
  
  # In practice PointPillars also uses a different schedule
  # optimizer
  lr = 0.001
  optimizer = dict(lr=lr)
  # max_norm=35 is slightly better than 10 for PointPillars in the earlier
  # 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))
  # 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)
  