前言

到目前为止还没跑通,但是bug实在太多了,我的每一步都有错,如果不记录下来又会有遗漏,(肯定已经遗漏了很多),在这里把能想起来的都记录一下以便不时之需。另外,本人深度学习小白,一上来跑这么难的代码我大概是脑子进水了,如果有看到的话,十分欢迎且需要加微信跟我详细交流。以下纯属我个人理解,肯定有误差,仅为个人记录,请酌情参考。
9.29更新:能跑了能跑了,喜大普奔!!
10.1更新:evaluation出结果啦,准确率还真挺高!!
10.21更新:发现了之前几个疑惑的点的原因(写在最后)
10.25更新:补齐SFD方法简介。

SFD简介

Sparse Fuse Dense: Towards High Quality 3D Detection with Depth Completion. CVPR 2022.
在kitti数据集上目前排名前三,文章通俗易懂(也可能是我没看懂)
(这部分后面再补吧)

文章贡献:

  1. 3D-GAF:融合点云和伪点云的网络
  2. SynAugment:针对SFD的数据增强方法
  3. CPConv:伪点云的特征提取器

这里有一个疑惑是: CPConv在3D-GAF前使用,但是作者却放在了最后一位介绍它,按逻辑来讲,放在后面的应该是最不重要的,但是3D-GAF反而是里面最难理解的。
个人理解: 最主要的创新在于——之前的方法都是FOV与BEV的2D融合,而本方法将2D信息通过深度转化为3D,使得在每个ROI中提取伪点云和原始点云的3D特征(在3D网格内),再按权重融合、reshanpe、FC。(这可能就是3D-GAF放在第一位的原因吧)。但是我还是没能理解CPConv,主要是维度变换好凌乱,一会儿N个一会儿K个,感觉还是需要输出看维度。
最后一个疑惑是: 从实验结果看,没有加这些操作的准确率就很高,因为本身的baseline准确率就很高,但并不知道baseline这么高的原因是?

代码调试

SFD:Github官方源码

环境配置

作者提供了两种方式:Voxel-R-CNN或者OpenPCDet,此处使用了后者。OpenPCDet安装步骤提供在如下链接,特别要提醒的是该文章中sudo apt-get install nvidia-cuda-toolkit命令千万千万不要在系统中输入,否则会导致你cuda,cudnn全部重装!!!其余按照步骤来就好。另外,文章中提到mayavi包的安装会出问题,其实我没有安装mayavi包的时候,OPenPDCet就能正常运行。但是SFD还是需要安装mayavi,终究还是逃不过。由于各种原因,我的Python是3.8版本,如果你也是python3.8的话,可参考链接安装mayavi包,最终需要在图形化界面运行以下命令(如:远程桌面连接或者vnc,反正不是ssh),否则会报错。

python demo.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml     --ckpt pv_rcnn_8369.pth     --data_path data/kitti/training/velodyne/000008.bin

组织数据集

接着就按github上作者提供的路径下载数据集和相关文件。需要注意的是,这里的数据有70G+,所以要事先想好你是不是要挂载目录什么的,不要像我一样傻乎乎弄了半天发现服务器存储空间不够了(我真是哭死,也没人告诉我啊)。

问题报错

以下问题当你出错了再来查看,参考知乎连接包括:spconv包出错和单卡环境运行问题。

RunTimeError问题

原因: 因为服务器上只有两个gpu且不知道好不好用,总之按作者提供的方式运行就会报各种cuda错误,所以做出如下修改(因为时间过去有点久了,所以应该不全)。

首先,不使用文章中的命令,在终端中输入以下命令测试:

python train.py --cfg_file cfgs/kitti_models/sfd.yaml --batch_size 2

PS: 这里batch_size先设置成1就能跑起来,如果设置成2会报出很多错,下面会一一解决batch_size=2的问题。

1. DataLoader worker (pid xxx) is killed by signal
num_workers设置为0,也就是\tools\train.py第27行,default =0

parser.add_argument('--workers', type=int, default=0, help='number of workers for dataloader')

2. No CUDA GPUs are available/Cuda out of memory

# tools/train.py
# 62行修改为0
os.environ["CUDA_VISIBLE_DEVICES"]="0"
# 这里根据你的需要来,如果gpu显存不够会报Cuda out of memory的错误
# os.environ["CUDA_VISIBLE_DEVICES"]="-1" #表示用cpu

KeyError问题

1.KeyError: ‘KittiDatasetSFD’
详细查看发现输出的根目录在OpenPCDet文件夹下,虽然我不知道为什么会代码会跑到这里,但是只要把OpenPCDet和SFD两个项目文件不要放在同一个文件夹下就可以解决。(即:把OpenPCDet藏得远远的)。github的issue里也有人有这个错误,不知道是不是跟我一样的情况。
cfg.ROOT_DIR总是会自动找错地方,就会发生KeyError或者DataLoader=0等问题,可以检查一下路径对不对。

2.KeyError: ‘road_plane’
在sfd.yaml文件中第12行

USE_ROAD_PLANE: Flase

TypeError

当batch_size=2时,kitti_dataset_spf.py中会报TypeError,是‘valid_noise’这个Key出了问题,参考知乎连接在for循环(约400行)前加入

data_dict = data_dict.pop('valid_noise')

会报其他的错误-----说是list没有item()方法,不懂==。干脆在上一个for循环里直接删除,代码如下:

#485行左右
for key, val in cur_sample.items():
(+)    if key == 'valid_noise':
(+)        continuedata_dict[key].append(val)

Sponcv包出错问题

这里先说明我安装的是sponcv2.1版本,也就是自动安装的

之后会报关于sponcv的各种错误,要做以下几处修改才能解决:
1. AttributeError: module ‘spconv‘ has no attribute ‘SparseModule‘
import spconv 要改写成 import spconv.pytorch as spconv
2. 我也不太记得了,总之要按照这个链接Github把所有报错(??)的文件都更改一遍,刚开始抱着试试看的态度逐行修改,确实不报错了。
理论上是应该把所有github中提到的文件都修改一遍,但我是哪里报错改哪里,所以只改了以下文件:

data_processor.py
dataset.py
detector3d_template.py
spconv_utils.py

AssertionError

AssertionError: must be contiguous tensor
model/roi_heads/sfd_head.py

#约第600行,更改如下
coords = sparse_idx.int().contiguous()

ModuleNotFoundError

重新运行setup

cd SFD
python setup.py develop
cd pcdet/ops/iou3d/cuda_op
python setup.py develop
cd ../../../..

NotImplementError或者是NAN的问题

具体错误如下

File "/home/tianran/workdir/SFD/pcdet/models/roi_heads/target_assigner/proposal_target_layer.py", line 162, in subsample_rois
raise NotImplementedError
NotImplementedError
maxoverlaps:(min=nan, max=nan)
ERROR: FG=0, BG=0

解决方案(此处参考知乎链接和github上的issue):
(必选) 在sfd_head_utils.py的points_features[:, 3:6] /= 255.0这一行代码后增加:

from torch.nn.functional import normalizepoints_features[:, :3] = normalize(points_features[:, :3], dim=0)
points_features[:, 6:] = normalize(points_features[:, 6:], dim=0)

(可选)
sfd.yaml文件中配置如下参数:(可选择性尝试)

LR = 0.01   #(缩小十倍)
REG_Loss: giou  # 换成diou
batch_size =1

验证阶段

assert lidar_file.exists()

# kitti_dataset_sfd.py 大约29行修改为以下内容
self.split = 'test' # self.dataset_cfg.DATA_SPLIT[self.mode]     #{'train': 'train', 'test': 'val'}
# 62行左右,个人感觉这里有点问题,因为 self.split要么是train要么是val,不可能是test,所以就不可能跑到test路径下验证
self.root_split_path = self.root_path / ('training' if self.split != 'test' else 'testing')  #这里没有改,只是写出来说明一下

准确率虽然运行出来了,0.7IOU大约94%,但我发现更改.txt文件并不会修改载入的数据量,似乎该载入什么数据早已在.pkl文件里写好了,这我就不能理解了,甚至产生了一个邪恶的想法。应该是因为代码太复杂我还理解不了吧,谁能告诉我原因吗?
刚开始有一点点眉目,老师就让我滚去做双目,好吧,先尝试到这里吧,花费三周时间跑代码,啊啊啊真可怕。

未完成的事情

1.模型的保存
2.如何评估准确率 √
3.准确率的问题 √
4.gpu多卡pytorch分布式训练;
5.结果可视化
6.跑自己的数据集

更新

  1. 为什么修改ImageSet文件夹下的.txt文件修改后训练的数据仍不变?
    以下命令会根据你的.txt文件、配置文件等写入.pkl文件中,之后运行就只会用到.pkl文件,所以若想修改训练或测试数据集,需要再次生成一个.pkl文件。
python -m pcdet.datasets.kitti.lidar_kitti_dataset create_kitti_infos
  1. 会自动寻找到其他的文件夹下的文件
    环境路径查找优先顺序需要调整,可参考链接中的Error7调整环境路径。

点云3D目标检测之——尝试SFD代码跑通(超详细!!)相关推荐

  1. 点云 3D 目标检测 - RangeDet(ICCV 2021)

    点云 3D 目标检测 - RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection - 基于LiDAR的3D目标检测 ...

  2. AAAI 2020 Oral论文--TANet:提升点云3D目标检测的稳健性

    点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 来自华中科技大学白翔教授组的刘哲的 AAAI Oral 论文<TANet: Ro ...

  3. OpenPCDet:点云3D目标检测开源库

    本文转载自知乎,已获作者授权转载. 链接:https://zhuanlan.zhihu.com/p/152120636 随着自动驾驶与机器人技术的不断发展,基于点云表征的3D目标检测领域在近年来取得了 ...

  4. AAAI 2020 Oral | 华科提出TANet:提升点云3D目标检测的稳健性

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转自机器之心. 机器之心发布 机器之心编辑部 2020 年 2 月 7 日-2 月 12 日,AAAI 2020 将于美国纽约举办.不久之前,大会官 ...

  5. 点云 3D 目标检测 - PointPillars(CVPR 2019)

    点云 3D 目标检测 - PointPillars(CVPR 2019) 摘要 1. 导言 1.1 相关工作 1.1.1 使用CNNs进行目标检测 1.1.2 激光雷达点云中的目标检测 1.2 贡献 ...

  6. 【点云3D目标检测】跑通CIA-SSD过程中的一些报错集锦

    前言 本文主要是介绍了在跑通CIA-SSD系列算法过程中遇到的一些bug,下面是对CIASSD算法的一个简单的介绍. CIA-SSD其基本思想是校准单步目标检测中分类和定位两个任务,提出Confide ...

  7. 点云 3D 目标检测 - VoxelNet(CVPR 2018)

    点云 3D 目标检测 - VoxelNet(CVPR 2018) 摘要 1. 引言 1.1 相关工作 1.2 贡献 2. VoxelNet 2.1 VoxelNet架构 2.1.1 特征学习网络 2. ...

  8. 激光点云3D目标检测算法之PointPillars

    前言 <PointPillars: Fast Encoders for Object Detection from Point Clouds>是一篇发表在CVPR 2019上关于激光点云3 ...

  9. 点云 3D 目标检测 - SECOND(Sensors 2018)

    点云 3D 目标检测 - SECOND: Sparsely Embedded Convolutional Detection - 稀疏嵌入卷积检测(Sensors 2018) 摘要 1. 引言 2. ...

最新文章

  1. [HTML]JS添加表格
  2. 联想拯救者y7000怎么配置Java环境_联想拯救者y7000重装系统教程
  3. typedef VS #define —— C语言中的 关键字 与 C指令
  4. Python 列表拷贝
  5. 【学生选课系统经典】C#与SQLSERVER连接:Windows应用工程案例
  6. NSARRAY的 内存管理
  7. python数字排序 循环_【python-leetcode448-循环排序】找到所有数组中消失的数字
  8. android setflag找不到_Android面试题4–Activity之Intent的Flag
  9. Video-Swin-Transformer (二)
  10. 跨越『时空』的难样本挖掘!
  11. angular学习-入门基础
  12. 通过脚本执行sql语句
  13. 外贸软件供应链中供应商管理解决方案
  14. 追逐冠军的少年 | 算法工程师岗毕业三年总结
  15. 数据分析-spss4.30
  16. 手机连接Linux教程,手机密钥连接linux主机
  17. 超分辨率 | 综述!使用深度学习来实现图像超分辨率
  18. Git学习之解决合并冲突
  19. PPT 如何取消幻灯片自动播放
  20. OAuth 2.0 的四种认证模式

热门文章

  1. win10进不了系统怎么强制进安全模式
  2. OSChina 周三乱弹 —— 国家命运与个人命运
  3. 【Ubuntu系统配置】006Ubuntu20.04安装QQ for Linux v3.0(del文件安装卸载)
  4. TopK推荐的评价指标
  5. php【websocket】
  6. 50个有趣的休闲网站 (外国)
  7. wish - 简单的窗口式(windowing) shell
  8. Python批量下载无版权图片
  9. 《小王爱迁移》文章链接
  10. ResourceUtils