KITTI是一个自动驾驶感知模块的作为标准基准的多模态数据集,涉及的感知任务包括基于图像的单眼和立体深度估计,光流(optical flow,详见),语义和实例分割,2d和3d检测。
KITTI是一个带标签的3d场景数据集,这些3d数据由两个相机和一个64线的激光雷达组成。数据集包含7681个训练场景,7581个测试场景。多模态传感器组对3d世界的取样频率是根据雷达每100毫秒(10Hz)360度来取样。因此每一个训练样本是一个100毫秒的点云立体数据和与雷达同步的两个相机图像。两个相机和雷达传感器的同步是一个基础的感知方法,它依赖于图像和点云的融合。
雷达传感器提供3d场景的时空离散扫描,其中空间离散表示俯仰和方位分辨率,时间离散表示每100毫秒扫描的时间。俯仰分辨率为0.4度,转换成基于64线激光束的垂直角度(俯仰角)为26.9度;方位分辨率为0.08度。因此,考虑64个通道(64束激光雷达)的俯仰分辨率和0.08度的方位分辨率,由64线激光雷达产生的3d点云图像一共有64行,4500(=360/0.08)列。
KITTI数据集中,所有返回的点云数据和预测的3d边界框数据都是在激光雷达坐标系下,而激光雷达坐标系是右手坐标系(x, y, z:大拇指,食指,中指:前,左,上)
在激光雷达坐标系中的点,可以使用笛卡尔坐标描述,也可以使用球面坐标(θ, φ, γ)描述。在球面坐标系中,θ表示俯仰角,对应z轴正方向;φ叫做方位角,对应x-y轴之间角度,x轴为起点,y轴为终点;γ表示原点到点的距离。笛卡尔坐标系和球面坐标系存在一个一对一的映射。
每坨点云是一组无序的激光雷达点。点云中每个返回的激光雷达点是一个包括激光雷达坐标系坐标(x, y, z)和点云强度(ρ)的4元组。在KITTI中,ρ是一个0到1之间的值,由激光雷达束反射的表面特征决定。每个激光雷达点可以由笛卡尔坐标/球面坐标表示,KITTI使用激光雷达坐标系下的笛卡尔坐标和强度来表示:(x, y, z, ρ)。KITTI中的每坨点云(激光雷达返回一次数据中点的集合)平均有100k个点,这些点的数量由当时的障碍物决定。
3d障碍物检测任务可以定义为:在激光雷达坐标系下,给定一个场景的点云,预测当前场景中对应活动物体的障碍物的边界框。这些活动物体包括汽车、自行车、行人等。一个定向的3d边界框是一个带航向角的增强的边界框,该航向角是相对于3d边界框的坐标系。
通常情况,我们会对带6个自由度的定向3d边界框编码,这六个自由度包括边界框维度(width, length, height, l > w)、中心坐标(x, y, z)和偏航角(ϕ)。对偏航角而不是俯仰角和翻滚叫编码的原因是偏航角在逻辑上的跟踪、预测、规划上影响较大,而俯仰角和翻滚角在自动驾驶系统中不如偏航角重要。
当偏航角为0时,代表边界框在长这一维度与边界框坐标系的x轴平行。
通常,默认目标检测网络的分类损失为交叉熵,等于真实类的负对数似然。目标检测的分类损失复杂的地方主要在于对背景(反例)和正例之间的不平衡处理。例如,在一个给定的图像或场景(3d)中,2d或3d的边界框包括非活动物体/对象的背景。因此在训练集中存在背景和对象的不平衡。
处理这种不平衡的两种标准方法是:hard negative mining与focal loss
在硬负挖掘(hard negative mining)中,对每张图像或每个场景(统称为image)中负样本边界框进行子采样,直到负样本的数量是正样本数量的三倍时,选择image中最“负”(或者说是最离谱的)的负样本。量化边界框“负”的程度的测量方法是使用交叉熵,交叉熵越大,“负”得越明显。
而焦点损失(focal loss)没有像硬负挖掘那样对负样本进行挖掘,而是在训练过程中自适应地调整每个样本在分类损失中贡献的权重来处理背景和正例之间的失衡。焦点损失的思想主要基于,在训练早期神经网络很容易识别出背景边界框,以至于它的真实类概率非常接近1.0。因此,通过当前实例的真实类概率与1之间绝对差的正比来自动调整该实例在分类损失中的贡献权重,使得大部分负样本(背景边界框)几乎不对分类损失产生影响,减轻了背景类和正类之间的不平衡。
回归损失是根据回归目标边界框对应的6个自由度定义的。通常预测转换后的6个自由度而不是直接预测这6个自由度,这是为了增加模型预测的动态范围,也通过为梯度提供更高的熵来提升训练过程。
对于依赖anchor boxes的回归目标检测网络。如果网络输入遇到检测对象很小以至于很模糊(比如距离相机太远)、不同尺寸的对象(点云分割网络分割汽车,行人,自行车等),使用anchor boxes是一种基本的做法。在这样的情况下,anchor boxes允许神经网络根据一组预定义好的带不同尺寸和纵横比的anchor boxes来学习它们的回归偏移,这些anchor boxes被设计为模型的超参数,以更好地匹配不同纬度的类对象。设计anchor boxes的目标就是,在最终训练结束时,每个类型的anchor box专门对应一类对象,这类对象与anchor box的尺寸和纵横比都最匹配。
上图中,gt表示ground truth,a表示anchor box;dimension使用gt/a是为了使预测目标的格式是对应匹配的anchor box偏移校正的形式;position中边界框的坐标是一个关于anchor box中心坐标的偏移,并且根据anchor box的dimension进行了标准化;偏航角被编码为gt和anchor box之间差值的三角函数,目的是为了使预测的角度处于0到2π之间。
不带anchor box的回归目标检测模型如下:
虽然不使用anchor box,但模型仍然预测边界框中心坐标相对于某一点的偏移,该点由feature map索引的空间坐标决定。
3d激光雷达目标检测不需要使用anchor box,
平滑L1损失已经成为回归目标检测的标准损失函数:
x表示预测值与回归目标之间的差值,因此每个边界框的6个自由度对应6个L1平滑L1损失函数。选择L1而非L2主要原因是在SGD对离群点的处理更平滑。除此之外,L1损失函数对于差值大于1的情况的导数是一个常量,不正比于误差的振幅,这也使得该损失函数对离群点有更好的鲁棒性。
最显著的数据增强例子是AlexNet。AlexNet之后,数据增强方法成为图像分类和检测模型的标准训练步骤。这种数据增强包括随机截取、缩放、旋转、水平翻转、光度变换。
点云数据增强必须兼容激光束的传播规则。
通常点云的数据增强(在激光雷达坐标系下)包括:绕z轴旋转,绕x-z平面/y-z平面翻转,稀释点云,增加点云的高斯噪声,视锥丢失(frustum dropout)和带点云对象的场景增强。这些增强方法不仅可以用在场景上,也可以用在对象上。在训练过程中,对于给定的点云场景,随机决策是否对场景使用场景水平或者对对象使用对象水平的数据增强方法。
3d目标检测网络被分为两类:输入排列不变和点云有序网格表示
点云排列不变性使得不能直接将CNN 目标检测网络用在点云目标检测上,因此CNN目标检测网络假定了网络输入是以方格形式的有序数据。网格有序数据结构的例子是图像,这意味着改变图像像素顺序会修改图像内容。而点云数据是一组无须的点的集合,而这意味着改变点的顺序并不会改变3d对象在点云中呈现的状态。点云的这一属性就使得,如果神经网络直接对输入的点云数据处理,那么它需要以排列不变的方式去处理。此外,预测出来的3d边界框也不应该因为输入的点云数据顺序不一致而受影响。
目前存在这样两类网络:能够直接接收点云数据而不依赖任何点云中间表示形式,具备处理输入排列不变性的3d目标检测神经网络和将点云转换成类似图像的有序网络表示,运用CNN进行目标检测的网络。
输入排列不变性的神经网络通过直接处理生的点云数据执行点云3d目标检测任务,不需要将点云数据转换成有序网格表示。
PointNet是一个输入排列不变神经网络,用于点云分类和分割任务(不用于3d目标检测任务)。PointNet网络的中心思想是这样一个通用逼近定理:任何连续输入排列不变函数f能够通过两个函数h和g组合逼近,其中g是一个确保f排列不变性的对称函数。
首先函数h分别对每个点云数据处理,将每个点转换成维度d的一个嵌入点,然后函数g接收该嵌入点,生成对应点云输入的一个维度d的全局特征嵌入。对称函数g的例子是逐元素的max-pooling和average-pooling。如果嵌入维度d是一个大到能够保证函数f能够通过组合函数f和g根据给定近似界限误差逼近,那么通用逼近理论(universal approximation theorem)是成立的。
在下面的PointNet网络架构中,
第一排蓝色部分确定了分类网络,而黄色部分是语义分割网络。在分类网络中,输入层到max-pooling层构成了函数h,而其中的max-pooling被看做对称函数g。嵌入维度d被规定为1024。在PointNet中,函数h对每个点云点处理,它通过全连接层和空间转换网络实现。PointNet网络中有两个空间转换网络:T-Net(上图中的两个白色网络)。空间转换网络对输入点执行数据依赖的仿射变换。数据依赖使得被应用于输入数据的仿射变换作为输入点本身函数固定。空间转换网络的主要目的是确保分类网络对应用于点云的仿射变换的不变性。
最终PointNet分类网络的输出对应输入的点云,是一个单分类结果(共输出k个类分数),语义分割网络依赖(带1024维度的)全局特征和(带64维度的)局部特征点云的级联来对每个点云做出单独的分类决策(共m个输出分数)。
PointNet不能执行3d目标检测任务,因为它的分类网络假定所有输入点云属于一个对象。而Frustum PointNets在PointNet的基础上增加了一个3d区域提案网络,目的是为了将3d输入场景划分