dvlab-research/VoxelNeXt

Custom/KITTI Dataset Training Issue

Closed this issue · 6 comments

Thank you for your great work,

  • I read your paper, and study your code, but I have some problem when training my custom dataset. My dataset format same as KITTI. For other backbones like PVRCNN, SECOND it works normally, but with VoxelNext It wont work and get the error bellow. It would be nice if you show me some tips to fix the error.
    image

  • It would be nice if you have the guide to train KITTI, or Custom dataset, that is really helpful.
    Thank you so much.

Hi,

Thanks for your interest in our work. Would you please provide me your config file on KITTI?
I will have a try this weekend.

Regards,
Yukang Chen

@yukang2017 thank you so much,

Here is the sample of VoxelNext in KITTI dataset, basically I just change the object's name, Lidar range, and the OpenPCdet will works with the data format [x, y, z, dx, dy, dz, yaw].

CLASS_NAMES: ['Car', 'Pedestrian', 'Cyclist']

DATA_CONFIG:
BASE_CONFIG: cfgs/dataset_configs/kitti_dataset.yaml
POINT_CLOUD_RANGE: [0, -39.68, -3, 69.12, 39.68, 1]
DATA_PROCESSOR:

DATA_AUGMENTOR:
    DISABLE_AUG_LIST: ['placeholder']
    AUG_CONFIG_LIST:
        - NAME: gt_sampling
          USE_ROAD_PLANE: True
          DB_INFO_PATH:
              - kitti_dbinfos_train.pkl
          PREPARE: {
             filter_by_min_points: ['Car:5', 'Pedestrian:5', 'Cyclist:5'],
          }

          SAMPLE_GROUPS: ['Car:15','Pedestrian:15', 'Cyclist:15']
          NUM_POINT_FEATURES: 4
          DATABASE_WITH_FAKELIDAR: False
          REMOVE_EXTRA_WIDTH: [0.0, 0.0, 0.0]
          LIMIT_WHOLE_SCENE: False

        - NAME: random_world_flip
          ALONG_AXIS_LIST: ['x']

        - NAME: random_world_rotation
          WORLD_ROT_ANGLE: [-0.78539816, 0.78539816]

        - NAME: random_world_scaling
          WORLD_SCALE_RANGE: [0.95, 1.05]

MODEL:
NAME: VoxelNeXt

VFE:
    NAME: MeanVFE

BACKBONE_3D:
    NAME: VoxelResBackBone8xVoxelNeXt

DENSE_HEAD:
    NAME: VoxelNeXtHead
    CLASS_AGNOSTIC: False
    INPUT_FEATURES: 128

    CLASS_NAMES_EACH_HEAD: [
        ['car'], 
        ['truck', 'construction_vehicle'],
        ['bus', 'trailer'],
        ['barrier'],
        ['motorcycle', 'bicycle'],
        ['pedestrian', 'traffic_cone'],
    ]
    
    SHARED_CONV_CHANNEL: 128
    KERNEL_SIZE_HEAD: 1
    
    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': 0.25,
            'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.2, 0.2, 1.0, 1.0]
        }

    POST_PROCESSING:
        SCORE_THRESH: 0.1
        POST_CENTER_LIMIT_RANGE: [-61.2, -61.2, -10.0, 61.2, 61.2, 10.0]
        MAX_OBJ_PER_SAMPLE: 500
        NMS_CONFIG:
            NMS_TYPE: nms_gpu
            NMS_THRESH: 0.2
            NMS_PRE_MAXSIZE: 1000
            NMS_POST_MAXSIZE: 83

POST_PROCESSING:
    RECALL_THRESH_LIST: [0.3, 0.5, 0.7]

    EVAL_METRIC: kitti

OPTIMIZATION:
BATCH_SIZE_PER_GPU: 4
NUM_EPOCHS: 20

OPTIMIZER: adam_onecycle
LR: 0.001
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

Actually, in my previous experience, if it works in KITTI dataset, then it should work with Custom dataset well.
I'm looking forward to your reply, thank you

Hi @hoangduyloc,

Please try this config.

https://github.com/dvlab-research/VoxelNeXt/blob/master/tools/cfgs/kitti_models/voxelnext.yaml

I have trained and tested it on KITTI. Below is the result. Note that, you can try to tune the loss weight and post-processing hyper-parameters to obtained better result.

bbox AP:90.3782, 89.3870, 88.7935
bev  AP:89.1411, 86.9760, 85.4110
3d   AP:87.0420, 77.2991, 76.5183
aos  AP:90.37, 89.25, 88.61
Car AP_R40@0.70, 0.70, 0.70:
bbox AP:95.3763, 93.7284, 91.4338
bev  AP:91.5849, 87.5852, 86.8621
3d   AP:88.6480, 80.1391, 77.7470
aos  AP:95.36, 93.56, 91.23
Car AP@0.70, 0.50, 0.50:
bbox AP:90.3782, 89.3870, 88.7935
bev  AP:94.1812, 93.1726, 89.0778
3d   AP:94.1367, 89.4471, 88.9638
aos  AP:90.37, 89.25, 88.61
Car AP_R40@0.70, 0.50, 0.50:
bbox AP:95.3763, 93.7284, 91.4338
bev  AP:96.4958, 95.4601, 93.7758
3d   AP:96.3723, 94.0739, 93.5335
aos  AP:95.36, 93.56, 91.23

Pedestrian AP@0.50, 0.50, 0.50:
bbox AP:78.9076, 74.8837, 71.7826
bev  AP:63.9831, 60.5570, 56.8279
3d   AP:59.9474, 55.8261, 51.2499
aos  AP:77.47, 73.07, 69.42
Pedestrian AP_R40@0.50, 0.50, 0.50:
bbox AP:79.7630, 76.3886, 73.1756
bev  AP:64.0781, 60.2438, 55.8577
3d   AP:58.5884, 54.7600, 49.9538
aos  AP:78.20, 74.33, 70.46
Pedestrian AP@0.50, 0.25, 0.25:
bbox AP:78.9076, 74.8837, 71.7826
bev  AP:84.4825, 81.7914, 79.0559
3d   AP:84.2736, 81.5116, 78.7618
aos  AP:77.47, 73.07, 69.42
Pedestrian AP_R40@0.50, 0.25, 0.25:
bbox AP:79.7630, 76.3886, 73.1756
bev  AP:86.4864, 84.1681, 80.5073
3d   AP:86.2521, 83.8222, 80.1752
aos  AP:78.20, 74.33, 70.46

Cyclist AP@0.50, 0.50, 0.50:
bbox AP:88.5463, 75.0048, 72.4298
bev  AP:87.0297, 70.7931, 66.7646
3d   AP:83.7304, 67.3986, 62.8305
aos  AP:88.39, 74.64, 72.07
Cyclist AP_R40@0.50, 0.50, 0.50:
bbox AP:93.1879, 76.7464, 72.9173
bev  AP:91.1662, 71.6552, 67.2355
3d   AP:87.1778, 67.1069, 63.0479
aos  AP:93.00, 76.35, 72.52
Cyclist AP@0.50, 0.25, 0.25:
bbox AP:88.5463, 75.0048, 72.4298
bev  AP:88.3133, 74.7221, 70.6009
3d   AP:88.3133, 74.7146, 70.5426
aos  AP:88.39, 74.64, 72.07
Cyclist AP_R40@0.50, 0.25, 0.25:
bbox AP:93.1879, 76.7464, 72.9173
bev  AP:92.7491, 75.4853, 71.3751
3d   AP:92.7467, 75.4782, 71.2855
aos  AP:93.00, 76.35, 72.52

Regards,
Yukon Chen

Thank you so much! I will test it out

Thanks. I will close this issue. Please feel free to reopen it, if there are any issue.

Thank you for your great work,

  • I read your paper, and study your code, but I have some problem when training my custom dataset. My dataset format same as KITTI. For other backbones like PVRCNN, SECOND it works normally, but with VoxelNext It wont work and get the error bellow. It would be nice if you show me some tips to fix the error.
    image
  • It would be nice if you have the guide to train KITTI, or Custom dataset, that is really helpful.
    Thank you so much.

hi, could you tell me your torch version,3Q