点云学习笔记13——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文件,离线安装
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安装踩坑实录