Cc-Hy / CMKD

Cross-Modality Knowledge Distillation Network for Monocular 3D Object Detection (ECCV 2022 Oral)
Apache License 2.0
107 stars 9 forks source link

About cfg flies #13

Closed ksh11023 closed 1 year ago

ksh11023 commented 1 year ago

Thank you for sharing your great work!

I have some questions regarding the yaml files.

I think the difference between 'cmkd_kitti_R50' and 'cmkd_kitti_eigen_R50' is that the former one is trained with kitti3d dataset and the later one is trained with KITTI Raw data.

Then, what's the difference between cmkd_kitti_R50 _scd_bev.yaml , cmkd_kitti_R50_scd.yaml , cmkd_kitti_R50_scd_V2.yaml ?

  1. What kind of data is this -> 'train': [kitti_infos_train_soft.pkl] in cmkd_kitti_R50_scd.yaml

  2. To train CMKD the repo recommends to train BEV first, then whole model.

스크린샷 2023-01-13 오후 1 53 47

2-1) What does it mean by train BEV first? 2-2) Does cmkd_kitti_R50 _scd_bev.yaml used for training 'python train_cmkd.py --cfg xxx_bev.yaml' and cmkd_kitti_R50_scd_V2.yaml used for. training 'python train_cmkd.py --cfg xxx.yaml --pretrained_img_model ${BEV_pretrained_model_path} ' ?

Thank you.

Cc-Hy commented 1 year ago

Hi, thanks for your attention.

1. This is the old version label file, and you can consider this as CMKD V1. In that setting, we will save the predictions of the teacher model as files in advance and then read them, which is an off-line method. And in V2, we directly use the teacher model to generate the predictions (soft labels), which is an on-line method.

2.1 Please refer to https://github.com/Cc-Hy/CMKD/issues/14#issuecomment-1381678383.

2.2 Yes, xxx_bev.yaml cfgs is used for BEV training, and xxx.yaml is used for detection training with complete losses.

Here, the motivation of BEV training is to make the student model generate reasonable BEV features first, and then we add the detection losses. This can be considered as a trick to stablize and slightly boost the performance. And this is optional, you can also directly train CMKD with all losses at once, and use a larger epoch number, 80 for example.