一. 参考
1. 开源代码
感谢作者的开源~
2. 相关博客
- [1] second.pytorch环境配置及训练运行折腾史
- [2] second.pytorch环境配置记录
- [3] Xavier 运行 SECOND点云目标检测网络(一)
- [4] PointPillars/SECOND代码调试笔记
二. 遇到的问题
首先看自己电脑配置:
- 系统:Ubuntu 16.04
- 显卡:1080ti
- 环境:已装ROS kinetic, Anaconda 3
- cuda:9.0
- python : 3.6
我一开始想要复现最原始的开源的second代码 second,其实博客 [1] 已经说明的很完整了,照着是应该能复现出来的,但是我在复现的时候,一直遇到了很多问题,导致一直没有复现出来,后来我是参考 PCDet 进行复现,在这里记录一下我在复现过程中遇到的问题。
1. cmake 版本
注意cmake的版本,因为我自己的电脑上安装了ros,ros里带的cmake版本是3.5,是不满足的,所以首先就要升级cmake,我一开始还怕升级cmake之后,我的ros可能使用会有问题,但是实测是没有问题的,所以先升级cmake,升级的具体方法可以参考[1] [4]
2. 新建虚拟环境
最好之后的操作都是在anaconda的虚拟环境中进行,也为了避免产生其他的冲突。新建虚拟环境,python 版本 3.6 即可
conda create -n pc python=3.6
3. 安装依赖
安装依赖项参考 [1] , 记得加上清华的源,会安装的很快
- 这里注意numpy安装的版本,需要 numpy==1.14.0
这里我给的建议是依次这么安装:
pip install numpy==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simple
再安装 torch 1.1.0 和 torchvision 0.3.0, 这两个的安装包也可以在[1] 中博主给的百度云盘里找到
其他的依赖,就同理安装就可以了,这个不难
4. 安装 spconv
这一步应该是最难的了,首先我说一下我遇到的问题:
踩坑 1 : spconv 应该是有两个版本,现在 spconv新版,直接clone编译的话,(如何编译还是参考 [1] ) 是需要 cuda 10 和 python 3.7, torch 1.3.0 , 但是我的电脑里装的是cuda9.0 ,直接编译的话,会停止在终端很久,然后报一堆错误… 于是放弃,找老版本的spconv
踩坑 2 : PCDet 中也说明了需要使用老版本的 spconv v1.0,spconv v1.0 的链接在这里,你可以直接clone下来,然后编译,但是,又会遇到一个问题,还是编译不过…我检查了一下在clone下来的源码,spconv/third_party/pybind11 这个文件夹中,是空的,所以还是编译有问题…那怎么解决呢?
解决办法:
-
还是感谢 [1] , 博主提供了 编译好的 spconv 包, 但是这是博主在他的环境下编译好的, 需要把 build, dist, spconv.egg-info 这几个文件夹删除掉,然后 重新编译,我是这样做的。
-
在 clone 的时候 加上 – recursive , 应该直接就可以了。
踩坑 3 : 之后直接编译spconv 又提示会有问题:
解决办法:
参考 [3] , 在这里 No CMAKE_CUDA_COMPILER could be found (solved) 有解决的办法,需要添加一些路径到bashrc中,就可以成功编译。
踩坑 4 : 编译完之后,应该就可以跑second了,但是在跑的过程中,会报错:
cannot import name 'VoxelGeneratorV2'
这是因为现在用的是 旧版的spconv , VoxelGeneratorV2 这个是在新版的 spconv 中的, 编译要求是要cuda 10 , torch 1.3 ,我电脑是整不了了,于是放弃了复现原版的second,但是可以直接使用新开源的 PCDet 框架,同样支持 second 并且安装等都友好了许多,只需要安装老版的 spconv 就可以了 ,其他的步骤参考 PCDet 就可以了。
三. 使用PCDet复现
注意事项:
安装完 spconv 之后, 不要忘记:
python setup.py develop
要不然会出现报错.
之后准备数据 在 pcdet/datasets/kitti 目录下:
python kitti_dataset.py create_kitti_infos
测试和训练的指令记录:
python test.py --cfg_file cfgs/second.yaml --batch_size 4 --ckpt pre_models/second.pth
python test.py --cfg_file cfgs/second.yaml --batch_size 4 --eval_all
python train.py --cfg_file cfgs/second.yaml --batch_size 1
pre_models 是自己新建的文件夹,用来存放下载的模型