如何构建自动驾驶数据集(上篇)
数据号称是AI时代的石油,没有什么比数据更重要了,那么如何构建自己的自动驾驶数据集呢?首先还是需要一些机器学习的基础知识。机器学习中最常见的是深度学习,深度学习可以按照训练方式分为六大类,分别是监督学习(supervised learning):已知数据和其一一对应的标注(标签),也就是说训练数据集需要全部标注。训练一个智能算法,将输入数据映射到标注的过程。监督学习是最常见的深度学习,也是ADAS自动驾驶感知领域几乎唯一的深度学习方式,就是人们口中常说的分类(Classification)问题。无监督学习(unsupervised learning):已知数据没有任何标注,按照一定的偏好,训练一个智能算法,将所有的数据映射到多个不同标签的过程。强化学习(reinforcement learning):智能算法在没有人为指导的情况下,通过不断的试错来提升任务性能的过程。“试错”的意思是还是有一个衡量标准,用棋类游戏举例,我们并不知道棋手下一步棋是对是错,不知道哪步棋是制胜的关键,但是我们知道结果是输还是赢,如果算法这样走最后的结果是胜利,那么算法就学习记忆,如果按照那样走最后输了,那么算法就学习以后不这样走。弱监督学习(weakly supervised learning): 已知数据和其一一对应的弱标签,训练一个智能算法,将输入数据映射到一组更强的标签的过程。标签的强弱指的是标签蕴含的信息量的多少,比如相对于分割的标签来说,分类的标签就是弱标签。半监督学习(semi supervised learning) :已知数据和部分数据一一对应的标签,有一部分数据的标签未知,训练一个智能算法,学习已知标签和未知标签的数据,将输入数据映射到标签的过程。半监督通常是一个数据的标注非常困难,比如说医院的检查结果,医生也需要一段时间来判断健康与否,可能只有几组数据知道是健康还是非健康。多示例学习(multiple instance learning) :已知包含多个数据的数据包和数据包的标签,训练智能算法,将数据包映射到标签的过程,在有的问题中也同时给出包内每个数据的标签。多事例学习引入了数据包的概念。
我们重点来研究监督学习和强化学习。监督学习通常再分为CNN和RNN两大类,CNN主要针对空间域的问题,RNN针对时间域的问题。
深度学习分为训练和推理两部分,训练就好比我们在学校的学习,但神经网络的训练和我们人类接受教育的过程之间存在相当大的不同。神经网络对我们人脑的生物学——神经元之间的所有互连——只有一点点拙劣的模仿。我们的大脑中的神经元可以连接到特定物理距离内任何其它神经元,而深度学习却不是这样——它分为很多不同的层(layer)、连接(connection)和数据传播(data propagation)的方向,因为多层,又有众多连接,所以称其为神经网络。
训练神经网络的时候,训练数据被输入到网络的第一层。然后所有的神经元,都会根据任务执行的情况,根据其正确或者错误的程度如何,分配一个权重参数(权重值)。在一个用于图像识别的网络中,第一层可能是用来寻找图像的边。第二层可能是寻找这些边所构成的形状——矩形或圆形。第三层可能是寻找特定的特征——比如闪亮的眼睛或按钮式的鼻子。每一层都会将图像传递给下一层,直到最后一层;最后的输出由该网络所产生的所有这些权重总体决定。
经过初步(是初步,这个是隐藏的)训练后得到全部权重模型后,我们就开始考试它,比如注入神经网络几万张含有猫的图片(每张图片都需要在猫的地方标注猫,这个过程一般是手工标注,也有自动标注,但准确度肯定不如手工),然后拿一张图片让神经网络识别图片里的是不是猫。如果答对了,这个正确会反向传播到该权重层,给予奖励就是保留,如果答错了,这个错误会回传到网络各层,让网络再猜一下,给出一个不同的论断这个错误会反向地传播通过该网络的层,该网络也必须做出其它猜测,网络并不知道自己错在哪里,也无需知道。在每一次尝试中,它都必须考虑其它属性——在我们的例子中是「猫」的属性——并为每一层所检查的属性赋予更高或更低的权重。然后它再次做出猜测,一次又一次,无数次尝试……直到其得到正确的权重配置,从而在几乎所有的考试中都能得到正确的答案。
得到正确的权重配置,这是一个巨大的数据库,显然无法实际应用,特别是嵌入式应用,于是我们要对其修剪,让其瘦身。首先去掉神经网络中训练之后就不再激活的部件。这些部分已不再被需要,可以被「修剪」掉。其次是压缩,这和我们常用的图像和视频压缩类似,保留最重要的部分,如今模拟视频几乎不存在,都是压缩视频的天下,但我们并未感觉到压缩视频与原始视频有区别。 压缩的理论基础是信息论(它与算法信息论密切相关)以及率失真理论,这个领域的研究工作主要是由上世纪40年代的 Claude Shannon 奠定的,实际机器学习所有的理论基础在上世纪50年代就已经全部具备,绝大部分理论基础也来自Claude Shannon 的信息论,唯一差的就是算力,是英伟达的GPU造就了深度学习时代的到来,目前的深度学习没有理论上的突破,只是应用上的扩展。经过压缩后,多个神经网络层被合为一个单一的计算。最后得到的这个就是推理Inference用模型或者说算法模型,实际我觉得叫prediction猜测更准确。
实际深度学习就是靠蛮力计算(当然也有1X1卷积、池化等操作降低参数量和维度)代替了精妙的科学。深度学习没有数学算法那般有智慧,它知其然,不知其所以然,它只是概率预测(深度学习里最重要的置信度)。所以在目前的深度学习方法中,参数的调节方法依然是一门“艺术”,而非“科学”。深度学习方法深刻地转变了人类几乎所有学科的研究方法。以前学者们所采用的观察现象,提炼规律,数学建模,模拟解析,实验检验,修正模型的研究套路被彻底颠覆,被数据科学的方法所取代:收集数据,训练网络,实验检验,加强训练。这也使得算力需求越来越高。机械定理证明验证了命题的真伪,但是无法明确地提出新的概念和方法,实质上背离了数学的真正目的。这是一种“相关性”而非“因果性”的科学。历史上,人类积累科学知识,在初期总是得到“经验公式”,但是最终还是寻求更为深刻本质的理解。例如从炼丹术到化学、量子力学的发展历程。人类智能最为独特之处也在于数学推理,特别是机械定理证明,对于这一点,机器学习方法是无能为力的。
对于自动驾驶数据集有两大类型,一类是基于管线的,另一类是基于端到端的。基于管线的主要是感知领域数据集构建工作量比较大。
构建数据集可以分为车端、本地端和云端三个部分。
ADAS深度学习感知算法的典型开发流程如上图
感知领域我们以Kitti数据集为例,KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办,是目前全球公认的自动驾驶领域最权威的测试数据集,也是最早的。该数据集用于评测立体图像(stereo),光流(optical flow),视觉测距(visual odometry),3D物体检测(object detection)和3D跟踪(tracking)等计算机视觉技术在车载环境下的性能。KITTI包含市区、乡村和高速公路等场景采集的真实图像数据,每张图像中最多达15辆车和30个行人,还有各种程度的遮挡与截断。整个数据集由389对立体图像和光流图,39.2 km视觉测距序列以及超过200k 3D标注物体的图像组成[1] ,以10Hz的频率采样及同步。总体上看,原始数据集被分类为’Road’, ’City’, ’Residential’, ’Campus’ 和 ’Person’。对于3D物体检测,label细分为car, van, truck, pedestrian, pedestrian(sitting), cyclist, tram以及misc组成。采集车的双目摄像头基线长54厘米,车载电脑为英特尔至强的X5650 Cpu,RAID 5 4TB硬盘。采集时间是2011年的9月底和10月初,总共大约5天。主要内容如下
下图为Kitti的数据采集车
主要传感器型号如下表
名称 | 型号 | 数量 | 简介 |
Inertial Navigation System (GPS/IMU) | OXTS RT 3003 | 1 | GPS导航与惯性传感器(IMU) |
Lidar | Velodyne HDL-64E | 1 | 三维数据采集 |
Grayscale cameras | 1.4 Megapixels: Point Grey Flea 2 (FL2-14S3M-C) | 2 | 灰度相机 |
Color cameras | 1.4 Megapixels: Point Grey Flea 2 (FL2-14S3C-C) | 2 | 彩色相机 |
Varifocal lenses | 4-8 mm: Edmund Optics NT59-917 | 4 | 变焦距透镜 |
OXTS,即Oxford Technical Solutions,脱胎自牛津大学,成立自1998年。RT 3003传感器就是一个中级惯性传感器,记录一个完整的三维运动和动力学轮廓与GNSS +惯性传感器融合。提供平滑、健壮和可重复的实时输出,具有低延迟。完全集成的高档MEMS IMU和RTK能力的GNSS接收器记录了一个全面的测量列表,包括位置、速度、加速度和方位。集成6 轴导弹级MEMS IMU,100 Hz刷新频率, L1/L2 RTK 精度: 0.02m / 0.1◦ 即使GPS信号丢失,RT仍然能通过内部的惯性传感器来继续输出数据。可以通过轮速计等装置,校正位置漂移,在2分钟正常行驶的条件下,位置误差不会大于5米。内部的ADC转换,20bit分辨率,加速度测量的分辨率是0.12mm/s2(12 μg)。ADC转换模拟量输入,采用圆锥/划船(coning/sculling)运动补偿算法来避免信号的混淆。价格据说接近百万人民币(仅供参考,不负责任),目前有第三代RT3003和更高级的RT4000,频率为250Hz。国内为降低成本,采用分体,即将GNSS和IMU分离,典型的如百度的NovAtel SPAN ProPak6 GNSS接收机 和 NovAtel IMU-IGM-A1。天线一般是GPS NovAtelGPS-703-GGG-HV。顺便说一句,这需要杠杆臂测量做标定,偏移量误差在1厘米之内。这一套参考价格大约25万人民币(仅供参考,不负责任)。
上表为相机参数,现在最少都是400万像素起,有些是800万像素。激光雷达是64线激光雷达,想必大家已经很熟悉了,无需介绍了。
为什么需要这么多传感器和IMU?
上图为Kitti的数据集格式
上为标注文件的readme.txt文件。该文件存储于object development kit (1 MB)文件中,readme详细介绍了子数据集的样本容量,label类别数目,文件组织格式,标注格式,评价方式等内容。 从中我们我们可以看出IMU主要是为了保证数据的时间戳一致,建立统一的坐标系,包括全部坐标系和局部坐标系。高精尖传感器是为了提供参考数值,即Ground Truth。
自动驾驶用的最多就是3D目标检测,目标检测需要同时实现目标定位和目标识别两项任务。其中,通过比较预测边框和ground truth边框的重叠程度(Intersection over Union,IoU)和阈值(e.g. 0.5)的大小判定目标定位的正确性;通过置信度分数和阈值的比较确定目标识别的正确性。以上两步综合判定目标检测是否正确,最终将多类别目标的检测问题转换为“某类物体检测正确、检测错误”的二分类问题,从而可以构造混淆矩阵,使用目标分类的一系列指标评估模型精度。
除此之外需要数据记录仪Data-logging,这个数据量和带宽是惊人的,因此需要小型数据中心级的电脑系统和网络系统做数据记录。后备箱就会变得如下图,塞满了路由器或交换器,大容量固态硬盘和高速数据处理系统。
考虑路面颠簸,这些服务器可靠性受到挑战,近期开始出现专用的数据记录仪,都通过了ISO16750-3认证,不怕颠簸。典型的如EUROTECH的HPEC数据记录仪。
DynaCOR 40-34内部框架如下
可以看出基本就是个小型服务器,据称传输速率高达4.4GBps。如果你是融资数十亿的公司,那么还有更高级的数据记录仪。
这是2020年3月,dSpace推出的转为L4级自动驾驶数据记录系统设计的产品,即AUTERA AutoBox。最高传输速率可达50Gbps,其内部有英特尔12核Xeon处理器,最高存储容量32TB。它有8个以太网接口,4个10GB,4个1GB。RAM内存标配为32GB,最高可扩展到512GB。6个扩展槽,可以增加原始界面,如GMSL II、FPD-Link III、CSI II,也可以继续增加以太网接口,还可以增加GPU或FPGA加速卡。它通过了ISO 16750-3认证,不怕颠簸路面。这设备猜测价格不低于30万。
一般最少需要20-50辆数据采集车,越多越好,每辆车的成本大约120-200万人民币,每天每辆车采集的真实世界数据大约10-150TB之间(200-800万像素,摄像头的数量,激光雷达的数量和线数多少),如此巨量的数据只能先存储在本地,经过初步处理后再上传到云端。初步处理是删除那些高度重复的数据,争取数据的尽量多样化,这个过程可以机器化,但是需要自己设计一套精妙的软件来实现,没有独立的供应商。
端到端即E2E领域需要增加记录驾驶者转向幅度、油门幅度、刹车幅度,当然激光雷达就不需要了,只需要摄像头。