基于深度学习和激光点云的目标检测--自动驾驶感知(基础知识和原理)

基于深度学习和激光点云的目标检测--自动驾驶感知

【简介】

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、数据的标签是什么形式的?

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值