在七月算法上报了《无人驾驶实战》课程,老师讲的真好。好记性不如烂笔头,记录一下学习内容。 课程入口,感兴趣的也可以跟着学一下。文章来源:https://www.toymoban.com/news/detail-633862.html
—————————————————————————————————————————文章来源地址https://www.toymoban.com/news/detail-633862.html
机械式Lidar:TOF、N个独立激光单元、旋转产生360度视场MEMS式Lidar:不旋转
简单:x y z i (i为信号强度)稀疏:7%(相同场景范围,与图像数据相比的结果)无序:N!(角度不同、震动、扫描顺序不同 )精确:+-2cm

点云:简单精确适合几何感知图像:丰富多变适合语义感知
CAD模型:一般分类问题的数据集是CAD (虚拟生成)LiDAR传感器RGBD相机(结构光、双目相机)



基于点云的目标检测:分割地面->点云聚类->特征提取->分类地面分割依赖于人为设计的特征和规则,如设置一些阈值、表面法线等,泛化能力差多阶段的处理流程意味着可能产生复合型错误——聚类和分类并没有建立在一定的上下文基础上,目标周围的环境信息缺失这类方法对于单帧激光雷达扫描的计算时间和精度是不稳定的,这和自动驾驶场景下的安全性要求(稳定,小方差)相悖
非结构化数据,只是一堆点XYZI,没有网格之类的组织结构无序性:相同的点云可以由多个完全不同的矩阵表示(只是点的摆放顺序不同而已)数量变化大:图像中像素数量是常数,点云的数量可能会有很大(例如:不同线的激光雷达)表现形式变化大:一辆车向左转,同一辆车向右转,会有不同的点云代表同一辆车缺少数据:没有图片数据多,扫描时通常被遮挡部分数据丢失,数据稀疏
3D->2D,三维点云在不同角度的相机投影(映射)再借助2D图像处理领域成熟的深度学习框架进行分析典型算法: MVCNN、MV3D、AVOD、 Appllo2.0、SqueezeSeg

输入:BV+FV+RGB: 并非简单投影,而是提取高度/密度/强度/距离等特征作为像素值ROI:在BV训练一个3D RPN,分别向3种视图映射得到3种ROI,并融合缺点:该方法在检测诸如行人和骑车人等小物体方面滞后(因为他们在BEV中特征本来就少又加上多次降采样),并且不能容易地适应具有垂直方向上的多个物体的场景(只用了BV)

输入:BEV+RGB 从[-40, 40]×[0, 70]×[0, 2.5]范围内点云数据生成6-channel BEV map,分辨率为0.1m, 700x800x6Z轴上[0,2.5]平分5段,前五个通道是每个栅格单元的最大高度, 第六个通道是每个单元中的密度信息





俯视投影到地面网格(2D grid-map)每个网格计算8个统计量使用UNet做障碍物分割





优点:速度快缺点:分割的精度仍然偏低 需要大量的训练集,而语义分割数据集标注困难改进版:SqueezeSegV2
优点:表示方式规整,可以将卷积池化等神经网络运算迁移到三维缺点:体素表达的数据量大(计算量很大 例如256x256x256 = 16777216),一般会减小分辨率(引入量化误差/局限性 例如64x64x64)
优点:与体素相比是更高效的点云结构化方法 (该粗的粗该细的细)缺点:仍然需要额外步骤对数据进行处理(类似体素化) 所以在端到端处理方面存在劣势

无序性:点云本质上是一堆点(nx3矩阵,其中n是点数) 点的顺序不影响它在空间中对整体形状的表示(相同的点云可以由两个完全不同的矩阵表示) 。希望不同的点云顺序可以得到相同的特征提取结果,可以用对称函数g (例如maxpooling或sumpooling)。旋转/平移性: 相同的点云在空间中经过一定的刚性变化(旋转或平移)坐标发生变化,希望不论点云在怎样的坐标系下呈现网络都能正确的识别出, 可以通过STN(spacial transform network)解决。


PointNet:单个点云特征 -> 全局特征,中间缺少局部信息(相当于用很大的卷积核/pooling只做了一层卷积/pooling 感受野一下就变最大) 单个PointNet操作可以看做一种特殊的卷积操作PointNet++:单个点云特征 -> 局部点云特征 -> 更大局部点云特征-> ... ->全局信息。PointNet的分层版本(相当于多次卷积 感受野逐渐变大)

采样:选取一些比较重要的点作为每一个局部区域的中心点分组:在这些中心点的周围选取k个近邻点(欧式距离给定半径内)PointNet: 使用PointNet提取局部特征(一次PointNet相当于一次卷积,故而称作PointNet卷积), 点云子集的特征结果输出到下一个set abstraction重复这个过程

多尺度分组:在每一个分组层都通过多个尺度来确定每一个中心点的邻域范围,并经过PointNet提取特征后将多个特征拼接起来,得到一个多尺度融合的新特征多分辨率分组:多分辨率分组法是考虑多种分辨率的融合。左边特征向量是通过一个set abstraction得到的(多次PointNet卷积),右边特征向量是直接对当前patch中所有点进行Pointnet卷积得到。并且当点云密度不均时可以通过判断当前patch的密度对左右两个特征向量给予不同权重,以此达到减少计算量的同时解决密度问题

PointNet:点云分别提取特征(顺序无关) -> 对称函数解决顺序问题(maxpooling) “处处小心顺序问题”PointCNN:点云领域提取特征(顺序相关) -> 用X变换解决顺序问题 “前期放开干/后期统一变”




Pixel-Based: 2D-gridVoxel-Based: 3D-gridTree-Based: Tree structPoint-Based: 对称函数 / X变换
输入:仅使用激光雷达数据特征学习网络卷积中间层网络区域提取网络(RPN)优缺点: 准确度很高, 但在TitanX GPU上只有4fps的低速度

体素分块(Voxel Partition)输入点云(D,H,W) 体素的深高宽为(vD,vH,vW) voxel grid点云分组(Grouping)将点云按照上一步分出来的体素格进行分组随机采样(Random Sampling)每一个体素格随机采样固定数目的点T 因为a) 网格单元内点云数量不均衡 b) 且64线一次扫描点云数量巨大(10w)全部处理需要消耗很多cpu和内存

三个全卷积层块(Block)每次尺度减半每一个块的输出都上采样到相同尺寸进行串联得到高分辨率特征图输出: Probability Score Map (二分类 例如是否为车) [None, 200/100, 176/120, 2] 和Regression Map(位置修正) [None, 200/100, 176/120, 14]

到了这里,关于无人驾驶实战-第五课(动态环境感知与3D检测算法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!