在过去的几十年中, 随着计算机和通信技术的高速发展, 交通系统正逐步引入智能要素, 自动驾驶技术应运而生.由于造成交通事故最主要的原因之一是人为因素, 因此, 引入自动驾驶技术能够大大降低交通事故发生的概率.近十年来, 随着感知组件和智能算法的快速发展, 全球有多家企业和研究机构正积极开发自动驾驶技术.国际自动化工程师学会/美国汽车工程师学会(SAE)于2014年提出了自动驾驶5级分级方案, 该方案成为了当前被普遍接受的标准.自动驾驶分级方案从L0递增到L5(L0为传统驾驶, 不算在5级分级方案中)分别代表了自动驾驶汽车的智能程度由浅至深.L1级别为辅助驾驶, 在特定的条件下, 自动驾驶汽车具有一个或多个自动控制功能, 但不能脱离驾驶员的控制.具有L1级别的自动驾驶车辆往往包含高级驾驶辅助系统(ADAS), 并且目前高级驾驶辅助功能已逐渐成为中高端车型的标准配置.尽管目前已有越来越多的机构在为L5级别自动驾驶功能提供解决方案, 但目前的技术尚难以满足L5级别自动驾驶即完全自动驾驶的需求.自动驾驶系统的架构一般由3部分组成: 感知模块、决策模块以及控制模块.感知模块负责自动驾驶汽车周围环境认知, 往往由摄像头和雷达等组件组成.决策模块需要根据感知模块感知到的信息, 根据一定的算法得出自动驾驶汽车下一步的行为并传递给控制模块.控制模块负责将决策指令传递给汽车硬件, 例如方向盘、油门等, 完成对自动驾驶车辆的控制.
然而, 与任何依赖于软件算法的系统一样, 自动驾驶系统容易在一些特殊的场景下做出错误的判断并导致事故的发生, 同时也容易受到恶意攻击进而导致系统失效.如由Uber生产的自动驾驶汽车在2018年发生了事故, 导致一名行人死亡.因此, 自动驾驶车辆需要经过严格且全面的验证才能保证车辆的安全使用.目前已有多项工作研究自动驾驶系统的测试和验证技术.众所周知, 直接采用真实车辆进行检测的成本是非常昂贵的, 因此自动驾驶车辆在进行真车测试之前往往会在虚拟环境中进行测试.通过在仿真软件中提供与真实驾驶场景相似的仿真场景, 来测试自动驾驶算法的健壮性及正确性.根据测试对象的受控程度, 虚拟测试又分为软件在环(software-in-the-loop, 简称SiL)、硬件在环(hardware-in-the-loop, 简称HiL)、模型在环(model-in-the-loop, 简称MiL)和车辆在环(vehicle-in-the-loop, 简称ViL).由于自动驾驶测试场景的多样性和真实驾驶事故中场景的突发性, 如何生成有效的测试用例以及如何评价测试场景的有效性成为了目前广泛研究的课题.Koopman等人[1]总结了自动驾驶的测试和验证的挑战.他们认为自动驾驶的测试与验证面临着以下5个挑战领域: 驾驶员非在环、复杂需求、不确定性算法、归纳学习算法和故障操作系统.
目前, Li等人、Kang等人和Garcia等人针对自动驾驶系统的测试进行了总结.Li等人[2]总结并讨论了人工智能和人工智能测试之间的关系, 并将自动驾驶作为具体案例讨论了人工智能在其中的测试挑战, 包括测试任务的定义、测试框架及其形式化定义以及并行测试.Garcia等人[3]分析了Baidu Apollo和Autoware两个开源项目的16 851次提交中的499个与自动驾驶相关的错误, 并将这些错误进行了分类, 从中总结出了13种导致错误的根本原因、20种错误症状和18种自动驾驶组件.Kang等人[4]整理了37个开源或者半开源的自动驾驶数据集和22个虚拟仿真环境.整理出的数据集全部来自真实采集的数据, 且至少包含来自摄像头、激光雷达或毫米波雷达采集的数据.与上述针对自动驾驶系统测试的总结性文献不同, 本文充分调研了近年来与自动驾驶测试相关的文献, 整理了针对自动驾驶系统与智能相关的模块的测试, 总结了相关测试的测试用例生成方法以及覆盖度量指标, 并对自动驾驶测试的未来发展做出了展望.本文也是针对自动驾驶智能系统测试的首篇综述, 可为该领域的相关研究团队提供参考.
如前文所述, 自动驾驶系统往往由感知模块、决策模块以及控制模块组成.其中, 控制模块往往与智能无关, 因此本文只针对感知模块和决策模块的测试技术进行了总结.目前的研究中部分是单独针对感知模块进行测试, 部分针对决策模块进行测试, 也有许多研究针对整车进行测试.与此同时, 一些高级功能模块同时包含了感知模块和决策模块甚至控制模块的相关组件, 例如高级辅助驾驶系统(ADAS), 有许多学者致力于针对这样的功能模块进行测试.本文针对自动驾驶智能系统测试的总结框架可如图 1所示.
为完成本文的研究问题, 我们首先使用“Autonomous Vehicle Testing”“Automative Systems Testing”“Self- driving Testing”“Automated Vehicle Testing”等关键词在国内外知名的学术搜索引擎(例如, CNKI、必应学术、谷歌学术、DBLP等)上进行搜索, 并筛选出与本综述相关的文章.随后, 通过检索筛选出来的文章的参考文献和相关作者发表论文的列表, 进一步补充了相关文献.最终, 我们确定了与本文相关的论文56篇, 其中19篇发表在CCF-B类及以上或SCI-2区及以上, 9篇论文托管在arxiv上, 其余论文大多发表在IEEE等知名学术机构下.论文大多发表在2016年及以后, 其中发表在2019年及以后的文章有20篇, 占全部文章的35.7%.论文在各个章节的分布如图 2所示.具体的年份分布如图 3所示.
本文第1节介绍针对自动驾驶系统中感知模块测试的相关研究.第2节描述针对自动驾驶系统中决策模块测试的相关研究.第3节总结针对自动驾驶系统中综合功能模块的测试.第4节梳理针对自动驾驶整车的测试.第5节整理当前研究中用到的数据集和模拟器.最后, 对自动驾驶智能系统测试的未来工作进行总结和展望.
1 感知模块
在自动驾驶系统中, 感知模块作为辨识周边环境、物体的“感官”, 起着至关重要的作用, 是整个自动驾驶系统能够安全、高效运行的基础.感知模块集成了包括视觉感知在内的多种传感器, 例如深度摄像机、毫米波雷达和激光雷达等.感知模块通过各种感知元件采集到周边物体的信息, 结合目前发展迅速的深度神经网络模型, 将各种收集到的感知数据融合, 得到自动驾驶汽车周边环境详实的数据表示.感知模块使得自动驾驶系统能够像人类一样去“认知”周围的环境事物, 去分析辨别周围的物体.深度神经网络技术的不断发展加速了感知模块的发展速度, 深度卷积神经网络能够很好地辨识出自动驾驶汽车前方的环境, 但与此同时, 由感知模块带来的安全性问题也引起了人们的注意, 目前的感知模型在物体识别上仍具有不同程度的错误率, 如何通过测试的方法检验感知模块的正确性成为了相关研究的焦点.目前, 许多学者已经对如何测试基于神经网络的感知模块进行了深入研究.经过本文的整理, 目前针对感知模块的测试主要分为以下几种方式: 生成对抗样本、基于内省的自我评估以及通过生成真实图像来测试感知模块.
1.1 相关研究现状
生成对抗样本是一种测试自动驾驶感知模块较为常见的方法, 与传统软件工程方法中基于变异的模糊测试(mutation-based fuzzing)相似, 该方法通过对原测试用例(这里以图像为例)进行包括平移、交换和突变等在内的不同程度上的修改, 在保留原测试用例基本外表不变的基础上(人类可以正常识别), 使得感知模块产生错误的识别结果.对抗样本在性质上又可分为实体对抗样本和数字对抗样本.实体对抗样本以“贴纸”的形式可以通过直接粘贴到实体上的方式对感知模块进行攻击.数字对抗样本则针对数字图像进行修改
Eykholt等人[5]设计出一种产生实体对抗样本的算法以攻击目标识别系统.它可以成功地欺骗包括YOLO、Faster-RCNN在内的目标检测器.该算法可以将对抗输入压缩为“对抗贴纸”, 被对抗贴纸附着的目标物体(例如停车指示牌)会被目标检测器错误地识别.该团队用附着对抗贴纸的停车指示牌录制了相关视频, 并验证得出该贴纸在大部分视频帧中都会导致YOLOv2检测器错误地识别物体.在此基础上, 该团队又提出了一种普适的攻击算法: RP2(robust physical perturbations), 以在不同的物理条件下生成对抗扰动.Eykholt等人[6]认为, 物理对抗样本必须能够经受住不断变化的物理条件, 并能有效地欺骗分类器.物理对抗样本必须要与环境条件相适应, 且不能攻击背景图像, 要足够微小, 并且有一定误差.在实验中, 针对LISA-CNN[7]和GTSRB-CNN[8]模型(LISA是一个包含47种标志牌的美国交通标志牌数据集, GTSRB[9]是德国交通标志牌数据集.LISA-CNN和GTSRB-CNN分别是在两种数据集上训练生成的卷积神经网络模型), 该团队设置了多种攻击, 包括限制物体的海报攻击(针对广告牌的图片扰动, 并打印成海报替换广告牌)和贴纸攻击(模拟广告牌被广告和涂鸦遮挡的情况), 证明了攻击的有效性.除此之外, Eykholt等人还设置了静态实验(实验室测试)和动态实验(驾车测试)两种实验方法, 以验证RP2攻击在多种实验条件下都有较高的成功率.该实验结果表明, 生成在变化距离和角度上鲁棒的对抗样本是可行的.
深度网络模型与传统软件工程系统存在着非常大的差异, 在自动驾驶中, 感知模块的输入往往是一段连续的视频, 且视频中图像的角度和距离也时刻发生着变化, 这导致了对抗性样本不能时刻保持高效的攻击性.Lu等人[10]针对此现象提出了新的看法: 生成对抗样本对于自动驾驶物体识别分类器或者探测器的影响并不大.Lu等人使用了几种常见的对抗样本生成方式(FastSign Attack、Iterative Attack、LBFGS Attack), 针对道路指示牌进行扰动.为了模拟真实场景, 该团队打印了扰动后的停车指示牌图片, 并悬挂在不同距离和角度的地点处.在实验中, 文献[10]计算了在各种距离下的对抗样本失效比率, 发现对抗样本失效比非常高, 且随着悬挂距离的增加而增加.这也证明, 距离和角度很容易打破对抗扰动对分类器和探测器的影响, 对抗样本图片在真实场景下很难对分类器和探测器产生影响.从而使得在大部分真实场景下, 使用电子手段生成的对抗样本对分类器和探测器的影响甚微.
外部攻击的方法受到了角度和距离的制约, 一些学者尝试着从感知模块本身入手, 希望其能够自动发现自身存在的错误.感知系统的性能下降会影响决策系统, 使其无法做出可靠的决策.这就促使研究人员需要构建具有情境感知能力的系统, 以评估系统在本时刻做出的决策是否可靠.这种自我评估能力称为“内省”.Daftry等人[11]为感知系统中的内省行为提出了一个通用框架, 使系统能够通过测量系统状态的合格程度来识别由于感知系统性能下降而无法做出可靠决策的情况.该框架由Spatio-temporal CNN与线性SVM组成, 根据最后输出的故障预测得分来判断预测的可靠性, 以便基于该输入来计划一个动作, 或将其丢弃并采取替代行为.Daftry等人在自主导航任务中进行实验: 通过观察无人驾驶的微型飞行器在高、低杂波密度区域内数次自主飞行(1.5m/s)的平均距离来评估避障系统的性能.基于实验得到的故障率曲线等结果表明: 内省模型使得无人机能够自主飞行的平均无坠毁距离超过1 000m, 显著提高了风险规避性能.
类似于内省的想法, Gurău等人[12]尝试了一种新的范式: 根据过去在同一工作空间运行所积累的经验, 预测感知系统出错的概率.文献[12]假设在相似的驾驶条件下, 相同的物理位置会导致相似的感知结果.因此, Gurău等人多次遍历相同的路线并沿其收集性能估算值, 以创建性能记录.并且, 在测试时利用这些记录来预测当前遍历系统的性能.据此, 他们提出了两种模型, 第1种方法仅仅特定于位置特征; 第2种方法则在合并过去结果时, 还额外考虑了外观相似性, 在进行位置估计后得到的局部邻域中进行搜索, 找到与实时帧最匹配的记录.在实验过程中, 该团队反复遍历相同的路线并更改操作条件, 利用收集的性能记录来预测两个不同的基于图像的行人检测器在当前遍历中的性能.实验结果表明, 这两种方法均可减少两种不同检测器模型的错误决策.此外, 利用视觉外观还可以提高感知系统性能预测的准确性.
Ramanagopal等人[13]结合了软件工程方法中的差异测试方法, 设计并实现了一个能够自动检测自动驾驶车辆感知模块识别错误的模型.他们通过两种方法来检测感知模块发生的错误: (1) 基于时间因素, 即比较相同检测器在相邻时间的检测结果; (2) 基于空间因素, 即比较相同检测器在带有空间信息图像上的识别情况.文献[13]指出, 目标检测器在一个连续的视频片段的相邻帧中会发生识别结果不一致的情况, 而目标追踪器在这种情况中的表现则较为可靠.于是, Ramanagopal等人使用两种结果的差异作为判断感知模块在时间因素上是否发生错误的依据.同时, 他们发现深度相机采集到的深度图片对目标检测器的检测结果会产生影响, 即两张场景完全相同的图片, 其中一张具有深度信息, 会让目标检测器得到不同的检测结果.于是, 该团队将带有深度信息图片的检测结果与普通图片的检测结果的差异, 作为判断感知模块在空间因素上是否发生错误的依据, 并设计了一个二分类器, 依据差异的多种特征进行分类, 得到目标检测器可能发生的错误.该团队使用3种先进的目标检测器作为实验对象: SSD、Faster R-CNN、RRC, 使用Sim 200k[14]数据集作为检测器的训练集, 并通过游戏引擎生成了一个带有目标追踪信息的数据集GTA作为测试集, 同时也使用了现实生活中的真实数据集KITTI作为测试集.实验结果表明, 3种检测器在使用了错误检测器纠正后, F1得分能够分别上升4.22%、0.87%、3.57%.
无论是“内省”的方式, 还是生成对抗样本, 都是通过辅助攻击的方式来对以卷积神经网络为主的感知模块进行测试, 而不是直接生成完整的测试图像或测试场景.随着对感知模块测试研究的逐步深入, 针对感知模块的测试逐渐基于两部分, 即生成完整的仿真场景和完整的真实场景.与对抗生成技术相比, 该类方法的目标是生成真实的图像, 而非将干扰引入到先前存在的图像中.
Dreossi等人[15]认为前人的验证技术[16]通常会对经过处理的卷积神经网络施加限制, 并遭受可伸缩性问题的困扰.故该团队提出了一个通过生成综合数据集以系统测试卷积神经网络的框架, 从而达到系统分析用于自动驾驶中汽车分类的卷积神经网络的目的.框架由3个主要模块组成: 图像生成器、采样方法及可视化工具.每次循环中对图像特征进行采样, 使用修改后的配置来生成图像, 由卷积神经网络返回预测结果, 进而检查和可视化CNN行为.在实验中, 该团队使用图像生成器和Halton采样序列生成了1 000张合成图像, 并使用生成的图像来分析训练好的SqueezeDet与YOLO模型.其中, 训练好的SqueezeDet模型在该方法生成的合成图像下有很高的置信度和IOU(交并比), 并且能够由此训练集有效地找出该模型识别的盲点; 而Yolo模型在该方法生成的合成图像下的置信度和IOU则随着行车距离的增加而降低.该结果表明: 文中框架可以有效地生成训练和验证数据集进而评估用于自动驾驶汽车分类的卷积神经网络模型的性能.
基于仿真场景的感知模块测试逐渐兴起, 但在模拟场景下训练的模型是否可以很好地适用于真实场景已经成为一个重要问题.对此, Talwar等人[17]使用LGSVL[18](LG Silicon Valley Lab)采集了不同保真度的模拟场景, 用以训练YOLOv3模型, 并在真实场景数据集KITTI上进行了评估.在实验中, 该团队发现了模拟场景和真实场景训练中各种迁移性问题, 例如, 虚拟场景车密度低、对夜晚条件下的识别不够等.该团队还发现, 仿真场景下训练的模型在仿真场景中预测效果会更好, 在真实场景中效果欠佳, 并由此推定在仿真场景下的训练很难广泛应用于真实场景中.实验同样证明了训练集的多样性比仿真场景的真实性在训练过程中所起到的作用更大.因此, 如何更好地解决虚拟场景和现实场景之间的有效转换将成为自动驾驶测试中下一个需要攻克的难点.
1.2 测试用例生成
为了更好地测试基于神经网络的感知模块, 多种针对感知模块生成测试用例的方法被提了出来.如图 4所示, 现有的针对感知模块的测试用例生成方法主要可以分为两类: 基于真实场景的测试用例生成方法和基于模拟场景的测试用例生成方法.其中, 感知模块中除基于神经网络的视觉模块外, 还包含了设有激光雷达、毫米波雷达等多种传感器在内的感知元件.故, 由于测试所针对的角度差异, 基于仿真场景的测试用例生成又可按照测试模块进一步分为: 针对视觉模块的测试用例生成和基于多种传感器的测试用例生成.
Eykholt等人[5]和Araiza-Illan等人[19]分别提出了基于真实场景的测试用例生成方法.Eykholt等人[5]将对抗输入压缩为“对抗贴纸”作为测试用例, 将对抗贴纸附着到目标物体(例如停车指示牌)上, 会导致该目标物体被错误识别或者不被识别.Araiza-Illan等人认为, 保证自动驾驶等机器人系统和真实环境交互行为的正确性至关重要, 因此他们使用BDI(belief-desire-intention)代理方法[20], 对人机交互的场景进行建模, 使用类似人的行为和理性的推理为人机交互任务生成测试用例.代理由初始Belief(初始知识)、Desire(目标)和Intention(根据初始知识, 为达成当前目标确定的动作执行计划)定义.Araiza-Illan等人使用BDI代理建模, 表示了人机交互场景中的机器人代码、传感器、执行器和所处环境.之后, BDI验证代理发送初始知识以激活一系列动作执行计划, 并为其他代理提供新的目标, 激活更多的动作执行计划, 以此类推, 每个具有不同初始知识的系统将激活代理中相应的动作执行计划序列.这些不同的动作执行计划将被记录下来, 用于生成一个抽象测试的测试用例.该团队使用人机协作制造任务和家居助手任务进行建模和实验, 分别生成131个和62个具体测试用例.结果表明, 在上述两个场景中, 使用BDI代理生成的测试代码覆盖率分别达到92%和86%;在人机协同制造场景中, 只有通过BDI代理的测试用例可发现违反某特定需求的情况; 且BDI代理生成的测试用例覆盖了所有单元模块, 而对比方法生成的测试用例很难达到预期的覆盖点.因此BDI, 在覆盖率和有效性方面优于伪随机生成的测试用例和通过模型检查自动机生成的测试用例.
尽管虚拟场景与真实场景的转化是一个待攻克的难点, 虚拟场景仍具有开发难度低、复用率高、成本低等诸多优势, 因此许多学者致力于生成虚拟场景以对感知模块进行测试.
Johnson-Roberson等人[14]认为, 人工标注大量训练数据这一耗时的过程已经开始阻碍深度学习工作的进展, 他们构建了一个从复杂的仿真引擎中提取数据生成测试用例的全自动系统.他们使用开源插件Script Hook V及Script Hook V.NET以1Hz的频率捕获有关场景的信息, 从本地插件请求所有当前缓冲区, 将缓冲区复制到托管内存中, 并将其上传到运行SQL-Server的云计算机.引擎从主体半径内所有物体的3D位置获取粗略的边界框, 再在模板缓冲区上进行轮廓检测, 使得相互部分遮挡的检测形成单个轮廓, 并在深度缓冲区计算检测到的轮廓内的平均深度和平均深度之间的距离, 对包含的像素进行阈值化处理, 生成一个新的边界框, 进一步将边界框进行归类, 生成了3个不同大小的不同模拟数据集.该团队通过绘制车辆质心的分布热力图比较了该数据集与真实数据集Cityspaces[21]车辆位置的分布情况, 证明了其生成的数据集具有更广的覆盖度.同时, 该团队通过比较经过人工标注的数据集训练的模型和经过自动生成标注的数据集训练的模型在数据集KITTI上的表现, 证明: 仅使用大量模拟图像训练网络, 获得了比仅用真实图像训练的网络更好的性能.表明, 仅基于模拟的训练方法对于分类现实世界图像是可行的, 无需与真实训练数据集图像进行任何混合.
Dreossi等人[15]使用由图像生成器、采样方法及可视化工具构成的框架来生成测试用例.通过在图像生成器中布置基本对象(例如, 道路背景和汽车)并调整图像参数(例如, 亮度、对比度、饱和度)来获得图像.对象和图像参数的所有可能配置都定义了一个修改空间, 在3D修改空间中抽象出所考虑的特征空间, 每个点都对应于特定的图像.并且, 根据用户需求采用不同的采样技术来为图像生成器提供修改点(如: 均匀覆盖修改空间的采样方法和基于主动优化的方法), 以生成能够导致错误分类的测试用例, 在确保抽象空间最佳覆盖范围的同时最大程度地减少生成的测试用例数目.
2 决策模块
如果将感知模块比作自动驾驶系统的“眼睛”, 那么决策模块就是自动驾驶系统当之无愧的“大脑”.在感知模块感知到外界情况之后, 自动驾驶系统会将多维度的感知信息传递给决策模块并进行数据融合.决策模块依据当前的路况信息进行路线规划和控制, 并向相关控制模块(如方向盘、刹车)发出信号.决策模块在自动驾驶系统中担任着至关重要的角色, 其依托环境感知和导航定位系统的输出信息, 进行行为预测和路径规划.目前, 自动驾驶系统中大多使用基于数据的深度学习方法和基于运动模型的卡尔曼滤波器, 对周围的人、车及物体进行预测.在路径规划方面, 较为成熟的方法有Dijkstra算法、Floyd算法、A*算法、蚁群算法、基于分层网络的搜索算法、神经网络算法、实时启发式搜索算法、模糊控制以及遗传算法[22]等.
许多学者针对决策模块进行了测试, 试图使用测试用例引导决策模块产生错误的决策.目前, 主要有生成致错场景[23-26]、变异已有场景[27-29]、预测场景置信度[30]和利用弹性行为[31]等方法.
2.1 相关研究现状
致错场景(fault scenario)表示能够使待测模块发生错误的场景, 目前许多学者致力于研究能够快速找出高效的致错场景进而使决策模块发生错误的判断.在寻找致错场景的过程中, 一些优化算法和软件工程方法被应用于其中, 例如遗传算法和压力测试等.Schultz等人[23]提出了一种用来检测无人机器(无人机)控制系统的自动化方法, 通过自动生成致错场景来验证无人机器的正确性.该团队认为, 致错场景可以由机器初始条件(initial conditions)和一连串的出错规则(rule)来定义, 通过控制以上因素, 就可以控制致错场景的生成.因, 文献[23]中使用遗传算法指导致错场景的生成, 不断变化以上因素, 找到真正使得控制器出错的场景.Schultz等人使用AUTOACE作为模拟器, 初始化了100种流行的致错场景, 并迭代调用遗传算法100次, 总共生成了10 000种场景.实验结果表明, 该方法能够有效地检测无人机器的控制系统.
Tuncali等人[24]设计并实现了一个自动生成驾驶车辆测试场景的框架, 旨在寻找自动驾驶测试场景中能够导致碰撞的临界值, 并定义了一个鲁棒性函数, 用来表示一个场景的鲁棒性, 该值越低, 表示自动驾驶汽车在该场景越有可能发生碰撞.该框架包含了4个部分: 模拟器配置、模拟器引擎、S-TaLiRo工具箱和鲁棒性函数.使用MatLab中的工具箱S-TaLiRo来获得使鲁棒性函数最小化的参数, 并以此结果来指导模拟器配置的修改, 生成下一个测试场景, 并不断重复该过程, 直至到达了模拟次数限制或者鲁棒性函数得到负值.Tuncali等人设计了一个由两辆待测车、一辆无关车组成的案例分析, 实验结果表明, 该框架在该案例下成功地检测出致错场景.
Mullins等人[25]提出了一种用于搜索被测系统的性能临界测试用例的方法, 利用自适应采样智能地搜索状态空间中存在于不同性能边界上的测试场景.此外, 使用无监督聚类技术, 可以按场景的性能模式对场景进行分组, 根据对诊断自治系统行为变化的有效性进行排序.该团队选取多目标导航场景下运行的模拟无人水下航行场景进行实验, 令测试系统进行自适应搜索和边界识别.实验结果表明, 该团队选择的搜索方法优于空间填充法及LOLA-Voronoi自适应搜索[32]等方法, 且在基于高斯过程回归(GPR)的搜索算法和聚类边界识别算法应用于无人水下航行仿真的收敛性测试中, GPR方法能够在3 000个样本内找到所有边界的情况, 而拉丁超立方采样方法需要大约12 000个样本.
Koren等人[26]通过自适应压力测试的方法, 不断引入随机因素, 能够找到使自动驾驶汽车发生碰撞的场景.在已有针对自适应压力测试的蒙特卡洛决策树搜索(Monte Carlo tree search)方法的基础上, 该团队将问题转换为马尔可夫决策过程, 并采用深度强化学习方法寻找目标场景.他们使用Intelleigent Driver Model[33]作为模拟器, 在同一场景(汽车经过十字路口)下进行了测试, 比较了两种方法的效果.实验结果表明, 深度强化学习的方法能够在较少的模拟器调用下, 得到更多可能错误的场景.与直接生成完整的测试场景不同, 一些学者尝试着在已有的测试场景中进行扰动, 结合软件工程方法中的回归测试与蜕变测试, 来达到对决策系统的测试.
现有的图像对抗样本生成技术在自动驾驶中具有局限性, 涂黑、对像素进行修改等对抗样本扰动操作在现实中很难出现, Zhou等人[27]提出了一种更实用的测试技巧DeepBillboard, 即对道路中的“广告牌”进行扰动, 以探究其对自动驾驶汽车行驶方向的影响.该团队基于像素的颜色, 对广告牌上的每个像素进行扰动, 并保证扰动后的广告牌如同真实的广告牌, 随汽车的视角等发生变化.该实验结果表明, 扰动广告牌生成的对抗场景确实对自动驾驶汽车的航向系统有较大的影响, 这种影响对虚拟场景和现实中的场景都适用.DeepBillboard的缺陷在于, 对广告牌的扰动过大, 使得数据集中的广告牌几乎变为色块, 在现实中几乎不会存在这样的广告牌.
Tian等人[28]提出了DeepTest, 以探查在自动驾驶过程中的非自然行为和边界案例(corner case).DeepTest考虑在驾驶过程中可能出现的各种因素, 如雨、雾、光照, 对图像进行线性变换(调整光照和对比度)、仿射变换(裁剪、平移、放缩和旋转)以及卷积变换(变模糊、加入下雨、起雾效果).该团队证明神经元覆盖的变化和转向角度变化有一定的相关性, 因此可以用神经元覆盖作为场景生成引导标准.实验结果表明, DeepTest生成的组合场景可以大幅度地提升神经元的覆盖率, 并且可以侦察深度神经网络(DNN)模型的错误行为.这些场景同样可以用于修复模型中的问题, 以提升模型的准确性.
基于蜕变测试的思想, Zhang等人[29]提出了DeepRoad, 一个可以大量生成连续测试场景的非监督框架.该团队认为, DeepTest通过仿射变换生成的场景过于简单, 不符合现实中的天气现象, 因此改进了生成测试场景的方式.DeepRoad利用对抗生成网络板块, 将晴天的行驶图片转变成为雨雪天气下的图片.实验结果表明, 使用DeepRoad生成的场景具有更高的扰动质量, 这些图片更容易引发自动驾驶汽车的不协调行为.
类似于“内省”行为, Stocco等人[30]解决了估计DNN响应意外环境行为的置信度问题, 目的是预测潜在的对安全至关重要的不良行为, 例如越界事件或碰撞.他们在工具SelfOracle中实现了一种基于置信度估计、概率分布拟合和时间序列分析的无监督不良行为预测技术: 使用自动编码器和基于时间序列的异常检测重构驾驶场景, 并确定不同条件下(如不同光照条件)的置信度边界, 通过观察随时间变化的置信度下降趋势及时识别出意外情况, 从而预测不良行为.实验过程中, Stocco等人使用Udacity的DNN模型和仿真环境, 评估不同变体在预测注入的异常驾驶环境方面的有效性.结果表明, SelfOracle可以提前6s预测77%的不良行为, 其性能几乎比DeepRoad的在线输入验证方法高出3倍.
弹性是决策系统应对其正常运行时意外中断的能力, 是决策系统当遇到意外的工作条件或不确定性的环境时, 可以继续以安全方式运行的能力, 自动驾驶系统在其运行设计领域中的弹性行为至关重要.D’Ambrosio等人[31]基于模型的系统工程(MBSE)方法开发了具有弹性的安全关键型自动化系统.MBSE方法提供了对系统行为的保证, 并可能通过使用严格的模型和广泛的仿真来减少对车载测试的依赖.MBSE方法应用于开发弹性系统的两个方面: (1) 通过使用弹性合同(resilience contracts)进行系统决策来确保弹性行为; (2) 应用基于仿真的测试方法来验证系统能否处理所有已知情况, 并针对潜在的未知情况验证系统.弹性合同利用基于合同的设计方法和部分可观察的马尔可夫决策过程(POMDP), 使系统可以对感知环境中的潜在不确定性进行建模, 从而做出更具弹性的决策.基于仿真的测试方法提供了一种结构化的方法, 可以评估目标系统在各种运行条件下的运行情况, 从而确认待测目标已实现了预期的弹性行为, 并在CARLA仿真环境中显示了仿真结果.
2.2 测试用例生成
如图 5所示, 决策模块的测试用例生成根据生成类型可分为场景测试用例生成及图片测试用例生成.其中场景测试用例的生成方法主要有两种, 第1种方法定义目标函数或奖励函数, 通过对该函数取最大值或最小值来指导测试场景的生成; 第2种方法则是循环生成测试用例, 依据遗传算法的思路, 根据上一个生成的结果来指导测试场景的生成.图片测试用例的生成方法包括基于数字图像的扰动(通过修改图片像素进行扰动)及基于真实环境的扰动(改变真实世界光照、角度等).在诸多生成测试场景的方法中, 遗传算法被广泛应用.许多学者都采用遗传算法的思想, 将测试场景量化, 引入不同的变异算子来得到最优的测试用例.Schultz等人[23]将场景定义为场景初始条件和一连串的出错规则, 场景初始条件包含了车辆的初始位置、初始速度、初始行驶角度等等, 初始条件会在模拟器启动时进行载入, 将其作为依据初始化场景.每个出错规则包含一系列的触发器和错误类型, 当一个规则中的所有触发器都被触发时, 则标志着发生了由这个规则定义的错误.Schultz等人通过遗传算法不断生成测试场景, 通过模拟器验证生成的场景的优劣, 并指导遗传算法进一步生成测试场景, 如此往复, 直至到达设置的循环次数.
Tuncali等人[24]将寻找致错场景的问题转换为最小化函数问题, 即在给定的虚拟环境、车辆、无关物体和环境信息下, 设定一个鲁棒性函数, 进而寻找能够最小化鲁棒性函数的输入参数, 即寻找指定的场景初始设置、车辆和物体设置.Tuncali等人认为, 鲁棒性函数的选取对于能否快速、准确地找到致错场景起着至关重要的作用.为了找到导致车辆碰撞的临界场景, Tuncali等人使用碰撞时间(TTC)和车辆相对速度之和作为鲁棒性函数的定义.Tuncali等人认为, 这样的鲁棒性函数能够更有效地找到导致车辆碰撞的致错场景.
Mullins等人[25]提出了一种智能搜索和识别测试用例的方法, 能够有效地筛选并生成自治系统的性能临界测试用例.该方法分为两个主要阶段: 搜索和识别.在搜索阶段, 通过使用自适应采样或主动学习方法选择自主系统仿真运行的新测试用例.该过程利用高斯回归来建模自治系统的性能, 并优先选择可能指示性能边界的区域, 充分覆盖边界区域, 同时最小化模拟的数量.在识别阶段, 将搜索阶段产生的测试用例利用无监督的聚类演算法来辨识场景的性能模式, 将测试用例按其性能模式分类, 识别出性能模式之间的边界, 为执行自治系统的不同底层决策过程的多目标无人水下航行任务生成一组测试用例.
Koren等人[26]将基于场景的自动驾驶测试问题转换为了马尔可夫决策问题, 并设计了相应的奖励函数, 奖励函数将每次测试的输出转化为奖励值, 并以此作为依据指导测试用例生成器.该团队采用了两种方法作为测试用例生成器, 第1种是蒙特卡洛决策树搜索算法, 另一种是深度强化学习算法.蒙特卡洛决策树算法通过奖励值生成新的随机种子并生成场景参数, 深度强化学习则利用奖励值生成新的高斯分布, 进而得到场景参数.该团队将这两种测试用例生成器应用到压力测试当中, 利用马尔可夫决策模型, 不断生成新的测试场景.
相比于生成整个测试场景, 一些学者致力于生成基于图片的测试用例, 一方面基于图片的测试用例更加灵活; 另一方面, 决策模块在关键帧的决策行为决定了整个场景的决策行为, 因此, 基于图片的测试用例也能很好地测试决策模块的性能.在基于图片的测试用例生成方法中, 软件工程中的回归测试和蜕变测试被广泛应用, 同一场景在不同的天气、背景下, 决策模块应当采取一致的行为, 这与回归测试和蜕变测试的思路不谋而合.基于此, Alhaija等人[34]提出了新的测试用例生成方法, 即使用计算机视觉手段生成合成的强化测试用例以提升模型准确率.该团队认为, 一个完整的自动驾驶场景图片需由3部分组成, 即高清3D车模型、周围环境地图和真实物理环境渲染(光照、反射等).文献[34]提供了算法, 将平面照片改为鸟瞰图, 在鸟瞰图中挑选车辆可以选择的位点, 并采样放置车辆, 对车辆模型在环境地图的条件下进行渲染.经过实验验证, 该算法合成的图片有更高的质量, 且在合成图片上训练的模型相比原始数据能够达到更高的精度.
Tian等人[28]提出的DeepTest旨在生成在现实生活中可能出现的图像输入, 因此基于现有的自动驾驶采集的种子图片, 利用多种变换模拟现实驾驶中可能应对的情况.线性变化, 包括调整图片的亮度和对比度两种途径, 用于模拟遭遇强光、镜头失真等景象; 仿射变换包括平移、缩放、水平剪切和旋转, 用以模拟物体的位置变化、特殊的拍摄角度和拍摄异常等情况; 卷积变换为图片加入雾气和雨天的效果, 用于模拟在特殊天气下各种交通情况.该团队使用贪婪算法, 寻找有效的图像变换组合, 提升生成图片对神经网络的神经元覆盖率, 从而保证深度神经网络模型的安全性和测试的充分性.
考虑到DeepTest的变化过于简单, 生成的图片较为粗糙, 难以模拟驾驶过程中捕捉到的真实图像, Zhang等人[29]提出了DeepRoad.为了提高生成图片的质量, DeepRoad框架使用了一种基于对抗生成网络的测试用例生成方法.DeepRoad框架使用无监督图像转换板块, 将两个目标域(如晴天数据集和雪天数据集)投影到相同的潜在空间, 经过训练, 将晴天图像合成为雪天图像.经过对比, DeepRoad生成的图片更贴近于实际驾驶过程中采集到的视频和图片, 比DeepTest生成的图片有更高的质量.
在真实场景中捕捉的测试用例通常不会存在全局性的扰动, 即真实场景中的扰动通常是由图片中的某个实体或者某部分所引起的.为了模拟真实世界扰动的这一特性, Zhou等人[27]选取了道路中常见的公告牌进行像素级别的对抗扰动.在扰动过程中, 保证对抗不会溢出到公告牌面积之外的区域, 且随着视角和距离发生变化.实验结果表明, 这类基于公告牌扰动的对抗样本确实会对车辆的转向造成一定的影响.
2.3 覆盖度量指标
覆盖度量是指利用覆盖率对测试的完整性和有效性进行衡量的手段.覆盖度量指标是传统软件工程测试领域中一个重要的评价指标, 其能够评价测试用例集合是否有效且完备, 同时也能指导测试用例的生成, 即通过生成特定的测试用例来达到更高的覆盖度量指标.目前, 在人工智能领域, 已有许多覆盖度量指标被提出[35], 包括神经元覆盖、分类准确率、测试覆盖率等, 但是由于自动驾驶测试的复杂性以及自动驾驶场景的多样性, 人工智能领域的覆盖度量很多都无法应用到自动驾驶领域中.Pei等人[36]引入的神经元覆盖概念是为数不多的能够应用到自动驾驶领域中的覆盖度量指标.现有的实验不能确定其他人工智能领域的覆盖度量是否能够指导自动驾驶测试(即不能确定AI测试的覆盖度量是否和自动驾驶测试的充分性相关).此外, 从应用的角度来看, 自动驾驶测试由于拥有特殊的使用场景, 覆盖度量指标聚焦于具体驾驶场景的覆盖, 因此演化出了精细到情境(situation)、场景(scenario)甚至需求(requirement)的高层次覆盖标准, 这些标准虽然具有一定的指导意义, 但却缺乏对驾驶场景国际化的统一的定义, 且驾驶场景粒度粗糙并难以量化, 导致目前提出的标准在实际应用中困难重重.更多的关于自动驾驶系统的覆盖度量指标往往针对整车测试, 参见第4节关于整车测试的描述.
为了更有效地测试深度网络模型, Pei等人[36]首先引入了神经元覆盖的概念.一个深度神经网络是由成百上千个神经元构成的, 当一个神经元的输出值达到特定阈值时, 则认定该神经元被激活.神经元覆盖是统计激活神经元在总体神经元的占比.以神经元覆盖率指导生成测试用例, 可以挖掘出更多神经网络的边界行为和错误行为.该团队利用DeepXplore框架, 在Nvidia DAVE自动驾驶系统的模型中, 找到了诸多导致导向系统错误转向的危险场景.
为了更充分地测试路径规划板块, Laurent等人[37]提出了权重覆盖.该团队使用了加权损失函数, 为路径规划的安全性、合理性、合规性和舒适性进行打分.文献[37]中设置了6个与驾驶情境相关的权重常数(例如, 加速度等), 若车辆的某一驾驶决策超出了特定阈值, 则权重常数将会以累加或累乘的方式计入到现有的加权损失值中.该团队按照倍率调整权重常数生成路径规划器, 检查该变异路径规划器的路径是否会被现有的测试套件侦测出, 一旦侦测出不符合测试预言的路径用例, 则意味着调整的权重常数被覆盖.实验结果表明, 权重覆盖能够有效地指导对路径覆盖器进行测试的充分性.
3 综合功能模块
除了单独针对感知模块和决策模块进行测试以外, 许多学者致力于针对一些综合功能模块进行测试, 例如高级驾驶辅助系统(ADAS), 这些模块可能包含感知层、决策层和控制层等多个单元, 协调完成一项具体的功能, 例如自动泊车、自动巡航(ACC)、紧急制动(AEB)、行人保护(PP)、交通标志检测(TSR)、盲点检测系统(BSD)、前向碰撞预警系统(FCW)、车道偏离告警(LDW)、抬头显示器(HUD)、汽车夜视系统(NVS)、智能车速控制(ISA)、智能大灯控制(AFL)、泊车辅助系统(PA)和行人检测系统(PDS).多数研究通过基于搜索的方法生成测试场景来针对自动驾驶系统进行测试.图 6总结了基于搜索的测试场景生成的方法.基于搜索的方法或使用进化算法, 或使用多目标搜索算法, 均通过不断迭代来生成关键测试场景(key scenario).在迭代过程中, 相关研究往往使用一个初始测试场景作为生成种子, 使用模拟器和适应性函数(fitness function)来生成能够表示该场景的优劣的适应度(fitness value), 接下来通过选择器与搜索器生成变异后的测试用例, 并不断重复.相关研究通过辅助预测器和辅助分类器, 帮助整个方法更快速、更准确地生成相关测试场景.除了基于搜索的方法外, 一些学者还提出了基于硬件在环、算法在环的测试方法, 针对自动驾驶系统中综合功能模块进行测试.
3.1 相关研究现状
Bühler等人与Abdessalem所在团队发表了多篇基于搜索算法的针对自动驾驶系统综合功能模块的测试方法.该团队率先使用进化算法对自动泊车[38, 39]和协助制动[39]两个自动驾驶系统中的功能模块进行自动化测试.他们通过定义合适的能够表示待测系统质量的适应度函数, 将测试问题转换为最优化任务, 不断迭代测试用例, 不断改进测试用例的最优化目标函数, 最终得到致错场景.Bühler使用自动驾驶系统中的自动泊车系统和协助制动系统作为待测试系统, 为两个系统分别定义了目标函数, 使用人工测试、随机测试和基于进化算法的测试对两个系统进行评估.实验结果表明, 基于进化算法的测试算法能够更有效、更快速地生成准确的测试用例.
在Bühler等人的相关研究的基础上, Abdessalem等人提出了一种使用基于进化算法的针对自动驾驶辅助系统的测试算法[40].该团队首先给出了高级驾驶辅助系统(ADAS)的形式化表示, 并定义了关键场景, 同时给出了进化算法中需要的目标函数.该团队使用NSGA-Ⅱ[41]算法作为多目标搜索算法并采用模拟二分交叉算子[42, 43]作为进化算法中测试用例迭代变化的交叉算子.与以往的进化算法不同, 本文引入了决策树分类模型并定义了一系列分类标准, 通过决策树分类的结果来指导进化算法, 从而得到更加精准的关键场景.本文在实验中使用NSGA-Ⅱ算法作为基准, 比较了基准算法和使用决策树模型的改进方法得到的3种进化算法中的评估指标[44], 实验结果表明, 使用决策树改进后的算法能够比基准算法多生成78%的更加清晰、准确的关键场景, 同时改进算法能够得到关键场景的空间特征, 为相关研究人员辨认关键场景提供了指导.
类似于进化算法的不断迭代过程, 多目标搜索算法同样也是在一个大的搜索空间中不断搜索符合要求的测试用例, 其差别在于进化算法需要提供一个适应度函数, 用来指导变异的方向, 而多目标搜索算法则需要定义距离函数, 以指导搜索的方向.
Abdessalem等人认为, 现有的仿真工具缺乏必要的智能和自动化能力来指导仿真场景的选择, 且执行模拟方案在计算上是昂贵的.因此该团队在2016年提出了通过将多目标搜索与基于神经网络开发的替代模型相结合来提供高级驾驶辅助系统的测试方法[45], 并使用多目标搜索指导测试高级驾驶辅助系统的关键行为.文献[45]基于行人检测视觉(PeVi)系统进行了研究, 测试结果表明: 基于搜索的测试技术优于随机测试生成策略; 将多目标搜索与替代模型相结合, 可以在有限的时间内提高所生成的测试用例的质量; 基于搜索的测试技术能够生成表明PeVi系统潜在错误的各种测试用例.
Abdessalem等人在2018年提出了一个基于多目标搜索的寻找自动驾驶车辆中功能覆盖错误的方法并实现了一个工具FITEST[46].FITEST旨在解决自动驾驶车辆多个模块在某个场景下针对同一控制器做出不同指令, 指令集之间发生覆盖从而导致错误的问题.本文将问题定义为多目标搜索算法, 定义了3种距离: 覆盖距离、致错距离和致错重写距离.FITEST是基于搜索算法MOSA[47]开发出来的, 通过最小化上述距离来寻找功能覆盖错误.FITEST分别基于覆盖距离、致错距离和上述3种距离的混合距离, 在两种高级辅助自动驾驶工具(包含4种功能: 自动紧急刹车、自适应巡航控制、行人保护和交通标志检测)上进行了搜索测试, 实验结果表明, 基于混合距离的搜索能够在同样时间下得到更多的功能覆盖错误(平均为5.9和7.2个错误).
基于软件在环(SiL)和硬件在环(HiL)的测试方法是自动驾驶测试中常见的方法, 不同于寻找基于搜索的方法, 在环测试方法往往需要针对测试对象定义出一个完备的综合测试架构, 并评估测试对象的各种指标. Gietelink等人[48]提出了一种用于高级驾驶辅助系统(ADAS)的设计和验证方法, 该方法将测试车辆放在底盘测功机上, 这是一种可以通过车辆模型来测试模拟道路行为的滚筒试验台, 其他道路使用者用轮式移动机器人表示.他们通过自适应巡航控制系统和前方碰撞预警系统的测试结果, 证明了该方法在高级驾驶辅助系统开发过程中的传感器验证、快速控制原型、模型验证、功能级别验证、控制算法的微调、生产验证试驾等多个阶段具有帮助效果.该方法的优势在于具有可重复性和高灵活性, 能够提高测试的安全性并同时节省验证过程的时间和成本, 是一种与现有开发过程互补的高级驾驶辅助系统开发新方法, 与模型在环(MiL)仿真和测试驱动器形成有效联系.
Belbachir等人[49]使用Pro-SiVICTM[50, 51]作为模拟器, 定义了高级驾驶辅助系统(ADAS)的仿真驱动评估架构Ev-ADA.该架构的评估标准包括车道检测错误、行人检测错误、轿厢位置检测错误、汽车定位错误、路径规划错误、控件/命令错误、驾驶员安全估计和驾驶员舒适度估算, 可用于评估任何驱动系统.以上每个标准都可计算出单独的分数, 并汇总一个全局分数进行加权求和, 分数值越接近值1, 则证明算法的质量越高.
随着自动驾驶测试方法的不断进步, 一些学者同时将目光放在了自动驾驶技术修复方法上.在2018年对高级辅助驾驶系统中功能覆盖错误进行检测的基础上, Abdessalem等人于2020年提出了一种能够自动化修复由功能覆盖导致的自动驾驶系统错误的方法[52].该团队首先针对包括行人保护和自动紧急刹车在内的4个辅助驾驶功能模块定义了相关的功能覆盖优先级规则以及安全要求, 接着应用成熟的错误定位算法Tarantula[53], 通过重新定义可疑值函数来确认发生错误的代码行数.在确定了错误位置后, 文献[53]采用变异的方法生成补丁候选集, 并采用搜索的方法在候选集中选取优秀的修复补丁并归档, 接着继续生成新的候选集, 直至到达设置的搜索条件.最后, 文献[53]最小化选出来的候选补丁集合作为最终的修复结果.同时, 该文还采用工业界的两个高级辅助驾驶系统对方法进行了测试并设置了对比实验, 实验结果表明, 该方法能够有效地在两种工业产品上找到并修复错误, 且优于其他方法.
3.2 测试用例生成
相比于感知模块和决策模块的测试场景, 针对综合功能模块的测试场景往往需要更复杂的设置和更多的参与者.因此, 针对综合功能模块的测试场景往往拥有更大的数据空间, 如何快速地在庞大的空间中找到关键的测试场景至关重要.图 5中提到的基于搜索的方法是解决这一类问题的较为有效的方法.
Bühler等人[38]使用进化算法来生成针对自动泊车系统的测试用例.该团队为进化算法设计了两种目标函数: (1) 车辆和碰撞区域的最小距离.该团队采用侧向停车作为测试场景, 且前后方均有车辆.其划分出了目标车不可行经的区域并将其定义为碰撞区域, 使用碰撞区域与行车轨迹之间的最小欧式距离作为衡量标准; (2) 车辆与碰撞区域的面积, 即行车轨迹和碰撞区域边界包围起来的闭合图形的面积, 当车辆轨迹穿越了碰撞区域时, 所包含的区域面积为负值.基于这两种目标函数, 该团队通过不断使用进化算法找到致错的测试用例.在之前工作的基础上, 该团队于2008年的研究[39]加入了对协助制动模块的测试.与先前的进化算法相似, 该团队加入了针对协助自动的目标函数的定义: 目标车速度, 由碰撞时间和刹车制动力的乘积的积分得到.刹车制动力由驾驶员和协助制动模块共同决定.
Abdessalem等人在2016年提出的方法[45]中使用多目标搜索的方式来指导测试用例的生成.为了生成能够导致错误的边缘测试用例, 该团队定义了3部分目标函数: (1) 最小化车辆和行人的欧式距离, 他们认为, 该距离越小, 相关的场景越容易出错; (2) 最小化行人和危险区域的距离, 危险区域的定义为待测车辆前方一定距离内的矩形区域, 即待测车辆即将通过的区域; (3) 最小化碰撞时间(TTC).为了解决在模拟环境中计算上述3个目标函数的低效率问题, 该团队设计了一个替代模型, 并使用已有的模拟环境数据来训练替代模型, 使得替代模型能够预测出目标函数的输出.该团队将替代模型应用到NSGAII算法中, 不断进行搜索, 进而生成更多边缘测试用例.
Abdessalem等人在之前的针对行人检测视觉系统(PeVi)的研究后, 又提出了针对高级驾驶辅助系统中自动紧急刹车、自适应巡航控制、行人保护、交通标志检测等模块的基于多目标搜索的测试方法[46].该团队为搜索算法定义了3种距离: (1) 覆盖距离.由于功能重写模块是白盒的, 他们采用分支覆盖的标准来衡量功能重写模块, 并以此为依据定义了覆盖距离; (2) 错误距离.错误距离表示测试用例与安全标准之间的距离, 若测试用例越有可能发生错误, 则错误距离就越近; (3) 致错重写距离.致错重写距离标志着由功能重写模块引发的距离, 若某个测试用例所致错误的发生不是由于功能模块发生了错误, 而是由于功能重写模块发生了错误的优先级覆盖, 则该测试用例具有较低的错误距离.他们通过最小化上述3个距离来指导多目标搜索算法, 不断生成测试用例.
Abdessalem等人在2018年提出的方法[40]仍使用多目标搜索算法来生成测试用例, 与以往方法不同, 他们引入了决策树分类模型来得到更加精准的关键场景.将目标函数定义为: (1) 行人与车辆的距离; (2) 碰撞时间, 通过最小化行人与车辆的距离并最大化碰撞时间, 来获得更准确的测试用例.在NSGA-Ⅱ算法的基础上, 文献[40]使用决策树模型, 通过定义不同参数的范围规范出满足关键场景的特征空间, 并得到含有较大比例的关键场景的聚类.在每次迭代的过程中, 决策树模型能够在保证关键场景占比较高的情况下简化搜索空间, 使得搜索算法能够找到更精准的测试用例.
类似于上述基于搜索的方式生成测试用例的方法, Gambi等人[54]将视频游戏中生成连续内容的技术和搜索算法相结合, 设计并实现了一种针对自动驾驶系统中自动巡线模块的自动化测试方法, 该方法旨在生成更有效的测试场景.他们首先将视频游戏中的连续内容生成技术应用到场景衍生中, 根据一定的规则生成道路网络.接下来使用车辆行驶轨迹和车道线中央的距离作为目标函数进行搜索, 并通过变异得到新的测试用例.变异方法包括道路片段变异、切断并分别组合两段道路以及道路迁移覆盖.Gambi等人使用BeamNG.research作为模拟器, 对方法进行了测试.实验结果表明, 该方法能够有效地生成测试用例并且暴露出与安全相关的问题.
4 整车测试
相比于针对个别模块的测试, 许多学者将研究目标放在了整车测试上.基于整车的测试不考虑单独模块或者某个功能, 而是对整个自动驾驶系统做出综合判断.因此基于整车的测试不考虑具体哪个模块发生了错误.针对整车的测试往往使用场景作为测试用例, 在虚拟环境中进行测试.关于场景的定义, Ulbrich等人[55]给出过总结.他们整理了多篇关于场面(scene)、情景(situation)和场景(scenario)定义的文章, 并对这3个概念总结出了一个整体的描述.Scene由环境、动态物体、所有参与者和观察者以及上述物体之间的关系组成.Situation总是从一个物体的主观视角出发, 根据某个信息的选择, 依据某个短暂且临时的目标从Scene中衍生出来.与Scene相比, Situation中的物体往往是与主观物体相关的.Scenario包含了Scene, 同时还有一些相关物体的动作、事件、目标以及属性.Scenario、功能范围、系统边界和期待行为共同组成为一个用例(use-case).本文提到的场景均为Scenario.
目前, 国内外针对测试场景的定义给出了相关的标准[56].测试场景要素往往分为测试车辆要素、静态环境要素、动态环境要素、交通参与者要素和气象要素等.其中, 测试车辆要素又包含了待测车辆详细的物理信息, 例如重量、性能、位置和运动状态等.静态场景要素中包含了障碍物、交通标识和道路等路况信息.由于人工标注真实场景的开销和代价过于庞大, 而针对自动驾驶的整车测试往往需要使用相关的研究方法生成能够导致待测自动驾驶系统发生错误的测试场景, 于是自动化地生成测试场景成为了该方向相关学者们的研究目标.
4.1 研究现状
目前, 针对整车测试的方法主要分为两种, 一种是通过结合真实场景和交通数据来生成仿真场景的测试方法, 另一种则是通过构建完备的测试框架, 对自动驾驶系统做出评估.基于真实场景的仿真场景衍生能够更加贴合真实世界中的驾驶场景, 更加具有真实性, 相关学者通过引入在真实世界中采集的地理信息, 例如GPS等, 衍生出更具说服力的测试场景.
Zhang等人[57]提出了一种基于图像序列和道路地理信息系统(GIS)数据的交通场景建模方法, 并在此基础上, 设计了一个交通场景模拟器, 利用该模拟器对自动驾驶汽车进行性能测试和自动驾驶任务评估.他们利用车载摄像机从实际交通场景中获取视频序列, 然后将其与GPS获取的视点位置序列相结合, 得到视点图像序列, 随后按时间顺序组织视点图像序列.同时, 他们还引入道路GIS数据, 定义交通场景的三维结构.实验过程中, 通过避障驾驶及自动驾驶能力等级评定来对生成的场景进行检验.实验结果显示, 该方法生成的场景能够有效地评价出待测车的自动驾驶能力.
Althoff等人[58]提出了一种自动创建临界场景测试用例的方法, 该方法首先通过显式计算自动驾驶车辆的可驾驶面积来量化解决方案空间.通过指定运动规划问题, 对包括自动驾驶车辆在内的其他交通参与者的初始状态进行优化, 以缩小求解空间, 直至得到所需的可驾驶区域大小, 实现测试用例所需的临界度.实验过程中, 该团队针对一个刻意简单化的场景及两个来自CommonRoad[59]的不同基准场景, 分别使用不同数量的其他交通参与者来进行实验.他们对简单场景中自动驾驶汽车的速度、两个基准场景的速度及交通参与者的初始状态进行了优化, 3种场景中自动驾驶汽车的可驾驶区域均得以相应减小, 并获取了具有所需可驾驶区域临界度的情况.
Gambi等人[60]认为, 真实车祸场景非常适合作为测试场景, 但真实碰撞中收集到的数据不足以完全再现场景, 因此, 他们提出了基于碰撞报告的自动碰撞场景构造器AC3R来生成测试用例.该框架依靠自然语言处理(NLP)方法从车祸现场的警察报告中提取有关信息, 将文本概念映射到场景细节, 创建车祸的抽象表示, 生成可在驾驶模拟器中实现车祸动态的代码, 并从模拟中导出测试用例.实验过程中, 他们检查了自动驾驶汽车在避免碰撞的同时是否达到其最终预期位置, 并预测多个驾驶能力指标, 以调查AC3R成功生成场景模拟的数量及与报告的匹配程度.实验结果表明: AC3R能够处理过半(62.6%)的数据库样本报告, 且多数情况下(78.0%), AC3R生成的用例的预期损坏报告与碰撞有关的所有虚拟汽车的预期损坏报告相同.
Fremont等人[61]提出了一种基于形式化验证的自动驾驶汽车测试方法, 能够有效地将形式化模拟测试转变为真实世界中的整车测试.他们首先使用形式化语言来表示测试场景和自动驾驶汽车的安全属性, 并使用相关模拟器、验证工具和算法来判断自动驾驶汽车在测试场景中是否会发生错误.最后将生成的虚拟测试场景映射到真实场景中, 并使用整车进行测试.Fremont等人使用2018 Lincoln MKZ Hybrid作为测试车辆, 选取的场景为自动驾驶汽车转弯经过十字路口, 遇到过马路的行人.实验结果表明, 62.5%的虚拟致错场景转变的真实场景在测试中发生了错误, 93.3%的不发生错误的虚拟场景转变的真实场景在测试中也没有发生错误.
与基于场景生成的测试方法不同, 基于构建完备的测试框架的测试方法能够对自动驾驶系统做出系统的评估, 可以在更高的层级对自动驾驶系统做出综合性判断.
Tuncali等人[62]提供了一个测试用例生成与自动伪造方法兼容的测试框架Sim-ATAV, 该框架可用来检查包括机器学习组件的自动驾驶系统闭环特性.他们提出了一种测试方法, 称为覆盖数组和需求伪造方法, 以自动识别有问题的测试方案.该框架使用Webots[63]进行环境建模, SqueezeDet[64]作为感知系统, 选择一个特定的自动驾驶场景进行测试.实验结果表明, Sim-ATAV框架可用于提高自动驾驶系统的可靠性.Tuncali等人在Sim-ATAV中实现了3种测试策略, 分别为全局统一随机搜索、覆盖数组和全局统一随机搜索、覆盖数组和模拟退火.由于全局统一随机搜索不能被引导到测试用例的关键区域, Tuncali等人使用ACTS[65]工具生成的覆盖数组选取最小数量的测试用例以确保对所有组合进行测试.然而, 覆盖数组仅能对离散变量的选取进行指导, 所以提出第3种方法使用覆盖数组评估离散变量并使用模拟退火搜索连续变量.实验结果表明, 覆盖数组和模拟退火生成的测试用例在保证覆盖范围的同时拥有更低的鲁棒性.
Rocklage[66]提出了一种对自动驾驶汽车进行验证的方法.他们引入了一个新的验证空间概念, 该概念基于时空状态网格来生成动态交通参与者的运动.时空状态网格基于车辆所在空间的高清地图或人为手动操作绘制, 网格中格点表示位置-时间元组, 这个空间一开始是稀疏的, 但是, 随着车辆遇到新的情况, 它变得越来越密集.研究人员可以对形成的有向图应用深度优先、广度优先或回溯等算法测试图形边缘与本车计划轨迹相交的场景, 并逐步覆盖验证空间.他们建议自动驾驶车辆的一般控制体系结构中添加一个新的安全模块, 安全模块将使用验证空间数据库中的信息来确定当前情况是否得到验证及当前情况附近的连续区域被覆盖的程度.他们使用人类睡觉时做梦这一现象进行类比, 建议自动驾驶车辆在停车时“睡觉”, 自动驾驶车辆的安全模块还包含一个仿真模块, 用来在“睡觉”时模拟白天无法自动处理的情况和场景.该验证方法的优势在于可以通过迭代达到L5自动化水平, 车辆能够将干预请求发送给驾驶员, 从而消除驾驶员始终处于循环状态的需求.
Aramrattana等人[67]提出了一种用于测试和评估协作智能交通系统(C-ITS)应用程序的仿真框架, 该框架结合了驾驶、交通和网络模拟器.协作智能交通系统(C-ITS)的目标是更安全、更高效的交通系统.他们给出了协作式自适应巡航控制(CACC)应用程序的示例, 并将其用于仿真框架的测试, 分别为单排车辆增大车距、双排车辆合并为单排车辆、驾驶员驾驶3种场景.测试结果说明了在循环过程中使用人工驱动程序测试不同控制策略的能力和仿真框架的灵活性, 并证明了仿真框架中的模拟器是同步的.他们还认为, 由于涉及人类驾驶员切换驾驶模式, 交通模拟器未考虑横向加速度以及仿真框架正确性验证等原因导致该框架中的每个仿真器都没有被充分利用.
4.2 测试用例生成
针对整车测试的测试场景生成方法主要以结合真实场景数据为主, 通过一系列的转化和衍生方法生成新的仿真场景.部分学者也尝试使用基于搜索的方法、基于回归测试的方法和基于多实体(agency)的方法来生成相关测试场景.Zhang等人、Gambi等人、Fremont等人结合了真实场景来生成测试用例.
Zhang等人[57]提出了一种基于视点图像序列的自动驾驶测试用例生成方法.首先, 使用GPS坐标确定场景要素的地理空间位置, 使用车载摄像机获取路面上任意一点的图像数据, 然后将其与GPS获取的视点位置序列相结合, 得到视点图像序列.按照时间顺序组织视点图像序列, 引入道路GIS数据, 通过道路网络确定道路的三维几何信息, 并进一步进行视图转换, 将交通场景可视化, 生成自动驾驶测试用例.
Gambi等人[68]提出了使用基于碰撞报告的自动碰撞场景构造器AC3R来生成测试用例, 其生成过程分为4个阶段: 信息提取、轨迹规划、仿真生成及测试生成.其中, 信息提取阶段通过语法相关性分析, 计算碰撞描述的每个语句中每对单词之间的语法相关性, 并匹配特定领域的本体(如环境、交通参与者、行为及事故), 提取道路属性及车辆属性, 将文本中的概念充分映射到撞车场景的细节.在轨迹规划阶段, AC3R将冲击点放在参考坐标空间的原点上, 并为每个模拟车辆的每个驾驶动作设置一个新的航路点, 不断添加航路点至包含所有驾驶行为, 最后调整冲击点的位置并更新道路几何形状, 创建出车祸的抽象表示.仿真生成阶段则使用了专门用于模拟交通事故的仿真引擎BeamNG.research, 使得AC3R能够使用在规划虚拟汽车轨迹时计算出的几何数据, 从而以程序方式生成道路并放置路标, 生成可在驾驶模拟器中实现车祸动态的代码.并在测试生成阶段, 由模拟中导出测试用例.
Fremont等人[61]使用形式化语言来描述仿真测试的过程, 通过形式化测试场景和安全因子并使用VERIFAI[68]工具对相关形式化表示进行验证, 区分出安全和不安全的测试用例, 进一步通过聚类算法选择出合适的测试用例进行虚拟场景测试.他们使用pulley-based 4Active surfboard platform(SB)来模拟行人, 以将选择出来的测试场景转换成为真实的整车测试.
Rocklage等人[69]提出了一种在虚拟仿真环境中为自动驾驶回归测试自动生成测试用例的方法, 着重研究了生成其他交通参与者的运动而不损失一般性的问题.该团队将组合交互测试方法与一个简单的轨迹规划器相结合作为可行性检验器, 以生成有效的可变覆盖测试集.底层约束满足问题采用回溯算法解决.首先定义了不同类型的交通场景及虚拟环境中回归测试的相关术语, 使用“四层概念”作为基础, 创建静态或混合场景, 使用组合互动测试CIT[65]相互组合找到参数值, 实现道路、静止物体、气象效应、动态对象及本车的参数化, 使用以上获得的参数来生成测试用例.该方法为有关自动驾驶回归测试领域的研究提供了基础, 但仍需优化以获得更高的效率.并且, 该方法只能沿预定义的路径创建运动, 若能在一般概念中加入路径发现问题, 将允许更多的自动化.
类似于针对综合功能模块的基于搜索的测试方法, Althoff等人[59]提出了通过显式计算自动驾驶车辆的可驾驶面积来量化解决方案空间的自动生成临界场景测试用例的方法, 该方法结合可达性分析和优化技术来确定解空间的大小并缩小它, 以得到满足需求的测试用例.首先指定运动规划问题, 然后定义自动驾驶车辆的可驾驶区域.为了求得该区域, 需要对包括自动驾驶车辆在内的其他交通参与者的初始状态进行优化, 直至得到所需的可驾驶区域大小.其中, 当不仅考虑了静态障碍物, 同时还考虑了其他交通参与者时, 须计算其初始状态变化对其未来占用率的影响, 将其他交通参与者未来可能占用的空间从自动驾驶车辆的允许空间中移除, 以避免碰撞, 以进一步有效地计算可行驶面积.为了求解该有限优化问题, Althoff等人将时间等距离散, 并用矩阵表示法近似表示优化问题的离散时间, 再将其重写为一个二次规划问题, 然后使用二进制搜索对其进行扩展.最终得到满足临界度的测试用例.
Chance等人[70]提出了基于多实体的测试用例生成方法.实体是指在测试环境中与自动驾驶车辆交互的动态实体, 在文献[70]中, 该团队将行人作为实体, 对行人设置各种行为动作, 生成有效的测试用例.行人的动作分为两类, 一类是随机动作, 即行人有一定的随机行为, 并会在随机时刻穿过行车道; 另一类是实体指向行为, 其中临近行为(proximity)是指行人在车辆到达一定半径范围内时穿越行车道, 选举行为(election)是指选择离车辆最近的行人穿越行车道.为了提升测试效率, Chance等人以车辆和行人行进时长为标准给测试用例打分, 耗时越长分数越低, 以促进短时长测试用例形成.实验结果表明, 基于实体的测试用例生成方法比伪随机方法可生成两倍的有效测试用例.
4.3 覆盖度量指标
对于整车的质量测试和安全保证往往拥有更宏观的测试标准.Tahir等人[71]将常见的基于整车的覆盖标准分为3类: 即需求覆盖(requirement coverage)、场景覆盖(scenario coverage)以及情境覆盖(situation coverage).无论是需求、场景还是情境测试, 都是在自动驾驶质量和安全保证方面的宏观定义, 这也意味着, 上述3种覆盖标准会随驾驶和测试场景的不同而发生改变, 而非遵循一套统一的定义.
需求覆盖是指, 待测系统必须满足一系列的可被接受的需求.需求覆盖通常需要相关领域专家以启发性的方式指定相关需求, 这样可以有效地指导自动驾驶产品的构建, 但是, 需求覆盖在测试中的使用相对困难.首先, 粗粒度的需求对指导测试帮助不大, 例如“自动驾驶汽车不可以违反交通法规”的需求很难实现, 也没有标准能够验证是否实现该需求.其次, 大部分的意外情况是不出现在既定的需求中的, 即, 需求覆盖的测试更倾向于软件验证(verification), 希望测试能够满足需求说明书的指标.需求覆盖无法指导软件确认(validation), 即无法满足其他在真实环境中遇到的情况, 例如需求“自动驾驶汽车需保证可以在积水路段行驶”, 如果未能提前定义该需求, 那么需求覆盖就难以指导对积水路段相关错误行为的甄别.
为了更好地提出需求覆盖的准则, Fujikura等人[72]提出了基于KAOS[73]的需求覆盖方式, 即对于自动驾驶汽车这类与安全相关的领域, 根据安全要求, 将危险状态指定为场景的最终状态, 并利用这种方法生成更多揭露车辆问题的危险场景.KAOS是需求工程领域使用的面向结果的需求捕捉方法, 配合穷尽寻路方法使用, 实验结果表明, 该方法与现有方法相比, 能够实现较高的需求覆盖率, 并且保证需求到测试方案的高度可追溯性.
根据Schuldt等人[23]的最新的研究结果, Scenario和Situation得到了详细定义.Schuldt等人认为, Situation是交通参与者在特定时间点, 用于选择合理行为模式的全部环境信息, 通常出自某一交通参与者的主观视角. Scenario是数个scene的时序发展组合, 通常是一个确定的时间片段.
基于最新的定义, 现有研究致力于将上述抽象的覆盖标准具体应用到实际的基于自动驾驶整车的测试中.
Alexander等人[74]最早提出情境覆盖的定义, 并认为现有的“需求覆盖”不足以全面地指导测试自动驾驶系统.因为现有的需求覆盖严重依赖于需求说明书, 它能够有效地应用于基于需求说明书的验证软件, 却不能应用于现实场景下的软件确认.这意味着需求覆盖很难发现真实场景中不常见的错误, 从而造成测试中的疏漏.相较而言, 情境覆盖会更加可靠, 更加细致, 也会考虑更多的实际情况.Alexander等人提出了宏观和微观两种常见的覆盖选择方式, 并由Hawkins等人[75]在用例研究中给出了详细的例证.在用例研究中, Hawkins等人建立了虚拟地图, 选定自动驾驶汽车的初始位置和目的地, 并在地图上放置障碍物和其他交通参与者, 检测在车辆前进路线中是否会出现危险的交通情况.该团队选取了3个距离标准作为情境覆盖的指标, 实验结果表明, 这种情境覆盖标准可比随机方法指导发现更多危险场景, 但是效果有限.因为所选取的覆盖标准可能与危险相关性不强, 因此覆盖标准的选取可能会对实验造成很大影响.
Situation是由交通参与元素和相关参数组成的, 在实际测试中, 若覆盖所有可能的组合结果, 则会出现指数爆炸的问题.Cheng等人[76]提出了量化的k投影覆盖率, 要求将数据集投影到任意选择的k条件形成的超平面时, 以不小于关联权重的数据点数覆盖每个类别, 该指标大大减少了所需测试的场景数量.相较在每个类中至少覆盖一个数据点的朴素铺盖度量指标, 该覆盖率指标解决了不同情况相对重要性的问题.此外, Cheng等人开发了一种高效编码到0~1整数的方法, 该方法允许增量地创建场景以最大程度地扩大覆盖范围.但该指标对于较大的k值, 要实现完整的投影覆盖范围仍然面临一定的挑战.
根据Schuldt等人[23]的定义, 场景是由几个scene组成的长时间片段, 通常具有一定的时效性和动态性.因此, 对场景的覆盖难以量化.现有的覆盖框架仍局限于以枚举的方式实现覆盖最大化.相关研究[77, 78]中的枚举方式虽然简单, 但是需要测试人员具有一定的经验, 且容易造成漏选和遗忘.
目前比较有效的量化场景覆盖方法是将场景抽象成图进行覆盖.Iqbal等人[79]提出了动态测试世界的方法, 他们使用UML类图构建参与者与其关系的结构模型, 将交通参与者的行为抽象扩展为有限状态机(CEFSM), 然后通过使用图覆盖标准以覆盖动态世界模型来生成抽象世界行为测试用例(AWBTC).实验结果表明, 可执行测试用例的数量取决于生成的测试数据数量及执行中涉及的参与者过程数量.该方法将传统软件测试图覆盖中的边覆盖、节点覆盖和路径覆盖方法引入到自动驾驶测试之中.
在自动驾驶测试过程中, 通过在模拟环境和封闭测试设施中设计适当的方案, 可以减少进行道路测试的工作量.利用模拟或封闭设施测试的主要优势是为每个运行设计域生成测试方案库.Feng等人[80, 81]为具有不同运行设计域(ODD)、联网自动化车辆模型和性能指标的测试方案库生成的问题提出了一个公用框架, 在给定运行设计域的情况下, 测试场景库被定义为可用于联网自动化车辆测试的关键方案集.该团队利用机动性挑战和暴露频率组合的辅助目标函数等指标, 结合发生频率和机动性, 评估场景的重要性和危险性, 以便采样到更重要、更有测试意义的场景, 尽可能地覆盖到各种危险场景, 将现实世界中发生概率较高的场景且机动性挑战较高的场景优先用于联网自动化车辆的测试.
5 数据集与模拟器
为了更好地支持该领域的研究人员, 本文总结了相关文献中的数据集和模拟器的使用情况, 并标注了数据集的规模以及出处, 结果见表 1和表 2.
表 1(Table 1)
Table 1 Summary of datasets
表 1 数据集
名称 |
数据集规模 |
引用文献 |
出处 |
KITTI |
180G路况采集视频 |
[17, 14, 27, 34] |
[82] |
GTSRB |
51 840张图片 |
[6] |
[9] |
UCF-101 |
13 320个视频, 101个动作类别 |
[11] |
[83] |
HMDB-51 |
6 766个视频, 51个动作类别 |
[11] |
[84] |
BIRD |
60k |
[11] |
[11] |
Sim200k (10k, 50k) |
200k (10k, 50k) |
[13] |
[14] |
Cityscapes |
5 000张高质量图片和20 000张粗略注解图片 |
[14] |
[85] |
Udacity |
与使用版本有关 |
[27-29] |
[86] |
Dave testing dataset |
45 568张图片 |
[27] |
[87] |
|
Table 1 Summary of datasets
表 1 数据集
|
表 2(Table 2)
Table 2 Summary of simulators
表 2 模拟器整理
名称 |
引用文献 |
出处 |
Intelleigent driver model |
[26] |
[88] |
AUTOACE |
[23] |
[23] |
Udacity |
[30] |
[89] |
Pro-SiVICTM |
[49] |
[90] |
Prescan |
[46] |
[91] |
|
Table 2 Summary of simulators
表 2 模拟器整理
|
表 1和表 2中, 名称列表示数据集的名称, 数据集规模列标注了每种数据集的大小, 引用文献列标注了使用这些数据集的文章, 出处列标注了该数据集的出处.
6 总结与展望
本文总结了几年来针对自动驾驶智能系统测试的相关研究56篇, 相关数据集8个以及相关模拟器5个.本文依据自动驾驶智能系统测试的对象将整篇文章划分成4个部分: 自动驾驶感知模块的测试、自动驾驶决策模块的测试、自动驾驶综合功能模块的测试以及自动驾驶整车测试, 并针对这4部分展开了详细的综述.
尽管目前已有许多团队、学者参与到了该领域的研究当中, 但该领域仍有许多难题等待着人们去攻克, 本文总结了目前该领域仍然存在的挑战, 为相关研究人员提供了接下来的研究方向, 以推动自动驾驶系统测试的进一步发展.
(1) 由于自动驾驶智能系统的复杂性和难解释性, 现有的自动驾驶智能系统测试方法也面临着可解释性较差的问题.而较差的可解释性会对进一步提升自动驾驶智能系统的鲁棒性、安全性等带来新的挑战.因此, 提升自动驾驶智能系统测试的可解释性是一项重要的研究工作, 也将为后续的自动修复带来新的机会.
(2) 由于自动驾驶智能系统往往需要大量的测试样本, 而标注测试样本是一项十分耗时耗力的任务, 因此, 如何选择有效的测试样本进行优先标注, 对于提升自动驾驶智能系统的测试效率具有重要意义.因此, 解决自动驾驶智能系统测试中的样本标注问题是一个重要的研究方向.
(3) 尽管目前有许多针对整车的测试覆盖度量指标, 但是针对单个模块(如感知模块和决策模块)的测试覆盖度量指标仍有所欠缺.而单一模块的测试是整车测试的基础, 因此, 结合单一模块的具体特性, 设计针对单一模块的测试覆盖度量指标, 对自动驾驶智能系统的测试充分性具有重要意义, 该方向也是未来研究方向之一.