pointpillar代码的开源地址:https://github.com/nutonomy/second
第一步:从github上拷贝代码
git clone https://github.com/nutonomy/second.pytorch.git
第二步:首先安装Anaconda创建虚拟环境,我的电脑Ubuntuan16.04安装的是anaconda3,cuda10的版本。和readme一样,使用conda install 安装虚拟环境中的相关配置
conda create -n pointpillars python=3.7 anaconda
source activate pointpillars
conda install shapely pybind11 protobuf scikit-image numba pillow
conda install pytorch torchvision -c pytorch
conda install google-sparsehash -c bioconda
到这里都不会出现问题,如果出现问题建议重装anaconda,或者直接重装系统。<如果是网络错误,就检查有没有conda换源>
注意运行完上面的命令后,虚拟环境中安装的是pytorch13.0.0。
第三步,用pip安装
pip install --upgrade pip
pip install fire tensorboardX
第三步结束后,开始安装 稀疏卷积部分,这里的bash build.sh命令必须在pytorch13.0 的环境下运行,否则会报错
git clone [email protected]:facebookresearch/SparseConvNet.git
cd SparseConvNet/
bash build.sh
第四步 加一些环境变量,注意这里面的路径 需要改成你自己的路径,cuda 是cuda10
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
export PYTHONPATH=your second.pytorch path
从这里结束,下面要开始数据的预处理问题。
数据的预处理开始,需要将 虚拟环境中的cuda10下降到 cuda9,否则会报错,<具体将版本的命令我忘了,需要可以百度>
conda install cudatoolkit==9.0.0 ## 下降版本
数据预处理第一步:下载kitti数据集,按照readme的要求,把对应部分放在如下路径中:
└── KITTI_DATASET_ROOT
├── training <-- 7481 train data
| ├── image_2 <-- for visualization
| ├── calib
| ├── label_2
| ├── velodyne
| └── velodyne_reduced <-- empty directory
└── testing <-- 7580 test data
├── image_2 <-- for visualization
├── calib
├── velodyne
└── velodyne_reduced <-- empty directory
KITTI_DATASET_ROOT=/data/sets/kitti_second/
数据预处理第二步:运行下面的文件,对数据进行预处理。在运行过程中,可能会出现路径找不到的问题,直接将报错对应py文件的路径改为绝对路径,就OK了
python create_data.py create_kitti_info_file --data_path=KITTI_DATASET_ROOT
python create_data.py create_reduced_point_cloud --data_path=KITTI_DATASET_ROOT
python create_data.py create_groundtruth_database --data_path=KITTI_DATASET_ROOT
数据预处理第三步:修改配置文件./configs/pointpillars/car/xyres_16.proto
根据后面的train文件 我们先修改一个 配置文件就可以 对模型进行训练拉
train_input_reader: {
...
database_sampler {
database_info_path: "/path/to/kitti_dbinfos_train.pkl"
...
}
kitti_info_path: "/path/to/kitti_infos_train.pkl"
kitti_root_path: "KITTI_DATASET_ROOT"
}
...
eval_input_reader: {
...
kitti_info_path: "/path/to/kitti_infos_val.pkl"
kitti_root_path: "KITTI_DATASET_ROOT"
}
修改配置文件,同样是更换路径为你自己的路径就可以了
到这里数据 预处理就结束了,后面是 模型的训练过程。
首先 你必须把 降级的 cuda 10升级回 cuda 10,否则会报错
升级结束后,就可以训练了
cd ~/second.pytorch/second
python ./pytorch/train.py train --config_path=./configs/pointpillars/car/xyres_16.proto --model_dir=/home/xqm/second.pytorch/second/
不过在训练的inference阶段,我出现了一个小bug:也就是一个需要bool型但是代码却是一个byte的错,需要做如下的修改,如果没有报错就不用修改了。
在second.pytorch\second\pytorch\models文件夹下的voxelnet.py的911行:
改为:
opp_labels = (box_preds[..., -1] > 0) ^ dir_labels.bool()
就可以正常训练了