PointPillars与PointRCNN编译运行以及结果可视化(小白探索之路,清晰易懂)

一、引言

  • 现阶段因为在研究目标检测方面的结果可视化,趁还没忘记打算赶快记录下来,所以暂时先不讲Anaconda环境配置以及cuda,cudnn配置的东西,后期补上。
  • 目标是想要解决PointPillars的可视化,但是发现他自带的本地网页的显示方式不方便进行修改或者可移植,看到网上有说可以参考PointRCNN的可视化方法,如果又加班配置了一下PointRCNN的环境,最终成功可视化,下一步的目标是研究PointRCNN可视化代码,然后进行相应的修改。
  • 本文首先从PointPillars的Kittiview可视化的方法开始介绍再到PointRCNN可视化方法逐步介绍(当然是站在巨人的肩膀上探索的,其实网上有博主以及研究好了,我在实际过程中发现其实说的不是很清晰,所以想做一个纯小白的教程())
  • 最后,不懂的可以评论或私信,敲了好久才总结完┭┮﹏┭┮

二、PointPillars可视化(Kittiview的方法)

2.1 配置PointPillars的环境

有两个版本的,一个是PointPillars作者的(链接1),一个是Second作者的(链接2),其中链接1中的可视化部分不全,后面运行会出问题,到后面会说怎么办 ~~

  • 电脑配置:ubuntu18.04+GTX1660ti+cuda10.2+cudnn8.05+python3.7+pytorch1.9.0
  • PointPillars作者的github网址,链接1
  • Second作者的github网址,链接2

2.1.1 下载源码

本文用的是PointPillars作者的源码

git clone https://github.com/nutonomy/second.pytorch.git

2.1.2 配置Anaconda环境、安装pytorch

命名看自己的需求,这里就直接跳过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官网找指令就行

2.1.3 根据github里的readme配置好PointPillars环境

基本上网上的博主都是根据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

2.2 运行PointPillars

2.2.1 运行train部分的代码

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可以任意指定==,但是最好就放在和数据集同一路径下最好

2.2.2 运行evaluate部分的代码

# 如果只输出一个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就和训练时候定义的路径是一样的

2.3 kittiviewer web可视化(本地网页)

这一部分是参考的一个博主的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('
                    
                    

你可能感兴趣的:(目标检测与数据可视化,系统安装与配置,python,算法,数据可视化,目标跟踪)