SFD: Sparse Fuse Dense安装记录

背景

论文地址:

[2203.09780] Sparse Fuse Dense: Towards High Quality 3D Detection with Depth Completion (arxiv.org)

项目地址:SFD/pcdet/datasets/processor/data_processor.py at main · LittlePey/SFD (github.com)

项目安装过程出现了许多问题,作者的代码是基于spconv1.2.1的,而现在的spconv已经更新到2.3.6了,因此多数问题都是关于spconv版本的不兼容,当然中间还有一层OpenPCDet,好像也存在一些问题?(不太记得了)。过程中感谢几位大神的bug解决分享:

3D 目标检测 SFD 问题记录-CSDN博客

安装OpenPCDet遇到的问题-CSDN博客

调试SFDNet - 知乎 (zhihu.com)

环境安装

SFD基于VoxelRCNN,使用OpenPCDet安装的VoxelRCNN的环境,因此需要先配OpenPCDet,而OpenPCDet需要用到spconv,所以还需要安装spconv。在此之前安装过spconv2.3.6与spconv1.2.1,都出了各种各样的不好解决的问题,最后是spconv2.1能跑通。

创建环境 

conda create -n sfd python=3.9.13

安装torch

pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

安装spconv2.1

pip install spconv-cu111

安装openpcdet,知乎的那条链接说是"需要按照OpenPCDet的版本更新,让SFDNet兼容,直接copy就好",于是我下载了openpcdet0.4.0版本的代码安装的。解压项目文件后,运行

python setup.py develop

安装sfd

安装之前一定会要把SFD/setup.py的41行'spconv'注释掉,避免重复安装spconv


git clone https://github.com/LittlePey/SFD.git
cd SFD
python setup.py develop
cd pcdet/ops/iou3d/cuda_op
python setup.py develop
cd ../../../..

​

遇到一些关键问题

openpcdet和sfd的项目都有pcdet,因为openpcdet安装在sfd之前,所以在系统路径里会先查找openpcdet下的pcdet,这会导致需要用到sfd的代码时,会报一些找不到模块/文件的错误。比如下面的报错

Traceback (most recent call last):
  File "/home/project/SFD/tools/test.py", line 206, in <module>
    main()
  File "/home/project/SFD/tools/test.py", line 141, in main
    args, cfg = parse_config()
  File "/home/project/SFD/tools/test.py", line 49, in parse_config
    cfg_from_yaml_file(args.cfg_file, cfg)
  File "/home/project/openpcdet0.4.0/pcdet/config.py", line 72, in cfg_from_yaml_file
    with open(cfg_file, 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'cfgs/kitti_models/sfd.yaml'

解决方式:把/openpcdet/pcdet/__init__.py文件删除。

TypeError: Caught TypeError in DataLoader worker process 0.

解决方式:在/pcdet/pcdet/datasets/__init__.py:存着build_dataloader,里面有DataLoader函数——数据加载器,64行,将num_workers=works中的works直接改为0。

KeyError: 'points_pseudo' when try the demo to eval and visualize the result.

这个错误是运行demo.py时出现的,issue里的大佬回答的意思大概是openpcdet的demo不支持pseudo points数据。

解决方式:KeyError: 'points_pseudo' when try the demo to eval and visualize the result. · Issue #28 · LittlePey/SFD (github.com)

跟data_processor.py文件有关的错误

知乎链接提到的修改代码,涉及到data_processor.py,需要注意的是,sfd里的data_processor.py实际上是在openpcdet里的data_processor.py基础上增加了一些关于sfd的函数,比如mask_points_and_boxes_outside_range_sfd()。作者新增的transform_points_to_voxels_valid()实际上跟transform_points_to_voxels()一模一样,因此对transform_points_to_voxels的修改可以完全复制transform_points_to_voxels_valid()的修改。

总结

因为运行demo出现的keyerror问题,暂时不是很重要,于是就通过运行test.py来验证模型能否跑通。test的结果,AP相当可观

2023-12-11 08:52:51,966   INFO  Car AP@0.70, 0.70, 0.70:
bbox AP:97.8738, 95.9219, 89.9571
bev  AP:98.4781, 89.4051, 88.8067
3d   AP:90.0503, 87.7093, 85.3828
aos  AP:97.84, 95.71, 89.75
Car AP_R40@0.70, 0.70, 0.70:
bbox AP:99.2894, 97.4796, 95.3375
bev  AP:98.9791, 92.4196, 91.8746
3d   AP:95.9899, 89.0095, 86.1861
aos  AP:99.25, 97.28, 95.05
Car AP@0.70, 0.50, 0.50:
bbox AP:97.8738, 95.9219, 89.9571
bev  AP:97.9877, 95.8388, 89.9214
3d   AP:99.1273, 95.7727, 89.9020
aos  AP:97.84, 95.71, 89.75
Car AP_R40@0.70, 0.50, 0.50:
bbox AP:99.2894, 97.4796, 95.3375
bev  AP:99.3080, 97.7041, 95.3708
3d   AP:99.6213, 97.6251, 95.3010
aos  AP:99.25, 97.28, 95.05

2023-12-11 08:52:51,973   INFO  Result is save to /home/project/SFD/output/kitti_models/sfd/default/eval/epoch_34/val/default
2023-12-11 08:52:51,973   INFO  ****************Evaluation done.*****************

更新:训练跑通

当时跑测试用的作者提供的权重checkpoint_epoch_34,但是后来自己跑训练时也出了不少问题,不过好在这些问题都在知乎里有提到。

首先,训练刚启动就报的或者是训练几个epoch会出现的报错:

raise NotImplementedError
NotImplementedError
maxoverlaps:(min=nan, max=nan)
ERROR: FG=0, BG=0

参考他的解决方案,我是单卡训练的,所以调低学习率lr=0.001,增加归一化的代码,但是还是会出现以上的错误。在这条知乎链接的评论区有个哥们提到把giou改成diou,改了之后便可以正常训练了。

其次,训练完成伴随的eval会失败,报错内容是:

KeyError: 'valid_noise'

我试过:

# 在约491行的循环前加入
data_dict = data_dict.pop('valid_noise')

但还是行不通,挺玄学的,这行代码在我使用test脚本测试时就加入的,train结束带的测试就跑不通。

还是参考了评论区的意见,将这行代码改为就正常了。

try:
data_dict.pop('valid_noise')
except KeyError:
pass

另外,我用batch_size=4训练时,精度跟原文的差别不大,用batch_size=8训练时,精度只有原文的一半(不知道什么原因)。

# epoch40 eval    
INFO  Car AP@0.70, 0.70, 0.70:
bbox AP:97.9855, 90.2431, 89.8273
bev  AP:90.4933, 89.3074, 88.7005
3d   AP:89.8045, 85.6390, 85.3166
aos  AP:97.95, 90.17, 89.69
Car AP_R40@0.70, 0.70, 0.70:
bbox AP:99.3250, 95.6683, 95.3106
bev  AP:96.4717, 92.3358, 91.8340
3d   AP:95.2998, 88.0025, 85.8323
aos  AP:99.29, 95.56, 95.12
Car AP@0.70, 0.50, 0.50:
bbox AP:97.9855, 90.2431, 89.8273
bev  AP:98.0498, 95.9974, 89.7821
3d   AP:98.5390, 95.9506, 89.7693
aos  AP:97.95, 90.17, 89.69
Car AP_R40@0.70, 0.50, 0.50:
bbox AP:99.3250, 95.6683, 95.3106
bev  AP:99.3210, 97.6254, 95.2947
3d   AP:99.4555, 97.5557, 95.2606
aos  AP:99.29, 95.56, 95.12

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值