在自动驾驶中,卷积神经网络是用于各种感知任务的必备工具。尽管CNN擅长从摄像机图像(或视频剪辑形式的序列)中提取信息,但我们毕竟不断遇到各种不适合卷积神经网络的元数据。
直接在元数据上使用CNN可能不是一个好主意
按照传统定义,元数据是指用于描述其他数据的一组数据。在本文中,根据元数据的定义:
- 元数据是一种伴随相机图像数据作为辅助信息的异构,非结构化或无序数据。按照传统的定义,这些数据“描述”了相机数据。
- 元数据的大小通常比相机图像数据小得多,每个图像的数量从几到最多几百个不等。
- 与图像数据不同,元数据不能用规则的网格表示,并且每个图像的元数据长度可能不是恒定的。
所有这些属性使CNN难以直接使用元数据,因为CNN假定网格上的数据间隔是规则的,并且网格上的相邻数据也具有紧密的空间或语义关系。
我遇到的元数据类型可以分为以下几类:
- 可能会影响传感器观察的传感器参数:相机内部/外部
- 不同类型的传感器数据:雷达针或激光雷达点云
- 两组数据之间的对应/关联
一种特殊情况是激光雷达点云数据。一帧典型的激光雷达点云通常具有数十万个点,伴随一帧或几帧摄像机图像。激光雷达点云的信息如此丰富,以至于它们本身可以构成独立的感知管道和相机感知的基础。因此,很少将其视为相机数据的辅助信息,所以它不是此处考虑的典型元数据类型。对于点云数据,人们已经开发了特定的神经网络体系结构,例如PointNet或图形神经网络(GNN),可以直接使用点云数据,这超出了本文的范围。
下面我们回顾一下最近文献中提出的使用卷积神经网络处理元数据的不同方式。
相机参数
深度学习在SLAM的许多方面都取得了重大进展,其中之一是单眼深度估计。单眼深度估计本质上是不适合本文讨论的研究的,并且由于单眼图像缺乏规模,在一个数据集上训练的模型通常不能很好地推广到其他数据集。这与常规对象检测形成了鲜明的对比,在常规对象检测中,对象检测器的性能不依赖于特定的相机模型(要知道哪种相机模型拍摄了COCO数据集中的数十万张图像,这真是一场噩梦。)
使用不同焦距镜头拍摄的同一场景
相机的固有特性,尤其是镜头的焦距,决定了单眼图像中缺少的比例因子。一般而言,无法判断是从距离物体较远的位置使用焦距较长的相机拍摄的图像还是在距物体较近的位置使用焦距较短的相机拍摄的图像。
单眼图像的尺度模糊性
因此,模型训练和相关结论通常是在使用同一相机(或至少使用相同传感器和镜头规格的相机)收集的一个数据集上进行的。如果更改相机模型,则必须收集一个全新的数据集并注释距离后再次训练模型。
幸运的是,在自动驾驶和其他工业应用中,相机的内在特性很容易从相机制造商那里获得,并且在相机的整个使用寿命中相对固定。我们可以将这些数据运用于单眼深度预测网络吗?
相机固有特性具有四个自由度,行和列方向的焦距f_x和f_y已通过像素大小归一化,而c_x和c_y是主点的像素位置。我能想到的一个简单的解决方案是将这四个数字与深度解码器融合在特征图的顶部,并添加一个全连接层以将这四个数字融合。CAM-Convs:适用于单视图深度的相机感知多尺度卷积(CVPR 2019)通过将数据处理为伪图像提出了一种更好的解决方案。
CAM-Convs:摄像机感知的多尺度卷积
Cam-Conv从Uber的CoordConv中获得了很多启发(卷积神经网络和CoordConv解决方案的有趣教训,NeurIPS 2018)。CoordConv将两个网格的网格通道连接到原始图像和中间特征图,以对位置信息进行编码。Cam-Conv建立在CoordConv的顶部,首先将CoordConv的原点从左上角移动到主点,从而创建了两个居中坐标(cc)贴图。这两个通道对主要点信息进行编码。然后通过将cc通道除以相机焦距f并取反正切来计算视场(fov)映射,这基本上可以计算出每个像素的方位角和仰角。这两个通道对焦距信息进行编码。最后,归一化坐标(nc)映射也被连接到特征映射(本质上是归一化的CoordCon)。
图像中像素的方位角和仰角(改编自src)
实际上,CoordConv本身可以看作是将坐标信息编码到卷积神经网络的一种情况。它为卷积神经网络提供了平移方差的功能,对于学习位置敏感的数据非常有用。