点云学习笔记14——PointPillars算法+代码运行实战

论文地址https://arxiv.org/abs/1812.05784
代码地址https://github.com/nutonomy/second.pytorch

一、算法原理及思路分析

在这里插入图片描述
1.生成伪图像(Pillar Feature Net)-----原始点云被转换为堆叠柱张量和柱索引张量。
首先在俯视图的平面上打网格(H x W)的维度;然后对于每个网格所对应的柱子中的每一个点都取(x,y,z,r,x_c,y_c,z_c,x_p,y_p)9个维度。其中前三个为每个点的真实位置坐标,r为反射率,带c下标的是点相对于柱子中心的偏差,带p下标的是对点相对于网格中心的偏差。每个柱子中点多于N的进行采样,少于N的进行填充0。于是就形成了(D,N,P)D=9, N为点数(设定值),P为HW。然后学习特征,用一个简化的PointNet从D维中学出C个channel来,变为(C,N,P)然后对N进行最大化操作变为(C,P)又因为P是HW的,我们再展开成一个伪图像形式,H,W为宽高,C为通道数,[H,W,C]。

2.基础网络(Backbone)
包含两个子网络(1、top-down网络,2、second网络)top-down网络结构为了捕获不同尺度下的特征信息,主要是由卷积层、归一化、非线性层构成的,second网络用于将不同尺度特征信息融合,主要有反卷积来实现将伪图像处理成高维特征表示;

3.检测头部(Detection Head)
对类别预测和对3D检测框的位置进行回归,将三维独有的高度和z位置当成回归。

二、代码复现

2.1、下载代码

代码地址
下载压缩包解压:
1、https://github.com/nutonomy/second.pytorch
本代码需要一个稀疏卷积的依赖,所以需要下载如下文件:
2、https://github.com/facebookresearch/SparseConvNet
路径是放在second.pytorch文件下就可以了。

2.2、环境准备

主要环境如下:

python 3.6+
pytorch 0.4.1+
Ubuntu 16.04/18.04

Pytorch cpu版本安装

因为我这台笔记本没有显卡,就暂时只安装了cpu版本,安装方式见我的另外一篇文章:

pytorch安装及卸载
我下载了torch-1.3.0+cpu-cp36-cp36m-linux_x86_64.whl文件,离线安装

扫描二维码关注公众号,回复: 13218193 查看本文章
 pip3 install torch-1.3.0+cpu-cp36-cp36m-linux_x86_64.whl 
 pip3 install torchvision==0.4.1

在这里插入图片描述
在这里插入图片描述

其他依赖项:

官方使用conda下载的,我这里直接使用pip3,

pip3 install shapely pybind11 protobuf scikit-image numba pillow
pip3 install --upgrade pip
pip3 install fire tensorboardX

如果安装比较慢,可以在后面加上清华源头,如下:

pip3 install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple
cd SparseConvNet/
bash build.sh

出错了。。。
运行 bash build.sh
bash build.sh
Traceback (most recent call last):
File “setup.py”, line 7, in
import torch, os
ImportError: No module named torch

注意:修改build.sh 文件中python为python3

python3 setup.py install && python3 examples/hello-world.py

重新运行

bash build.sh

最后出现下述应该就成功了。

          ...,
          [0.0000, 0.0000, 0.0000,  ..., 0.0000, 0.0000, 0.0000],
          [0.0000, 0.0000, 0.0000,  ..., 0.0000, 0.0000, 0.0000],
          [0.0000, 0.0000, 0.0000,  ..., 0.0000, 0.0000, 0.0000]]]],
       grad_fn=<SparseToDenseFunctionBackward>)

添加环境

export PYTHONPATH=/media/xxx/Extreme_SSD/21_1028_PointPillars/second_pytorch:$PYTHONPATH

2.3 、安装踩坑实录

1、ModuleNotFoundError: No module named ‘second’

运行

python3 create_data.py create_kitti_info_file --data_path=./data/ImageSets/kitti_second/

出现:

_info_file --data_path=./data/ImageSets/kitti_second/
Traceback (most recent call last):
File “create_data.py”, line 9, in
from second.core import box_np_ops
ModuleNotFoundError: No module named ‘second’

需要将本工程代码添加到python环境里,如下

export PYTHONPATH=/media/xxx/Extreme_SSD/21_1028_PointPillars/second_pytorch:$PYTHONPATH

2、RuntimeError: No CUDA runtime is found, using CUDA_HOME=‘None’

运行

python3 create_data.py create_kitti_info_file --data_path=./data/ImageSets/kitti_second/

出现:

/home/huifeimao/.local/lib/python3.6/site-packages/numba/core/errors.py:154: UserWarning: Insufficiently recent colorama version found. Numba requires colorama >= 0.3.9
  warnings.warn(msg)
Traceback (most recent call last):
  File "/media/huifeimao/Extreme_SSD/21_1028_PointPillars/second_pytorch/second/core/non_max_suppression/nms_cpu.py", line 10, in <module>
    from second.core.non_max_suppression.nms import (
ModuleNotFoundError: No module named 'second.core.non_max_suppression.nms'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "create_data.py", line 9, in <module>
    from second.core import box_np_ops
  File "/media/huifeimao/Extreme_SSD/21_1028_PointPillars/second_pytorch/second/core/box_np_ops.py", line 7, in <module>
    from second.core.non_max_suppression.nms_gpu import rotate_iou_gpu_eval
  File "/media/huifeimao/Extreme_SSD/21_1028_PointPillars/second_pytorch/second/core/non_max_suppression/__init__.py", line 1, in <module>
    from second.core.non_max_suppression.nms_cpu import nms_jit, soft_nms_jit
  File "/media/huifeimao/Extreme_SSD/21_1028_PointPillars/second_pytorch/second/core/non_max_suppression/nms_cpu.py", line 18, in <module>
    cuda=True)
  File "/media/huifeimao/Extreme_SSD/21_1028_PointPillars/second_pytorch/second/utils/buildtools/pybind11_build.py", line 90, in load_pb11
    arch = find_cuda_device_arch()
  File "/media/huifeimao/Extreme_SSD/21_1028_PointPillars/second_pytorch/second/utils/find.py", line 77, in find_cuda_device_arch
    cuda_home = find_cuda()
  File "/media/huifeimao/Extreme_SSD/21_1028_PointPillars/second_pytorch/second/utils/find.py", line 69, in find_cuda
    "No CUDA runtime is found, using CUDA_HOME='{}'".format(cuda_home))
RuntimeError: No CUDA runtime is found, using CUDA_HOME='None'

这个问题暂时一直没有解决,跑cpu版本似乎不行。准备安装双系统。

三、pointpillars点云算法TensorRT环境加速

参考文章
pointpillars点云算法TensorRT环境加速
自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)
代码https://github.com/SmallMunich/nutonomy_pointpillars

四、Autoware 1.14 +Point Pillar代码实战

Autoware 1.14 源码编译+感知SSD+YOLOv3+Point Pillar模块运行(步骤+报错+解决方法记录)

参考文章:

1、【论文+代码阅读】PointPillars
2、【3D目标检测】PointPillars论文和代码解析
3、https://github.com/SmallMunich/nutonomy_pointpillars
安装踩坑实录
2、second.pytorch环境配置记录
second.pytorch安装踩坑实录

猜你喜欢

转载自blog.csdn.net/mao_hui_fei/article/details/120861735