zl程序教程

您现在的位置是:首页 >  Java

当前栏目

从数据到模型:自驾高效感知并不简单

2023-02-18 16:47:03 时间

引言

当前自动驾驶感知模块涉及到的深度学习任务里,模型训练是其核心的组成部分。提起模型训练,训练参数,数据等因素都会对模型性能造成较大影响。本文旨在讨论这些影响因素中数据这一影响因素。

主要从数据质量,数据丰富度数据闭环三个层面进行探讨。

数据质量

在面对自驾的感知应用场景时,大家往往会最先想到“当前模型是否是当下问题的最优解(或最新最前沿)?”,因为这类更新更准的模型(或方法)可以决定未来技术走向及应用发展。在这种背景下,工程师们会疲于更换最新的、最优的模型来解决感知问题。但在实际的落地工程场景中,最重要的往往是一个稳定模型的迭代改进。这种背景下影响模型性能的最主要因素是数据质量

对于一个基于深度学习的感知模型,其往往拥有足够大的模型容量。

知识卡片

足够大的模型容量是什么含义?

容量的本质是指模型的拟合程度。具体而言,在我们过往经验中可以发现:使用某个一般的网络,一般的训练参数,就可以得到尚可的模型,真正花费在调节参数上的时间并没有想象中那么多。

举例:当使用YOLO系的算法去做2D感知任务时,可能根据自有数据、默认的训练参数去训练一个模型,就可以有一个尚可的结果。

我们或许能够认为,对足够大模型容量的感知模型而言,最大程度影响其模型的不是超参数或网络参数,而是训练数据——将什么质量的数据提供给网络,网络本身就会学习到相对的结果。

所以当发现模型训练指标并不理想时,我们往往应该首先检查的是数据质量,而不是模型本身。大部分情况下,大概率是我们训练数据的质量本身出现了问题:

iGear标注平台,可以有效帮我们控制数据质量,以更科学有效的审核管理方法,全面提升标注质量,解决数据质量的核心因素。

数据丰富度

在提升模型性能的同时,也需要考虑模型的泛化能力,而泛化能力取决于数据丰富度

模型训练中经常会遇到的一个问题是,如果数据分布过于单一,模型会过于拟合训练数据。在保证数据质量的前提下,数据丰富度往往是提升模型性能的核心方法。数据丰富度涉及到增加数据量级与增加数据场景两个方面。当这两个方面被不断满足,扩充并形成新的数据集,之后进行从零开始的新训练,往往可以有效提升模型性能。

增强数据丰富度的方式,首先会想到简(壕)单(无)粗(人)暴(性)的多采集数据,这种方式可同时满足增加数据量级与增加数据场景两个方面,但该方式的成本较高且存在采集复杂和未知困难的问题。

另一个常用来增加数据丰富度的方式是数据增强。数据增强可以卓有成效地防止过拟合,而且也可以较为轻松地增加大量数据,节约成本。当下,在感知问题涉及到的数据增强方法中,无论Camera还是Lidar,都有一套常用的pipeline供感知算法工程师使用。

但使用这种方式时仍需注意:整个数据集是否依然还在原来训练数据的场景范围内?如果原本的数据场景已经非常单一,那么数据增强的效用就会受到很多限制,从而变为次要因素。这种情况下数据增强这种方式只满足了增加数据量级的方面,没有满足增加数据场景这一方面。

近年来也有一些其他增加数据丰富度的方法,比如模拟数据、生成对抗模型等,或许也能带来一定程度的提升,但这些方法都有各自的局限性。

需要明确的是,所谓数据丰富度,在成本能够承受的情况下,实际数据的采集和标注才是最根本的,其他方法则是锦上添花。

iGear的AAML系统能够自动化地开发模型欠缺的场景,并从标注数据中筛选提取出所需要的响应数据,以此从本质中选择出对于模型而言更适合的数据,不断扩充数据丰富度。同时,该系统的预标注可以在最大程度上节省成本。这样算法工程师既把握了数据丰富度的核心,也可以有效控制成本,帮助大家训练指标更优的模型。同时,iGear AAML也提供了一系列的数据增强pipeline,在这个基础上模型能够获得更好的表现。

知识扩展

另一个类似于增加数据丰富度的方法就是将预训练模型放在新的数据集上进行精确调优,很多论文中也都是优先使用 ImageNet一类的大数据集训练出较优的预训练模型,之后会在新的训练任务上再调整具体模型结构。我们的经验是,分类任务的训练会更加高效,因为分类任务可以让网络快速学习到各种特征。使用其他的任务训练时往往没有这么高效,毕竟分类任务是很成熟的训练流程,学习速度更加可靠。所以多任务网络中也可以尝试增加一个分类任务来辅助训练;第二,分类任务都有大量的数据集,我们可以利用这些丰富的数据集,在某种程度上增加数据的丰富性。

对于预训练,可以认为是用之前训练的先验知识初始化网络,而非随机分布。这样相当于对网络增加了先验知识的限制,同时算法工程师往往也会使用一个比较小的学习率进行训练,一般认为较小的学习率更加容易到达局部最优或者鞍点。这样的组合,对于无法直接干涉注入先验知识的模型,提供了在先验知识附近寻找局部最优点的途径。

数据闭环

如何更好地利用数据?其核心方法是数据闭环

深度学习发展到今天,数据闭环这个词对大家而言已经不陌生了,甚至觉得听了太多有些腻烦了。毋庸置疑,数据闭环是我们解决任何深度学习相关任务的朴素思路。这个方法本身并没有值得过多的强调,甚至还可能会对其能否胜任当下自驾算法的核心内容而产生疑问,但我们的分析如下:

  1. 数据闭环肯定没法解决所有的问题,甚至 95% 都未必能做得到。
  2. 如果抛弃数据闭环这个思路,可能都无法达到及格的程度。
  3. 对于目前的自驾研发体系,如果不使用数据闭环,会很快被新兴的、成功建立起这套基础闭环系统的研发团队迅速超过。

所以,数据闭环的真正核心是,是否真正建立起这套系统。建立这套系统的原型并没有太大难度,但是如何在海量、杂乱的数据涌入情况下,依旧能够让闭环飞轮高效、无错地转动,才算是这套系统的关键。系统本身可能包含了多个组件,每个组件实现的代码基可能都不一样,所以如何设计和搭建以上系统,也是一个艰巨的工程挑战。

以上所列内容是iGear搭建与构建这套闭环系统所解决的部分核心问题,它包含了我们对算法的理解与工程化的积淀,只有真正解决核心问题,才是理解并实现了数据闭环。

后续iGear将会对各模块的建设经验进行整理并逐一介绍,iGear也将不断开发行之有效、无错的数据闭环系统,化繁为简。

i车Gear联

一群致力于推动汽车智能网联化发展进程的工程师,一群投身于汽车产业数字化变革的小年轻,一个以数据处理和AI技术为汽车研发行业服务的团队,将日常所见、所想、所感分享于此,一起笑看风云起。