写在前面
下载的时候一定要注意second.pytorch的版本,不然安装完spconv后,尝试Kitti Viewer Web的时候可能会一直报错“cannot import name 'rbbox_intersection'”,附上没有此问题的代码仓库:https://github.com/traveller59/second.pytorch/tree/v1.5.1
后续我又尝试了second.pytorch1.6版本,附上仓库链接:https://github.com/traveller59/second.pytorch,当我安装成功spconv1.2之后准备训练时,总是报错cannot import name 'non_max_suppression' from 'spconv.utils',暂时没有解决办法。。后面又新建conda环境从新来过,pytorch1.3.1,torch0.4.2,开始并不行。报错libcudart.so.9.0: cannot open shared object file: No such file or directory,这里说torchvision版本不对,换成0.2.2,也不行。又pip install torchvision==0.4.2换回来。然后重新clone了仓库,改了改数据路径,居然能跑了。唉,跑吧,反正可以抓耗子了。。。
安装步骤
安装
克隆代码 ###如果克隆失败,可以手动进入仓库网址下载,再上传服务器###
git clone https://github.com/traveller59/second.pytorch/tree/v1.5.1
cd ./second.pytorch/second
###这里是1.6版本,由于需要使用pointpillars,我又踩了一遍坑
git clone https://github.com/traveller59/second.pytorch
cd ./second.pytorch/second 安装依赖包(对1.6版本和1.5.1版本都是一样的) ###如果有Anaconda###
conda install scikit-image scipy numba pillow matplotlib
pip install fire tensorboardX protobuf opencv-python
###如果没有Anaconda###
pip install numba scikit-image scipy pillow
pip install fire tensorboardX protobuf opencv-python 安装spconv 参考我的博客安装spconv踩坑实录,这里需要注意,如果使用second.pytorch1.6版本,需要安装spconv1.2。second.pytorch1.5.1对应spconv1.0设置环境变量(<path_to_second>需要换成你自己second.pytorch1.6版本或者second.pytorch-1.5.1的所在路径) export NUMBAPRO_CUDA_DRIVER=/usr/lib/x86_64-linux-gnu/libcuda.so
export NUMBAPRO_NVVM=/usr/local/cuda/nvvm/lib64/libnvvm.so
export NUMBAPRO_LIBDEVICE=/usr/local/cuda/nvvm/libdevice
###如果用的是1.6版本,添加下面这行
export PYTHONPATH=<path_to_second>/second.pytorch:$PYTHONPATH
###如果用的是1.5.1版本,添加下面这行
export PYTHONPATH=<path_to_second>/second.pytorch-1.5.1:$PYTHONPATH
准备数据集
问题记录
1. ModuleNotFoundError: No module named 'second.core.point_cloud'
在create_data.py中搜索发现并没有用到下面这行导入的bound_points_jit,直接注释掉即可。
#from second.core.point_cloud.point_cloud_ops import bound_points_jit
2.image file is truncated
我下载了kitti 3D目标检测数据集之后,解压的时候发现test集中有一张000683是损坏的,从test.txt中将此序号删除,该编号对应的calib和velodyne中的文件也一并删除,但是删除后仍然报错image file is truncated,参考这里,在create_data.py的开头添加了两行如下,问题解决。
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
目录结构
└── KITTI_DATASET_ROOT <-- 在second/data/目录下
├── training <-- 7481 train data
| ├── image_2 <-- for visualization
| ├── calib
| ├── label_2
| ├── velodyne
| └── velodyne_reduced <-- empty directory
└── testing <-- 7517 test data
├── image_2 <-- for visualization
├── calib
├── velodyne
└── velodyne_reduced <-- empty directory
1.1.5.1版本做如下操作
###创建kitti infos
python create_data.py create_kitti_info_file --data_path=data/KITTI_DATASET_ROOT
###创建reduced point cloud
python create_data.py create_reduced_point_cloud --data_path=data/KITTI_DATASET_ROOT
###创建groundtruth数据库信息
python create_data.py create_groundtruth_database --data_path=data/KITTI_DATASET_ROOT
2.1.6版本做如下操作
python create_data.py kitti_data_prep --root_path=data/KITTI_DATASET_ROOT
3.修改配置信息
second/configs中有每个训练参数文件的配置。打开文件找到下面对应的部分,将数据路径修改成自己的数据路径即可,比如我的是''../data/KITTI_DATASET_ROOT/dataset_infos_train.pkl''。
train_input_reader: {
...
database_sampler {
database_info_path: "/path/to/dataset_dbinfos_train.pkl"
...
}
dataset: {
dataset_class_name: "DATASET_NAME"
kitti_info_path: "/path/to/dataset_infos_train.pkl"
kitti_root_path: "DATASET_ROOT"
}
}
...
eval_input_reader: {
...
dataset: {
dataset_class_name: "DATASET_NAME"
kitti_info_path: "/path/to/dataset_infos_val.pkl"
kitti_root_path: "DATASET_ROOT"
}
}
尝试Kitti Viewer Web
问题记录
1.如果使用的是1.5.1版本,先修改backend.py中的一行代码,否则会出现加载数据失败的问题。
#将以下代码
app.run(host='127.0.0.1', threaded=True, port=port)
#改为
app.run(host='0.0.0.0', threaded=True, port=port)
2.版本1.6报错RuntimeError: Working outside of request context.根据报错位置,将/home/gye/anaconda3/envs/pointpillars/lib/python3.7/site-packages/werkzeug/local.py的306行return self.__local()的括号去掉
#将return self.__local()改为
return self.__local
步骤
服务器上运行一下命令backend.py(端口号默认是为16666) #1.5.1版本运行(端口号默认是16666)
python backend.py main
#1.6版本运行,1.6暂时有点问题,不能正确显示,搞好了再回来填坑
python main.py main
服务器上启动Web服务器 python -m http.server
本机连接服务器指定端口(servername和serverIP分别是你的服务器用户名和IP) ssh -L xxxx:0.0.0.0:8000 servername@serverIP
本机浏览器打开网页http://127.0.0.1:16666(不要刷新这个网页,我刷新了一次就崩溃了,然后从头来过。。。)打开界面之后,在右侧输入自己文件所对应的路径,下面是我的路径。 backend:http://serverIP:16666
rootPath:/home/gye/PointCloud/objectDetection/second.pytorch-1.5.1/second/data/KITTI_DATASET_ROOT
infoPath:/home/gye/PointCloud/objectDetection/second.pytorch-1.5.1/second/data/KITTI_DATASET_ROOT/kitti_infos_val.pkl
load
DetPath:/home/gye/PointCloud/objectDetection/second.pytorch-1.5.1/second/pytorch/allKindsOutput/results/step_74240/result.pkl
loadDet
checkpointPath:/home/gye/PointCloud/objectDetection/second.pytorch-1.5.1/second/pytorch/allKindsOutput/voxelnet-74240.tckpt
configPath:/home/gye/PointCloud/objectDetection/second.pytorch-1.5.1/second/configs/all.fhd.config
buildNet
inference 路径补全之后,依次点击load等按钮即可。我的在最后inference的时候报了inference fail的错误,但是尝试点击下一张时,能正常显示ground truth和预测框,没有去深究。
附录
另一位博主的全套配置史https://blog.csdn.net/r1141207831/article/details/103756292