在了解自动驾驶中的环境感知,看了些基于点云的目标检测,想看看具体有怎样的效果,于是选择OpenPCDet这个看起来集成方法又多,文档又全的开源项目,此处为GitHub地址。
于是点进去,看了下要求
具体的说明很简单
就是克隆代码,安装依赖项,安装spconv,以及安装pcdet,这里着重说明一下安装spconv。
我自己的环境是Ubuntu18.04,python3.7,CUDA10,pytorch1.3,注意pytorch版本要CUDA一致,安装pytorch的时候会自动安装python下的cudatoolkit和cudnn。sponv是一个空间稀疏卷积库,提供了两个版本,这个是1.0:
我用的是v1.2。
直接安装说明克隆代码,安装boost头文件。
git clone https://github.com/traveller59/spconv.git --recursive
sudo apt-get install libboost-all-dev
要求cmake >= 3.13.2,然而Ubuntu18.04直接安装的cmake版本有点老,于是去官网下载。
wget -zxvf https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4-Linux-x86_64.tar.gz
tar https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4-Linux-x86_64.tar.gz
嘿嘿嘿,下了编译好的版本,直接解压添加到环境变量就好。
export PATH=你的cmake所在目录/cmake-3.18.4-Linux-x86_64/bin:"${PATH}"
搞了个临时的版本。
接着按照步骤来:
啊,该第三步了,前面已经装了pytorch,于是运行setup.py文件生成要安装的whl文件。
python setup.py bdist_wheel
进入dist路径,找到生成的whl文件并安装。
cd ./dist
看一下生成的whl文件叫啥名字,一般名字对应着各种版本号,名字显示奇奇怪怪的基本可以断定生成失败了,检查一下你的各个包的版本啥的,再来一遍吧。
正常情况pip install *.whl就好啦。
到此为止,没有报错误的话,就成功安装了sponv啦!也是整个配置里问题最多的一项,接下来就很简单啦!
都装完了想运行下代码,快快乐乐打开说明文件,直接在提供的预训练模型上可视化看看结果。
有在不同数据集下训练的不同方法的模型。
存在Google.drive里的,在墙外。
下载好预训练模型,然后安装python的可视化工具包。
pip install mayavi
准备好你的点云文件和下载好的预训练模型,开始检测啦。
python demo.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml \
--ckpt pv_rcnn_8369.pth \
--data_path ${POINT_CLOUD_DATA}
记得改成自己的点云文件路径哦,还要注意*.yaml和*.pth要对应。
然后我的代码就开始报错,vtk无法创建(总之是类似的),应该是服务器上的图形显卡缺少相应驱动,不大支持三维渲染,于是把检测的结果输出来,存到文档里,在自己的笔记本上跑。
from visual_utils import visualize_utils as V
import numpy as np
from mayavi import mlab
def main():
points = np.fromfile("000008.bin", dtype=np.float32).reshape(-1, 4)
ref_boxes=np.array([[ 14.7530, -1.0668, -0.7949, 3.7316, 1.5734, 1.5017, 5.9684],
[ 8.1338, 1.2251, -0.8056, 3.7107, 1.5718, 1.6053, 2.8312],
[ 6.4539, -3.8711, -1.0125, 2.9638, 1.5000, 1.4587, 6.0006],
[ 4.0341, 2.6423, -0.8589, 3.5184, 1.6252, 1.6226, 6.0168],
[ 33.5379, -7.0922, -0.5771, 4.1590, 1.6902, 1.6740, 2.8695],
[ 20.2419, -8.4190, -0.8768, 2.2857, 1.5067, 1.5971, 5.9195],
[ 24.9979, -10.1047, -0.9413, 3.7697, 1.6151, 1.4467, 5.9671],
[ 55.4206, -20.1693, -0.5863, 4.1936, 1.6783, 1.5897, 2.8009],
[ 40.9520, -9.8718, -0.5903, 3.7940, 1.5752, 1.5658, 5.9509],
[ 28.7372, -1.6067, -0.3582, 3.7827, 1.5546, 1.5801, 1.2517],
[ 29.8940, -14.0270, -0.7138, 0.7105, 0.5286, 1.8181, 1.8177],
[ 10.5068, 5.3847, -0.6656, 0.8203, 0.6050, 1.7170, 4.5543],
[ 14.7198, -13.9145, -0.7675, 0.6548, 0.6050, 1.8767, 6.3586],
[ 40.5776, -7.1297, -0.4536, 0.7717, 0.6421, 1.8219, 6.3071],
[ 18.6621, 0.2868, -0.7225, 0.6963, 0.5903, 1.6171, 3.4939],
[ 33.5909, -15.3372, -0.6708, 1.5792, 0.4420, 1.6632, 5.8578],
[ 53.6673, -16.1789, -0.2170, 0.9555, 0.5120, 1.9663, 4.0730],
[ 30.4546, -3.7337, -0.3892, 1.6604, 0.5506, 1.7268, 2.8738],
[ 37.2168, -6.0348, -0.4855, 0.8860, 0.5873, 1.7859, 6.3918],
[ 34.0845, -4.9617, -0.4192, 0.8911, 0.6893, 1.8796, 6.0675],
[ 13.2934, 4.3788, -0.5723, 1.7745, 0.5844, 1.7321, 5.5894],
[ 1.5887, 8.8918, -0.5623, 1.7521, 0.3996, 1.6873, 6.9082],
[ 1.6363, 10.6976, -0.4213, 0.5559, 0.5656, 1.6537, 1.1167],
[ 10.1203, -7.5959, -0.8065, 1.6906, 0.5269, 1.8206, 6.0078],
[ 1.3104, -5.3168, -0.9996, 3.8217, 1.5819, 1.5247, 5.7200],
[ 1.9891, 6.9479, -0.6237, 0.7172, 0.6449, 1.8667, 5.1038],
[ 37.0710, -16.5266, -0.6848, 1.4592, 0.5439, 1.6777, 2.5990],
[ 18.6999, 1.1810, -0.4766, 0.7327, 0.6436, 1.8375, 5.8503],
[ 2.6479, 17.1586, -0.1585, 0.5904, 0.6348, 1.8937, 3.6890],
[ 0.9431, 10.5031, -0.3420, 0.5309, 0.5733, 1.7027, 2.1916],
[ 5.7515, -12.5565, -0.7717, 0.5685, 0.5493, 1.6204, 2.1157],
[ 45.0186, -7.5816, -0.0797, 3.7895, 1.6455, 1.7168, 4.4490]])
ref_scores=np.array([0.9654, 0.9511, 0.9037, 0.8834, 0.8346, 0.6788, 0.6594, 0.5516, 0.5041,
0.4658, 0.3139, 0.3063, 0.2938, 0.2692, 0.2396, 0.2348, 0.2258, 0.2208,
0.2194, 0.1883, 0.1608, 0.1559, 0.1516, 0.1449, 0.1427, 0.1358, 0.1239,
0.1227, 0.1212, 0.1207, 0.1192, 0.1003])
ref_labels=np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 3, 3, 2, 3,
1, 2, 3, 2, 2, 2, 2, 1])
print(ref_scores)
V.draw_scenes(points=points,ref_boxes=ref_boxes,ref_scores=ref_scores, ref_labels=ref_labels)
mlab.show()
if __name__ == '__main__':
main()
读取kitti数据集目标检测训练集中的点云数据文件000008.bin,剩下的是输出的检测结果。
ending