Cc-Hy / CMKD

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

关于深度估计预训练 #7

Open yangjiangeyjg opened 1 year ago

yangjiangeyjg commented 1 year ago

你好,请问提供的image pre-trained backbone是否经过深度估计预训练啊,没有的话如何进行深度估计预训练呢

Cc-Hy commented 1 year ago

你好,提供的image pre-trained backbone仅在coco上预训练过,不包括深度预训练 如果要进行深度预训练,你需要进行以下步骤

  1. 使用深度补全网络将稀疏的depth map补全
  2. 构建网络,仅包括backbone以及depth neck
  3. 使用代码提供的categorical depth loss进行训练

以上方法相对复杂,需要多个步骤,我们推荐你直接使用bev预训练,可以直接使用稀疏lidar数据,不需要补全,并且更加灵活 CUDA_VISIBLE_DEVICES=0,1 python -m torch.distributed.launch --nproc_per_node=2 train_cmkd.py --launcher pytorch --cfg ../tools/cfgs/kitti_models/CMKD/cmkd_kitti_eigen_R50_scd_bev.yaml --tcp_port 16677 --pretrained_lidar_model checkpoints/second_teacher.pth 根据我们的测试,使用BEV预训练的效果要优于深度预训练

yangjiangeyjg commented 1 year ago

The image backbone uses depth pre-training on KITTI train for 40 epochs. The image backbone uses depth pre-training on eigen clean split for 10 epochs. 感谢回复,但是论文中这两句话是什么意思呀

Cc-Hy commented 1 year ago

@yangjiangeyjg 你好,这两句话的意思是,在进行消融实验的时候,我们所使用的backbone在kitti train上进行了40个epoch的深度预训练; 而当最后在KITTI test上与其他方法进行比较的时候,我们所使用的backbone在eigen clean split上进行了10个epoch的深度预训练。

yangjiangeyjg commented 1 year ago

@yangjiangeyjg 你好,这两句话的意思是,在进行消融实验的时候,我们所使用的backbone在kitti train上进行了40个epoch的深度预训练; 而当最后在KITTI test上与其他方法进行比较的时候,我们所使用的backbone在eigen clean split上进行了10个epoch的深度预训练。

感谢回复。我的理解是

  1. image backbone没有进行过深度预训练,只是在image分支的蒸馏学习过程中,除了point提供的BEV特征监督,也有显示的深度信息监督深度估计部分。
  2. image backbone在kitti数据集上先进行过深度估计预训练,但是你们提供的backbone没有经过深度预训练。 请问是哪一种呢,谢谢。
Cc-Hy commented 1 year ago

@yangjiangeyjg 你好,文章中的实验与你的第2种理解相符合。

  1. 文章中的实验是在以下设定下进行的:我们首先将image backbone在kitti数据集上进行深度预训练(只有深度loss),然后在训练CMKD的过程中,没有加深度loss,只是BEV loss以及head部分的loss。
  2. 这个repo中提供的image backbone并没有经过深度预训练,实际上就是torchvision提供的bakcbone,只经过了COCO预训练。
  3. 你所提出的1也是完全可行的。如果深度预训练和detection训练用的是同一个数据集,你可以直接把depth loss加在所有loss中,而不需要单独去深度训练。目前的代码可以直接实现这个功能,你只需要在config中把loss depth和loss bev都设置为true即可。