| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【自动驾驶】多传感器感知技术解析 -> 正文阅读 |
|
[人工智能]【自动驾驶】多传感器感知技术解析 |
1.传感器自动驾驶中的传感器主要用到激光雷达,毫米波雷达,摄像头,超声波,优缺点如下: 1)激光雷达的测距精度、测距范围及对温度和光照的适应性很强,缺点线束低的情况,识别不好,也可能会漏掉目标(尤其是非金属物体) 2)相机对环境细节信息多,但是光照影响太大。 3)毫米波最大优点探测角度比较大,抗干扰性强,性能比较稳定,缺点就是分辨率和精度差 4)超声波雷达精度差,探测距离短,只有3m。 2.标定传感器标定主要包括内参和外参。内参主要是焦距,光圈,相机中心偏移等参数,可直接获取或者简单算法测定。这里主要说的是外参标定,外参是描述了传感器与其他给定坐标之间的相对位置关系,所以这里的外参描述为,长焦相机与短焦相机之间的外参,相机与雷达之间的外参,又或者是雷达与雷达之间的外参, 都需要分别进行标定。 标定的方式有使用标定间标定,或者使用算法进行标定。使用标定间进行标定,设置一些参照物,多为有角点的物体,方便定位。标定完也可进行误差修正。具体方法: (1)相机标定: 多点图像数据? VS 多点参照物相应角点数据? 方法:PNP算法 (2)点云标定: 多点点云坐标? ?VS 多点参照物点云数据? ? ? ? ?方法:ICP算法 不同相机使用PNP得到一个矩阵,将两个矩阵进行传递,一般用一个矩阵得逆乘以另一个矩阵就得到了外参,点云也是这样。 3.检测2D图像检测常用算法:SSD;yolo系列;centernet 3D点云检测常用算法: (1)分割:birdview分割;(2)检测:MV3D 流行算法:VoxelNet,SECOND,?PointPillars,Centerpoint PointPillarsPillars每个点其实是有xyz或者其他特征的,所以点本身也是一个特征向量。然后通过我们的全连接层,Bath Norm,ReLU,还有Max Pooling这些常规的操作之后,来转换成一个Pillar里的global的特征,一个代表Pillar的特征向量。这个过程其实是对于VoxelNet转化成Voxel过程的一个简化,是VoxelNet对Voxel编码的学习的过程。VoxelNet在最后Voxel得到一个global的特征之后,它还要把global特征再Concat的回去,也就是说每人复制一份再领回去原来的点,然后再继续去迭代这样的过程,在最后的内存里边才是用最后的global的特征作为VoxelNet整个的特征向量。所以PFE其实是一个简化,加快了迭代过程。 ? 损失函数: PointPillars原来是用了Focal loss作为它分类的损失函数。Focal loss是在2018年的时候提出的,也是用于二维的目标检测,用来改进一个类别不均衡的问题,正负样本比例不均衡的问题。公式有两个参数α和γ。这两个参数要预先设定一个超参数,这个超参数本身是需要通过先验调整。实际的测试中发现这些参数不是特别好调整,因为需要利用一些先验的信息,所以就换成了加权的softmax loss,它的泛化性更好,因为没有那些超参数,泛化后的检测效果有改善,这个加权的意思就是给了一些类比更大的权重。 Pillar特征编码: 左边的结构是原来的,右边的是改进之后的,在拿到点的特征的时候,原本是包含点的xyz坐标和反射率的intensity,当然还有可能有其他的特征,先做一个radius的替换,就是对里面的特征做一个初步的变换。之后再进行后面的操作,Linear,Batch Norm,Relu,MaxPooling,得到最后的一个global的Pillar的特征。 接下来用Radius替换点特征:在右边的这张BEV这个视角下的点云图里面,坐标系的原点O,其实是车上的lidar的传感器,朝前的是x的正方向,左方是Y轴正方向,先计算一个radius,就是xy的二范数,也就是说在这个BEV视角xy平面上,这个点与原点的距离就是radius,用它替代点的原始特征xy,再加上Y intensity,组成这个点变换之后的特征。激光雷达的点云是一圈一圈的点组成的,是几乎不间断的通过旋转激光反射器来获得的。此外,在这个BEV视角下的目标检测里面,X和Y的地位其实是相等的,所以把xy替换成了radius,把这个radius当成点的基本特征去看待,更符合点云是一圈一圈的这个原始的特点,对于网络的提升有帮助。 RPN网络设计: RPN是最初针对二维目标检测,在Fast-RCN里面提出的一个编码解码的网络,通过预先在网格点上设定好初始的检测框,然后对应到特征图上面,经过后续的处理,得到的这些候选框包含的概率分数值和目标类别,最后再去做进一步的筛选,得到的最终的检测框。而那些初始的候选框proposals,一开始是需要先在这个原始的图上面去取一些初始的anchor,来提供初始的框。在二维的目标检测里边,也就是针对图像的目标检测里面,由于同一个目标,在不同的拍摄角度,在图像上的尺寸是不同的,有些远近关系,那么因此就要设定multi-anchor图像的目标检测里面,可以通过不同大小,不同的长宽比例尽可能去覆盖匹配图像里的这些目标。 Multi-head对RPN的改进:Apollo的PointPillars模型支持9个类别,其中有4个是个头比较大的类别(Large head),比如说轿车、卡车、公交车,还有工程车。另外5个Small head、行人、bicycle、motorcycle、雪糕筒等,那他们在BEV图上所占的尺寸是有差距的,在俯视图视角上这些个头是有一些差距的。所以要把这些类别都分开来,分成两个不同的RPN head去做检测。比如说我们这里在拿到最终的特征图之前,各自先用一个卷积层来输出目标的class类别的概率得分,还有body box的回归值,以及它的direction朝向。 4.融合跟踪
跟踪流程可以分为:
? 对每个时刻检测到的Object与跟踪列表中的TrackedObject进行匈牙利算法的二分图匹配,匹配结果分三类:
在跟踪对象信息融合的阶段,Apollo的主要工作是,给定一个被跟踪的物体序列: (Time_1,TrackedObject_1), (Time_2,TrackedObject_2), ..., (Time_n,TrackedObject_n) 每次执行LidarSubNode的回调,都会刷新一遍跟踪列表,那么一个被跟踪物体的信息也将会被刷新(重心位置,速度,加速度,CNN物体分割--前景概率,CNN物体分割--各类别概率)。N次调用都会得到N个概率分布(N个CNN物体分割--前景概率score,N个CNN物体分割--各类物体概率Probs),我们需要在每次回调的过程中确定物体的类别属性,当然最简单的方法肯定是 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:54:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |