自动驾驶文献阅读:《Dance of the ADS - Orchestrating Failures through Historically-Informed Scenario》

写在前面

本文是对《Dance of the ADS: Orchestrating Failures through Historically-Informed Scenario Fuzzing》这篇自动驾驶场景模糊领域的文献进行阅读与总结。这个细分方向还不是十分多见,因此抱着兴趣读了一下。

文章于2024年7月以预印本发表于arxiv, (ISSTA 2024,CCF-B),主要介绍了一种场景基础模糊测试方法(ScenarioFuzz),该方法针对自动驾驶系统(ADS)设计出一种结合图神经网络模型和历史测试数据的模糊测试方法,最终提高了发现ADS故障场景的效率和命中率。总体来看,所选文章在自动驾驶系统测试方法中提供了一种有效的测试策略,对笔者有所启发。

如果你是自动驾驶、软件测试或人工智能领域的相关人员,这篇论文可能会有一些借鉴意义。

本文arxiv链接:https://arxiv.org/abs/2407.04359

关键词:自动驾驶系统;ADS场景测试;模糊测试(Fuzzing);图神经网络;

目录

写在前面

摘要

研究背景

1)ADS仿真测试

2)ADS测试场景

3)为何要生成新场景

4)场景生成的难点

内容提炼

正文内容

总体架构与关键算法

步骤一:语料库的建立

步骤二:种子突变

突变的目标

突变策略

步骤三:场景过滤

建图

场景评价(通过图神经网络)

筛选场景

步骤四:仿真测试与场景收集

步骤五:场景的分类

Evaluation working

对文章的进一步思考

总结

相关资源

基于数据变异的类似文献

DriveFuzz

AV-Fuzzer

SAMOTA

基于形式化的方法



摘要

随着自动驾驶系统(ADS)向更高级别的自主性发展,对它们的安全验证变得越来越复杂。本文介绍了ScenarioFuzz,这是一种开创性的场景基础模糊测试方法。它像一个了解过去表演的编排者,无需预定义场景的支撑就能发现ADS中的漏洞。利用地图道路网络(例如OPENDRIVE)提取了形成基础场景种子语料库的关键数据。这个语料库通过添加相关信息,为模糊测试提供了必要的界限,无需起始场景。

本文的方法结合了专门的变异器和变异技术,并结合图神经网络模型来预测和筛选高风险场景种子,使用历史测试数据优化模糊测试过程。与其他方法相比,方法平均减少了60.3%的时间成本,同时每单位时间内发现的错误场景数量增加了103%。此外,本文提出了一种自监督碰撞轨迹聚类方法,帮助识别和总结54个容易诱发ADS故障的高风险场景类别。通过实验成功发现了六个测试系统中的58个错误,强调了ADS的重大安全问题。


研究背景

这里简单介绍下ADS仿真测试和场景生成的一些背景知识。

1)ADS仿真测试

自动驾驶系统(ADS)的测试与验证对于确保其安全性与可靠性至关重要。在当前实践中,仿真技术以其卓越的成本效益、降低的风险和增强的可控性,相较于传统路测方法,已成为ADS测试的主流选择。仿真能够在虚拟环境中高效地重现复杂的交通场景和多变的驾驶条件,从而执行大量可复现的有效测试,其效率及可靠性远超实际路测。《Dance of the ADS...》这篇文章的输入数据格式、以及后续的验证工作,都与仿真测试紧密相关。

2)ADS测试场景

ADS测试场景(以下简称“场景”),简单来说,就是指在特定时间、地点下发生的一系列相关事件或活动的背景。在自动驾驶系统的语境中,场景通常指的是车辆在行驶过程中可能遇到的各种交通环境和情况,比如在十字路口的转弯、在高速公路上的巡航、遇到行人横穿马路、或者是在雨雪天气中行驶等。每一个场景都包含了车辆需要识别和响应的环境元素,如其他车辆、行人、交通信号、路面状况等,是自动驾驶车辆在“智能”驾驶时需要理解和处理的实际驾驶“故事”。

场景的数据格式通常由一系列标准化的标签和属性构成,以一个高维的XML(可扩展标记语言)文件进行详细地描述(场景通常是 OpenDrive 或 OpenScenario 格式,或者在此基础上的扩展)。该XML文件通过属性和值的对应关系,能够详尽地描述道路网络、交通信号、车辆和行人的位置、动态行为以及天气状态等。这篇文章所谓的Fuzzing动作,实际上就是对该文件中数据产生随机变异,以制造与之前不同的新场景。

3)为何要生成新场景

生成新场景的意义在于为仿真测试提供更多复杂情况和危险情况,以更全面地验证自动驾驶算法是否具有风险。由于专家手工打造的测试场景耗时费力,数量非常有限,并且不切实际和昂贵。因此,业界试图通过“创造新场景”的方法,从数量和覆盖性两方面进行扩充。现在一般的方法主要是:1)通过转化的方法从真实数据中获取;2)通过机器学习等方式自动生成;3)通过数据变异的方法从已有场景中获取新场景。本文的方法属于第3种。

4)场景生成的难点

自动驾驶系统的安全性追求全面覆盖所有潜在危险场景,确保AI算法能够识别并应对各种可能情况。然而,由于场景数据的高维性,其中蕴含的可能性繁多,使得在有限的计算时间内实现场景的全面生成变得不切实际。状态空间的庞大规模相当于要求算法遍历车辆在现实世界中可能遇到的所有情景。因此,本研究的核心挑战在于,如何在有限的计算资源下,有效地挖掘出既广泛又具有重要测试价值的场景。对场景的Fuzzing习惯上被称为模糊测试,实际上更像是一种随机搜索方法,也可以被设计成一种启发式算法。

内容提炼

Q1:论文要解决什么问题?

A1:简言之,通过模糊的方法对场景进行变异,意在生成更多的风险场景。

Q2:论文采用了什么方法?

A2:1)变异与采样方案:两阶段变异策略和基于距离的邻近采样方法。

        2)场景评估:将测试场景转换为图形类型的数据,为基于图神经网络(GNN)的评估模型提供种子过滤

Q3:难点?

道路、标志和自然特征等关键元素在现实中通常是固定的,但在模拟中修改这些元素会偏离场景生成的目标,并且在技术上具有挑战性。此外,车辆和行人对于ADS的动态影响。


正文内容

总体架构与关键算法

这篇文章描述的工作流程是一个自动化的模糊测试框架,它通过迭代地生成和变异场景种子,利用图神经网络模型评估和筛选高风险种子,实时更新模型,并在模拟器中执行测试以识别自动驾驶系统中的错误场景。

在模糊测试过程中,每个周期均通过两阶段的 Mutation() 算法生成经过迭代突变的种子。自第二周期起,引入基于通知的随机邻居策略,利用其他种子数据引导变异过程,以此对场景中的天气、对象、水坑等多个因素实施变异。

在此之后,场景评估模型(Scenario Evaluation Model, SEM)会对这些变异后的种子进行筛选,根据其触发自动驾驶系统(ADS)错误的置信度进行排序,优先收集高风险种子。该模型随测试数据集的扩展实时更新,当数据集规模达到预定阈值时,自动触发train()函数以优化模型(参见代码行21至23)。筛选后的种子用于在模拟器中构建测试场景,并与自车(ego car)集成,通过Simulate()函数进行测试。同时,detect_misbehavior()函数实时监控ADS行为,以识别潜在的错误场景。一旦识别出错误,立即停止当前模糊测试周期,并将该场景标记为重要发现。

此外,通过check_frequency()函数评估各场景种子的选用频率,基于此评估,采用概率性轮盘赌方法决定种子是否重新入队。若某种子未能持续产生新错误场景,则会引入新种子替代,以备后续测试周期使用。通过排除那些选择频率过高的种子,避免测试过程陷入局部最优解,确保测试的全面性和多样性。


下面整理了该项目的主要工作流

步骤一:语料库的建立

1 在CARLA模拟器中读取城市地图的OPENDRIVE道路网络文件

2 使用 Map Crawling 进行语料库建立

        1)通过聚类算法定位交通灯分布,从而获得十字路口

        2)收集导航点、可行路径、聚类中心、地图信息(如交通标志和车道变换数据),将他们与Scenario seeds 打包成一个 seed corpus

关于种子语料库:

        种子语料库(seed corpus)不完全是一种数据格式化方式,而是一个由初始输入样本组成的集合,这些样本被用作测试或生成新数据的基础。在模糊测试和其他自动化测试技术中,种子语料库通常包含一组具有不同特征的输入,它们可以是:

  • 有效的或无效的输入数据
  • 边界条件
  • 异常值
  • 规约

        种子语料库(seed corpus)可以视作一种中间产物,这些种子样本将会被用来通过变异和组合来生成新的case。不是最终产物哈。

步骤二:种子突变

突变的目标

根据突变的目标不同,设置了几种突变器,分别有::

        任务变异器(Mission Mutator):这个变异器修改了自车(ego car)的任务路径。

        水坑变异器(Puddle Mutator):这个变异器在场景中生成水坑。

        对象变异器(Object Mutator):该模块在场景中生成对象,涵盖从行人到各种类型的车辆。具体来讲有公交车、乘用车、警车、人以及其他特殊模型等。对象动作类型有静态、线性运动,以及carla能兼容的自行动作等。其他属性,诸如行人的服装和肤色、车辆的颜色,都可以变异产生。

        天气变异器(Weather Mutator):可调整八个天气参数:云覆盖率、降雨量、积水、风、雾、湿度、太阳角度和太阳高度。

突变策略

突变策略。我们的赋值器需要对多个属性参数进行赋值,

两阶段:1,朴素随机;2,随机邻居

朴素随机:就是从预定范围内随机选择一个值作为对应的属性值

随机邻居(Random Neighbor):

        该策略是一种在模糊测试和其他搜索算法中常用的技术,它具有通用性,因为它可以应用于多种不同的场景和问题空间。这种策略的核心思想是通过在当前解的邻域内随机选择新的解,来探索解空间的不同区域。

        想象一下,输入空间是一个巨大的棋盘,每个格子代表一个可能的输入值。每个变异器属性(mutator attribute)就像是棋盘上的一个棋子,它当前的值决定了它在棋盘上的位置。现在,我们的目标是探索棋盘上可能隐藏的“宝藏”(即潜在的问题或错误)。

在本文中,“随机邻居”策略是这样工作的:

1、定义步长:首先,我们为每个棋子定义了一个“步长”,接下来,我们让棋子在棋盘上随机地“走”五步。

这些步骤可以是上下左右任意方向,棋子的新位置就代表了一个新的属性值。

2、选择最低分:在所有通过这种策略生成的新属性值中,我们选择那个在驾驶评分(driving score)上得分最低的种子(scenario seed)。

3、以这个得分最低的种子作为参考点,再次在它的“邻居”格子中随机选择新的输入值,创建新的测试用例。

“随机邻居”策略通过在输入空间中进行有目的的随机游走,有点扫雷游戏的意思,设计意图也是尽可能更全面地探索可能的输入值,以达到覆盖率的优化目的。

步骤三:场景过滤

在模糊测试的实践中,生成的变异种子数量通常是巨大的,但其中只有少数能够触发自动驾驶系统(ADS)的异常事件。由于每个种子在模拟器中构建场景都需要消耗显著的资源,这不仅增加了测试的时间成本,也带来了计算上的负担。考虑到每个场景执行的分钟级时长,从众多变化中筛选出能够引发错误的有效场景,这一任务在经济和操作上均显得尤为艰巨。

为了解决这一问题,文章提出了一种场景评估模型,该模型能够评估并量化每个变异种子转变为错误场景的概率,并据此计算出相应的置信度。这一置信度作为种子筛选的关键依据,能够聚焦于那些最有可能触发系统故障的种子,从而有效降低测试过程中的资源消耗和时间成本。

置信度的确定过程始于场景数据的图表示转换。通过 "converted into graph data" 构建图结构,将场景中的元素和关系转化为节点和边,能够利用图神经网络对场景进行深入分析和打分。

建图

自动驾驶涉及的场景非常复杂,包括各种动态和静态对象及其相互关系。图结构能够自然地表示这些对象及其交互,使得网络能够学习对象间的相对位置、运动状态和潜在的相互作用。

其节点和边的特征如下图所示,Vertex Node 主要是存储了一个场景中测试对象的位置和交通信息,而 Edge 表示从节点节点到节点的路径。

场景评价(通过图神经网络)

GNN通过消息传递机制,使得每个顶点可以聚合来自其邻居的信息。这样,网络能够捕捉局部的交通状态,还能够感知全局的交通流动,从而做出更加全面和合理的决策。对于SEM的需求来讲,这里的GNN主要是通过历史错误场景,来评价当前生成场景种子是错误场景的置信度。

具体的实施步骤:

1)对数据的standardization,主要是将edges的特征和weather进行归一化。(这里weather属性是被打散开,分化成了各项物理或气象数据)

2)训练侧主要是通过历史错误场景作为训练集,得到的模型用来评价当前生成场景种子是错误场景的置信度。使用了GAT中的注意力机制,模型能够识别图中最重要的节点和边,并通过Dropout和Batch Normalization来防止过拟合。

3)将由Fuzzing后得到的种子场景输入到GNN网络中,最终可以得到 “这个场景是错误场景” 的置信度。

筛选场景

因为生成的每个场景都有评分,这里做个排序,之后就是将置信度排序。

(一个想法:我们在生成时丢弃了大量的无效数据,这里面有相当一部分因素是Fuzzing的结果并不满足测试要求,能不能利用这些失败的尝试?)

步骤四:仿真测试与场景收集

这个环节就是通过CARLA对筛选之后的场景进行离线测试了。如果磕了碰了,会有程序将这个场景中发生了些什么记录下来,并将场景收集放入种子池。

步骤五:场景的分类

特征提取技术主要是,将“自车-碰撞对象”之间的轨迹特征进行聚类,以区分不同的车辆交互模式。之后再通过手动作业进行一次筛选。

Evaluation working

这篇文章的对比工作做的比较好,为了评估该框架的性能,作者团队进行了实验来回答以下研究问题:

RQ 1:像变异策略和种子过滤这样的组件如何影响测试框架的性能?

RQ2:SEM的准确性和泛化能力如何,它是否会随着数据的增加而提高?

RQ3:与其他方法相比,我们的方法在单个种子上发现错误场景的能力如何?·

RQ4:与Drivefuzz相比,我们的方法在错误场景发现和代码覆盖方面是否提高了效率,语料库扮演了什么角色?

RQ5:该方法能否检测ADS中的错误,以及它揭示的常见错误和容易发生冲突的场景是什么?

评估的内容,感兴趣的小伙伴从文章首尾部分的文献的链接处自行看吧!篇幅比较大,这里的对比工作或许我会看一下其他人的内容专门在更一期。


总结与思考

1.具有点拨性的内容

  • 设计了两种突变,在广泛覆盖和局部探索之间取得平衡,思路值得借鉴。
  • 工作流清晰,文章对数据格式的申明也很细致。
  • 对比和评估工作做的很好。

2.文章的可创新点

“然而,一些方法旨在涵盖整个场景,使用形式约束,参数搜索,模糊测试和因果生成[16-18,22-24,28]。这种方法通常需要一个预定义的场景库,限制了测试的范围,并需要一个专用的场景存储库。”

  • 其实Fuzzing的方法和形式约束与因果生成方法并不矛盾,个人认为,二者可以做结合。

3. 一些批判性观点

文章的核心挑战在于场景评估模型(Scenario Evaluation Model, SEM)的开发和优化。尽管模糊测试(Fuzzer)技术在整个研究中扮演了重要角色,但其偏工程化,技术比重也并非最为关键的。

在避免陷入局部最优的问题上,文章提出了计算一个d的概念。这个度量可以作为一个超参数,避免算法过早收敛到局部最优解。d的确定可以通过手动调整获得,或者通过启发式方法和机器学习算法来自动优化。一种可行的方法是模拟退火(simulated annealing)。

突变器的设计有较大的优化空间。这里个人有一些想法,不过先不展开了。


相关资源

本文arxiv链接:https://arxiv.org/abs/2407.04359

基于数据变异的类似文献

DriveFuzz

在地图中随机选择两个位置作为测试车辆的起点和终点来创建测试场景;其他车辆和人员没有参考路径(这部分应该是设计不完整导致的,而不是不能扩展)

Seulbae Kim, Major Liu, Junghwan "John" Rhee, Yuseok Jeon, Yonghwi Kwon, and Chung Hwan Kim. 2022. DriveFuzz: Discovering Autonomous Driving Bugs through Driving Quality-Guided Fuzzing. In Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security (Los Angeles, CA, USA) (CCS 2022). ACM, 1753–1767. DriveFuzz | Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security

AV-Fuzzer

[21] Guanpeng Li, Yiran Li, Saurabh Jha, Timothy Tsai, Michael Sullivan, Siva Ku-mar Sastry Hari, Zbigniew Kalbarczyk, and Ravishankar Iyer. 2020. AV-FUZZER:Finding Safety Violations in Autonomous Driving Systems. In 2020 IEEE 31stInternational Symposium on Software Reliability Engineering (ISSRE). 25–36.AV-FUZZER: Finding Safety Violations in Autonomous Driving Systems | IEEE Conference Publication | IEEE Xplore

SAMOTA

Fitash Ul Haq, Donghwan Shin, and Lionel Briand. 2022. Efficient online testing for DNN-enabled systems using surrogate-assisted and many-objective optimization. In Proceedings ofthe 44th international conference on software engineering.811–822.

基于形式化的方法

[16] Fitash Ul Haq, Donghwan Shin, and Lionel Briand. 2022. Efficient online testingfor DNN-enabled systems using surrogate-assisted and many-objective optimiza-tion. In Proceedings ofthe 44th international conference on software engineering.811–822.

[17] Jean-Baptiste Horel, Christian Laugier, Lina Marsso, Radu Mateescu, Lucie Muller,Anshul Paigwar, Alessandro Renzaglia, and Wendelin Serwe. 2022. Using For-mal Conformance Testing to Generate Scenarios for Autonomous Vehicles. In2022 Design, Automation & Test in Europe Conference & Exhibition (DATE). IEEE,Antwerp, Belgium, 532–537. Using Formal Conformance Testing to Generate Scenarios for Autonomous Vehicles | IEEE Conference Publication | IEEE Xplore

[18] Dhanoop Karunakaran, Julie Stephany Berrio, Stewart Worrall, and EduardoNebot. 2022. Critical concrete scenario generation using scenario-based falsifica-tion. In 2022 IEEE International Conference on Recent Advances in Systems Scienceand Engineering (RASSE). IEEE, 1–8.

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值