基于深度学习和激光点云的目标检测--自动驾驶感知
【简介】
1、优缺点分析
(1)传统图像VS深度学习图像
a、传统方法
特征提取主要依赖人工设计的提取器,需要有专业知识及复杂的调参过程,同时每个方法都是针对具体应用,泛化能力及鲁棒性较差。
b、深度学习
数据驱动进行特征提取,根据大量样本的学习能够得到深层的、数据集特定的特征表示,其对数据集的表达更高效和准确,所提取的抽象特征鲁棒性更强,泛化能力更好,并且可以是端到端的。缺点是样本集影响较大,算力要求较高。
总体来讲,一种是人工认知驱动的方法,一种是数据驱动的方法。应用的话看场景,只不过深度学习一直在不断拓展其应用的场景,传统方法在某些时候扔具有一定价值。
(2)点云VS图像
激光雷达:数据简单但精确,适合做几何感知。
视觉数据:丰富但多变,适合做语义感知。
在高级别自动驾驶里,无论是从优势互补还是传感器冗余的角度,二者缺一不可。
2.关于激光点云数据。
(1)激光点云文件是.bin格式的,每一个.bin文件代表一个点云图。每一个点云图由很多点组成,又名体素。
(2)激光雷达点云bin文件读取和显示:
这里读取的是KITTI数据集中的.bin文件:
import mayavi.mlab
import torch
import numpy as np
mypointcloud=np.fromfile(r"E:\MANY_PROJECT_SOURCE\3_LIDAR\MY_SOLUTION\dataset\train\velodyne\000001.bin",dtype=np.float32,count=-1).reshape([-1,4])
mypointcloud=torch.from_numpy(mypointcloud)
print(mypointcloud.size())
print(mypointcloud.type())
def viz_mayavi(points,vals="distance"): # 可视化只用到了3维数据(x,y,z)!
x=points[:,0]
y=points[:,1]
z=points[:,2]
r=points[:,3]
d=torch.sqrt(x**2+y**2)
if vals=="height":
col=z
else:
col=d
fig=mayavi.mlab.figure(bgcolor=(0,0,0),size=(1280,720))
mayavi.mlab.points3d(x,y,z,
col,
mode="point",
colormap='spectral',
figure=fig,
)
mayavi.mlab.show()
if __name__=="__main__":
viz_mayavi(mypointcloud,vals="height")
3、激光点云数据集制作。
(1)可以去KITTI官网下载。
(2)手动裁剪数据集。
有个软件叫 Trimble Business Center(TBC),可以手动把激光点云数据裁剪成我们需要的部分。
(3)关于自动驾驶仿真:
4、深度学习处理点云的方法详讲:
在计算机视觉中,虽然深度学习表现出优越的性能,但是雷达数据并不能直接使用图像的卷积操作,它和图像有关键性差异:
(1)稀疏性。the point cloud is a sparse representation, while an image isdense
(2)维度。the point cloud is 3D, while the image is 2D.
所以,基于激光点云的计算机视觉,不同的处理方法,输入神经网络的数据形式(张量)是不同的:
1、pixel-based。转变成图像,进行2D卷积。包括:转成前视图,操作前视图;转成鸟瞰图,在鸟瞰图上操作。
2、point-based。n*3。直接对点云操作,就直接看论文PointNet和PointNet++就可以了。
3、voxel-based。体素形式,进行3D卷积;(Pytorch支持了3D卷积,使用nn.Conv3D即可;3D卷积离不开体素表示。体素表示的处理方法也就是3D卷积)
1)Pixel-based:
把点存在平面中。点投影到平面上,用2D CNN处理。
2)Point-Based:
这是更直接的方法,把点存在向量中,输入n×3的向量直接送入网络中。
此时有两个问题:
(1)无序性:每个点云图点云个数不同,n值不一样。
(2)点在向量中有大量的排列组合方式,必须保证网络对这些点的顺序不敏感。
要使得数据变得卷积友好,必须进行预处理,有以下图片中的三步:
典型案例PointNet网络图:
3)Voxel-Based:
把点存在立体中。
类似于图像一样,图像是二维的把其进行栅格化,变成一个一个的像素,三维的我们也可以进行栅格化变成一个一个的体素(就是一个个小的立方体)。采用3D CNN进行处理,3D CNN结构如下:
5、数据的标签是什么形式的?