有两个版本的,一个是PointPillars作者的(链接1),一个是Second作者的(链接2),其中链接1中的可视化部分不全,后面运行会出问题,到后面会说怎么办 ~~
本文用的是PointPillars作者的源码
git clone https://github.com/nutonomy/second.pytorch.git
命名看自己的需求,这里就直接跳过ubuntu安Anaconda那一步了
conda create -n pointpillars python=3.7
pip3 install torch torchvision torchaudio -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
这里下载pytorch进行换源加速了,因为我不喜欢设置全局换源,每次都是临时用一下
当然pytorch版本可以自己指定,去pytorch官网找指令就行
基本上网上的博主都是根据github翻译过来的,所以直接进作者的github按照他步骤从配环境到运行就可以了,这个靠谱些,报错才有必要去参考别人的
基本可以总结成下面几步:
·下载数据集(我记得有几十g要下载,从网上找找看有没有百度网盘资源)
·安装依赖包(就几个pip指令,记得无论啥时候运行要切到对应的虚拟环境)
·准备数据文件结构(这一块挺麻烦的,反正就运行指令就行了,会生成一些文件)
·更改config文件:就是一些文件的路径,主要就是数据集的,github上说的很清楚
·训练网络:一般代码都会有预训练好的权重
重点讲下运行还有配置环境时遇到的问题,这也是最重要的
(1)下载SparseConvNet的时候
不要用官网的git clone指令,用下面的,或者先Fork,再转到gitee里面下载会很快(一个很实用的小技巧)
git clone https://github.com/facebookresearch/SparseConvNet.git
注:我安装的时候有报错,跟当时cuda的在bashrc里面写的路径有关系,在bashrc里面添加
export CUDA_HOME=/usr/local/cuda-10.2
(2)要添加pythonpath到bashrc中,具体路径根据自己的位置来,否则会说某些包找不到
export PYTHONPATH=$PYTHONPATH:/home/lixushi/pointpillars/second.pytorch
(3)在运行训练部分代码时,遇到以下报错,主要是说加载数据集的问题,这个跟pytorch版本有关系
File "/home/lixushi/pointpillars/second.pytorch/torchplus/train/checkpoint.py", line 146, in try_restore_latest_checkpoints
restore(latest_ckpt, model)
File "/home/lixushi/pointpillars/second.pytorch/torchplus/train/checkpoint.py", line 117, in restore
model.load_state_dict(torch.load(ckpt_path))
File "/home/lixushi/.conda/envs/pytorch/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1407, in load_state_dict
self.__class__.__name__, "\n\t".join(error_msgs)))
RuntimeError: Error(s) in loading state_dict for VoxelNet
将~/pointpillars/second.pytorch/torchplus/train/checkpoint.py的117行附近的
model.load_state_dict(torch.load(ckpt_path))
改为:
model.load_state_dict(torch.load(ckpt_path),False)
(4)遇到以下报错,大概意思是需要bool型但是代码却是byte
File "/home/lixushi/pointpillars/second.pytorch/second/pytorch/models/voxelnet.py", line 911, in predict
opp_labels = (box_preds[..., -1] > 0) ^ dir_labels.byte()
RuntimeError: result type Byte can't be cast to the desired output type Bool
将~/pointpillars/second.pytorch/second/pytorch/models/voxelnet.py的911行附近的
opp_labels = (box_preds[..., -1] > 0) ^ dir_labels.byte()
改为:
opp_labels = (box_preds[..., -1] > 0) ^ dir_labels.bool()
(5)遇到以下报错,numpy等级过高
'numpy.float64' object cannot be interpreted as an integer
解决方法就降低版本,运行下面的指令
pip install -U numpy==1.17.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
cd ~/pointpillars/second.pytorch/second
python ./pytorch/train.py train --config_path=./configs/pointpillars/car/xyres_16.proto --model_dir=/path/to/model_dir
这里的==/path/to/model_dir可以任意指定==,但是最好就放在和数据集同一路径下最好
# 如果只输出一个pkl格式的文件只运行这个指令就行
python pytorch/train.py evaluate --config_path= configs/pointpillars/car/xyres_16.proto --model_dir=/path/to/model_dir
# 如果要输出很多个txt文件的形式就要加一个参数
python pytorch/train.py evaluate --config_path= configs/pointpillars/car/xyres_16.proto --model_dir=/path/to/model_dir --pickle_result=False
这里的运行结果会存放在model_dir/eval_results/step_xxx/ 下,/path/to/model_dir就和训练时候定义的路径是一样的
这一部分是参考的一个博主的CSDN,我把流程细化了一下,然后自己实际运行的时候也遇到了问题,把解决方案写上了
(1)将下面的代码替换掉~/pointpillars/second.pytorch/second/kittiviewer/frontend 目录下的index.html文件内容
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
crossorigin="anonymous" />
<link rel="stylesheet" type="text/css" href="css/main.css" media="screen" />
<title>SECOND Kitti Viewertitle>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT"
crossorigin="anonymous">script>
<script>window.jQuery || document.write('