论文发表在ISSTA2023(CCF-A类会议)上,作者单位:西安电子科技大学,新加坡管理大学。
通讯作者:孙军教授(新加坡管理大学)
自动驾驶系统(ADS)作为自动驾驶汽车(AV)的大脑,应该在部署之前进行彻底的测试。 ADS 必须满足一套复杂的规则以确保道路安全,例如现有的交通法以及未来专门针对自动驾驶汽车的法律。 为了全面测试 ADS,我们希望系统地发现违反某些交通法规的各种场景。 挑战在于(1)交通法规较多(例如,中国交通法规有13条可检测条款,新加坡交通法规有16条可检测条款,分别有81种和43种违规情况); (2)许多交通法规仅在复杂的特定场景下才适用。
现有的 ADS 测试方法要么侧重于简单的预言(例如无碰撞),要么在生成各种违法场景方面能力有限。 在这项工作中,我们提出了 ABLE,一种新的 ADS 测试方法,其灵感来自于 GFlowNet 的成功,旨在生成不同的场景以使得自动驾驶系统打破许多法律、从而测试自动驾驶系统。 与普通的GFlowNet不同,ABLE通过动态更新的测试目标(基于信号时序逻辑的鲁棒性语义)以及主动学习来驱动测试过程,从而有效地探索广阔的搜索空间。我们基于Apollo和LGSVL来评估ABLE ,结果表明,在测试 Apollo 6.0 和 Apollo 7.0 时,ABLE 的违反率分别增加了 17% 和 25%,其中大部分是难以违反的法律,优于现有技术。
本文旨在研究针对自动驾驶系统的仿真测试场景生成方法。
动机和创新点:
(1)测试预言(oracle)的改进:无碰撞或到达目的地 -> 违反交通规则。
大部分现有方法采用相当弱的预言,即无碰撞或到达目的地。 但自动驾驶最终的目标应该是遵守现有的交通规则。另外,现有的侧重于碰撞测试的方法不太可能有助于生成违反某些复杂的法律的场景,如“红灯亮起时,禁止车辆通行。 除此之外,右转车辆可以通过,不妨碍车辆或行人通行。”
(2)生成更具多样性的测试场景。
少数现有方法也专注于测试 ADS 是否符合交通法规,但存在以下问题:
本文方法可以生成更具多样性的测试场景。
本文方法可以生成更具多样性的测试场景。
本文提出了一种算法ABLE,架构如图1所示。
(1)数据准备:准备训练模型的数据,以指导下一步的测试,包括将场景转换为动作序列,并根据场景的跟踪数据计算场景的奖励。
(2)场景生成:用初始场景训练生成模型,然后根据训练的模型对一批不同的场景进行采样。
使用已有模型 GFlowNet 进行训练,但我们提出了三种优化方案:
优化1:我们根据场景对于规范的稳健程度来定义奖励,以衡量场景距离满足规范的程度;
优化2:动态更新奖励以持续搜索未发现的违规行为
优化3:在每个样本步骤中,仅选择合适的动作类型,以满足场景脚本定义的特征。
(3)场景测试:在模拟器中迭代运行生成的场景,检查ADS是否违反交通法规。
(4)主动学习:在每轮之后用新测试的场景来扩充场景集,然后更新生成模型
算法 1 显示了如何处理模型训练数据的详细信息。 它加载一组初始场景(使用现有方法(例如 LawBreaker)生成)和一组公式 (θ),并输出与奖励值相关的处理后的动作序列。 每个初始场景都是用AVUnit等场景描述语言编写的场景脚本以及使用LGSVL等模拟器模拟该场景而获得的数据轨迹(trace)。 对于每个场景,算法首先将其场景脚本编码为动作序列,如第 3 行所示,然后根据 (θ) 计算其轨迹上的奖励值,如第 4-8 行所示。 详细内容将在下面讨论。
(1)编码场景脚本
场景脚本是使用AVUnit[4](一种场景描述语言)写的,语法详见AVUnit官网
编码场景脚本,将所有操作符转换成动作序列,并给每个动作编号。
下图是一个例子。
(2)奖励值计算
论文作者设计如下公式来计算奖励值,考虑如下:
如果一个场景涵盖了很多鲁棒性较高的违规公式,那么它的奖励应该很高,即奖励可以反映场景的整体质量。
奖励应该在学习和模糊测试过程中动态更新,即已经满足的违规公式在下一次迭代中不会被考虑。
算法 2 详细介绍了如何生成测试场景。 它将带有奖励值的动作序列作为输入,并输出一批新的高奖励场景。
(1)训练代理:代理是一个多层感知机,可以在训练过程中立即返回样本的评估奖励。
(2)训练模型
需要使用一个训练好的模型采样一批动作序列。
该模型也可以被视为具有随机策略 λ ( a t ∣ s t ) \lambda(a_t | s_t) λ(at∣st)的采样函数,它根据当前状态 s t s_{t} st输出 a t a_t at,然后导致新状态 s t + 1 s_{t+1} st+1。 动作序列是通过从最初的空状态 s 0 s_0 s0开始并顺序应用动作来构造的,并且所有完整的轨迹必须以特殊的最终状态 s f s_f sf结束。 场景对象 s n s_n sn 的构造可以定义为状态轨迹:
(3)解析动作序列,生成场景。
算法 3 显示了如何使用场景批次测试 ADS 的详细信息。 输入新生成的场景和违规公式,输出跟踪数据和新的违规。 对于每个场景,我们在模拟器中运行 ADS 并记录其运行时数据,如第 3 行所示。场景完全执行后,我们检查每个 θ − \theta^- θ− 是否满足记录的跟踪 π s n \pi_{s_n} πsn,如第 4-7 行所示 。
算法4中的循环将上述三个组件集成到一个主动学习框架中。 该算法输入初始场景集、违规公式集和主动学习轮数,输出违规场景VS。这个主动学习框架执行两项新任务。 (1)将当前测试的场景(如2)添加到第7行的测试集中,(2)更新奖励,以便不再考虑那些已经涵盖的违规公式。 当算法达到主动学习循环的界限时,算法终止。
仿真系统:LGSVL
待测ADS系统:Apollo6.0和Apollo7.0
测试预言:81条违反交规的情形(从13条中国交通法规中得出)
(1)有效性
在生成场景覆盖违反情形的数量方面,ABLE和现有最优方法LawBreaker的对比如下:
ABLE 总共针对Apollo 6 和Apollo 7 分别发现了 117 起和 130 起违规案例。
ABLE 不仅涵盖了 LawBreaker 涵盖的所有违规行为,而且在Apollo 6 和 Apollo 7 上分别比 LawBreaker 多发现了 17 和 26 条违规案例。 平均而言,与 LawBreaker 相比,ABLE 的平均增幅为 17% 和 25%。
原因可能是这些新覆盖的场景确实很难基于遗传算法来覆盖。
图2和图3分别显示了Apollo 6和Apollo 7上所有涵盖的违规行为的难度分布。对于一个违规公式,其在一轮中的难度可以用 1 / V t i m e s 1/V_{times} 1/Vtimes 来衡量,其中 V t i m e s V_{times} Vtimes 表示其在总共 512 次运行中被违规的次数。可以看出,仅被ABLE覆盖的场景难度值偏高。
(2)效率
表3列出了搜索空间复杂度以及模型学习和场景测试的时间成本。
图4和图5显示了在Apollo 6和Apollo 7中测试场景数量与发现违规数量之间的关系
ABLE 和 LawBreaker 在前 50 个测试场景中平均分别发现 73% 和 90% 的违规公式。 这几乎总是对应于图2和图3中容易覆盖、难度较低的违规行为。
LawBreaker往往在早期表现良好,但后期贡献不大。 这是因为LawBreaker中的 GA 陷入局部最大值的风险很高。
相反,ABLE 曲线在整个阶段持续上升。 这验证了:具有动态奖励功能的主动学习可以不断为测试注入新的活力。
(3)主动学习和奖励值函数的有效性
表4验证了主动学习和奖励值函数的有效性。Active+New 是主动学习与我们新的奖励功能的集成。 Inactive+New 忽略了我们方法中的主动学习。Active+Max 用最大鲁棒性替换了我们的奖励函数,这是 LawBreaker 中使用的奖励函数。
ABLE的有效性受到场景集的动作的搜索空间(action space)的影响,例如其规模和丰富度。
很难从总体上判断某个场景是否现实,因为其中一些场景本质上是低概率事件。
我们提出了ABLE,一种基于GFlowNet的新ADS测试方法,可以有效地生成各种违法场景。
为了更好地适应场景生成,我们通过两项优化来改进 GFlowNet,即在主动学习期间动态更新目标函数以及在每个样本步骤中仅选择适当的动作类型。
我们基于 Apollo 和 LGSVL 评估了 ABLE,结果表明,在测试 Apollo 6.0 和 Apollo 7.0 时,ABLE 分别违反了 17% 和 25% 的难以发现的定律,从而优于最先进的技术。
[1] Testing Automated Driving Systems by Breaking Many Laws Efficiently
[2] LawBreaker: An Approach for Specifying Traffic Laws and Fuzzing Autonomous Vehicles
[3] Efficient online testing for DNN-enabled systems using surrogate-assisted and many-objective optimization
[4] AVUnit