DeepRoad: GAN-Based Metamorphic Testing and Input Validation Framework for Autonomous Driving Systems
文章目录
简介
论文标题
- DeepRoad: GAN-based Metamorphic Autonomous Driving System Testing
- DeepRoad:基于GAN的自动驾驶系统蜕变测试与输入验证
- 时间
贡献
- 我们提出了第一种基于GAN的变形测试方法来生成不同天气条件下的驾驶场景,以检测自动驾驶系统的不一致行为。(DeepRoadMT)
- 针对基于DNN的自动驾驶系统,提出了一种新的输入验证方法。我们提出了训练图像的高层特征与输入图像的高层特征之间的距离可以用来验证输入。(DeepRoadIV)
- 我们在DeepRoad上实现了所提出的方法,可以生成不同驾驶场景(如雨雪)的图像,并在嵌入空间中度量多个图像集之间的相似度。我们使用DeepRoad对公认的基于DNN的自动驾驶模型进行了测试,成功地检测到了数千种不一致的驾驶行为。此外,DeepRoad可以准确地将极端天气条件下的图像与训练图像区分开来,这对于验证自动驾驶系统的输入是有效的。
https://www.toutiao.com/a6747848196422107652/
摘要
虽然深度神经网络(DNNs)已经为基于图像的自动驾驶系统奠定了基础,但它们可能会表现出错误的行为,并导致致命的事故。为了解决自动驾驶系统中的安全问题,最近设计了一套测试技术来自动生成人工驾驶场景以丰富测试套件,例如,生成从原始图像转换而来的新输入图像。然而,由于两方面的限制,这些技术是不够的:首先,许多这样的合成图像往往缺乏驾驶场景的多样性,从而影响了所产生的有效性和可靠性。其次,对于基于机器学习的系统,训练域和应用域之间的不匹配会显著降低系统的精度,因此有必要验证输入以提高系统的鲁棒性。
本文提出了一种基于无监督DNN的自动一致性测试框架DeepRoad,用于自动测试基于DNN的自动驾驶系统的一致性和在线验证。首先,DeepRoad无需使用图像变换规则(如缩放、剪切和旋转)即可自动合成大量不同的驾驶场景。特别是,DeepRoad能够通过应用生成性对抗性网络(GAN)以及相应的真实天气场景来生成各种天气条件(包括那些相当极端的条件)的驾驶场景。第二,DeepRoad使用蜕变测试技术使用合成图像检查此类系统的一致性。第三,DeepRoad通过使用VGGNet功能测量输入图像和训练图像之间的距离来验证基于DNN的系统的输入图像。我们使用DeepRoad在Udacity自动驾驶汽车挑战赛中测试了三个公认的基于DNN的自动驾驶系统。实验结果表明,DeepRoad能够检测出这些系统数以千计的不一致行为,并有效地验证了输入图像,从而潜在地增强了系统的鲁棒性.
介绍
自动驾驶有望改变汽车业。通常,自动驾驶指的是利用传感器(相机、雷达、激光雷达、GPS等)[38]自动控制车辆,而无需人工干预。深度神经网络(DNNs)的最新进展使自动驾驶系统能够根据动态环境调整其驾驶行为[2,14]。具体地说,端到端监督学习框架可以通过输入驾驶图像、使用⟨驾驶图像、驾驶行为⟩对作为训练数据来训练用于预测驾驶行为(例如,转向角)的DNN。例如,NVIDIA于2016年发布的DAVE-2[14]仅根据自动驾驶汽车的单个前置摄像头拍摄的图像就可以准确预测转向角度。
最近的测试技术[31,38]表明,自动驾驶系统容易出现驾驶场景的合成图像错误。DeepXplore[31]应用差分测试技术系统地生成图像,揭示了多个DNN系统的不一致行为。具体地说,它将图像生成问题描述为一个联合优化问题,该问题使用基于梯度的搜索技术来寻找图像,以最大化神经元覆盖率和此类系统的不一致行为的数量。DeepTest[38]设计了系统的方法来自动生成测试用例,试图模仿真实世界的驾驶场景。其主要方法是通过对原始图像进行简单的仿射变换和模糊/雾/雨等各种效果过滤器来变换驾驶场景的标签图像,并检查自动驾驶系统在原始场景和变换后的场景中的表现是否一致。DeepTest通过大量的原始和转换后的驾驶场景,可以廉价、快速地检测到一些表现良好的开源自动驾驶模型的各种错误驾驶行为。
然而,我们观察到DeepXplore和DeepTest中用于生成测试用例的方法可能不能准确地反映真实世界的驾驶场景,很少包含彩色补丁或黑洞和边线;简单模拟产生的模糊/雾/雨效果也显得不真实,这损害了它们的有效性和可靠性。例如,图1显示了引用自DeepXplore和DeepTest论文的合成图像。请注意,彩色箭头是用来表示预测的转向角度的。从图1a、1b和1c可以观察到,驾驶场景的图像包含几个伪影(补丁、孔洞和边线),这严重影响了图像质量。此外,对于图1D,它似乎是通过简单地调暗原始图像并将其与混乱的“烟雾”效果混合来合成的,这违反了雾密度沿深度变化的事实。类似地,在图1e中,DeepTest通过在原始图像上添加一组线来简单地模拟降雨。这种降雨效果变换甚至更加扭曲,因为通常在下雨时,相机或前挡风玻璃往往是湿的,图像极有可能变得模糊。这些事实表明,很难确定错误的驾驶行为是由基于DNN的模型的缺陷造成的,还是由于测试技术本身的不足造成的。此外,这些变换(如平移、剪切和旋转)只能生成相似的图像,而不能复杂地合成不同风格的图像,从而限制了测试用例的多样性。例如,积雪的路况需要不同的复杂变换来渲染道路和路边对象(如树木)的纹理,这不是简单的变换规则所能生成的。
对于传统软件来说,输入验证(IV)是执行程序之前的一个重要步骤。例如,在Web应用程序中,IV检查和过滤非法或恶意输入,以防止应用程序级别的攻击,如缓冲区溢出和代码注入攻击[25]。然而,据我们所知,目前基于DNN的系统缺乏对输入(例如,驾驶场景的图像)进行验证的能力,因此容易导致系统漏洞。特别是,无效的输入,如驾驶场景的离群点图像,会极大地降低预测精度,并极大地增加基于DNN的系统的风险。例如,假设一个基于DNN的自动驾驶系统在一个数据集上进行训练,该数据集只包括阳光明媚的驾驶场景的图像。对于未对系统进行培训的域外输入(例如,驾驶场景的雨景图像),系统极有可能输出错误的控制信号,从而对驾驶员和乘客造成危险。
针对上述问题,本文提出了一种无监督学习框架DeepRoad,对基于DNN的自动驾驶系统进行了系统分析。DeepRoad由变形测试模块DeepRoadMT和输入验证模块DeepRoadIV组成。DeepRoadMT采用一种基于产生式对抗性网络(GAN)的技术[18,27]来合成各种天气条件下的驾驶场景,并为基于DNN的自动驾驶系统开发了变形测试模块。具体地说,定义了变形关系,使得无论如何合成驾驶场景以应对不同的天气条件,驾驶行为都期望与对应的原始驾驶场景下的驾驶行为一致。在这一点上,DeepRoadMT使我们能够测试基于DNN的自动驾驶系统在不同场景下(包括大雪和暴雨)的准确性和可靠性,这可以极大地补充现有的方法(如DeepXplore,DeepTest)。例如,图2展示了DeepRoadMT生成的雪景和雨景(来自晴天场景),这些场景很难与真正的场景区分开来,也不能使用简单的转换规则生成。DeepRoadIV用于基于图像相似度的DNN自动驾驶系统的输入验证。首先,DeepRoadIV使用预先训练好的DNN模型-VGGNet来提取训练和测试输入图像的高层特征(即内容和风格)。然后,利用主成分分析(PCA)技术对这些特征进行降维。最后,DeepRoadIV通过将训练图像和输入图像之间的平均距离与预设阈值进行比较来验证输入
为了评估深路的效果,我们首先合成了大雪和暴雨下的驾驶场景。特别是,基于GAN,我们从YouTube视频中收集了两个极端天气条件的图像来转换现实世界的驾驶场景,并将它们与相应的天气条件一起传递。随后,这些合成场景被用来测试来自Udacity社区的三个开源的基于DNN的自动驾驶系统[7]。实验结果表明,DeepRoadMT有效地检测这些系统的数千种不同级别的不一致行为。此外,我们还使用DeepRoadIV对不同驾驶场景采集的输入图像进行了验证。结果表明,在嵌入空间中,雨雪图像点的聚类分别分布在训练图像的聚类中,而训练聚类与大部分阳光图像点混合在一起。结果表明,在给定适当阈值的情况下,DeepRoadIV可以有效地验证输入,从而潜在地提高了系统的鲁棒性。
背景
近年来,自动驾驶系统发展迅速[14,32]。例如,许多主要的汽车制造商(包括特斯拉、通用、沃尔沃、福特、宝马、本田和戴姆勒)和IT公司(包括Waymo/Google、Uber和百度)正在努力构建和测试各种自动驾驶系统。通常,自动驾驶系统通过多个传感器(例如相机、雷达、激光雷达、GPU、IMU等)从环境中捕获数据。作为输入,并使用深度神经网络(DNNs)处理数据和输出控制信号(如转向和制动决策)。在NVIDIA的工作[14]中,他们的自动驾驶系统DA VE-2只能根据单个前置摄像头拍摄的图像流畅地控制汽车。在这项工作中,我们主要研究具有摄像机输入和转向角输出的基于DNN的自动驾驶系统。
DNN体系结构
到目前为止,卷积神经网络(CNN)[23]和递归神经网络(RNN)[33]是用于自动驾驶系统的最广泛的DNN。通常,CNN擅长分析视觉图像,而RNN可以有效地处理序列数据。在这项工作中,评估模型建立在CNN和RNN模块上。下面我们简要介绍每个体系结构的基本概念和组件,其中关于DNN的更多详细信息在[24]中提供。
2.1.1卷积神经网络。卷积神经网络类似于常规神经网络,它包含大量的神经元,以前馈的方式传递信息。然而,由于输入数据是图像,因此可以利用一些性质来优化规则神经网络,其中卷积层是CNN的关键组成部分。一层中的神经元不是完全连通的,而是只连接到上一层中的一些神经元,计算过程可以表示为一个带核的卷积。图3a显示了基于CNN的自动驾驶系统的示例,该系统由输入层(图像)和输出层(转向角度)以及多个隐藏层组成。卷积隐藏层允许在多个连接之间分担权重,并且可以极大地节省训练工作量。
2.1.2递归神经网络。常规神经网络和CNN被设计用于处理独立的数据,例如使用CNN对图像进行分类。然而,对于像视频这样的序列数据,神经网络不仅要捕捉每一帧的信息,还应该对它们之间的联系进行建模。与常规神经网络和神经网络不同,RNN是一种具有反馈连接的神经网络。如图3b的左侧所示,RNN使用循环将先前的状态转发到输入,这对输入数据的连接进行了建模。图3b的右侧显示了展开的RNN的工作流程,用于基于图像序列预测转向角度。在每一步,RNN都采取将当前输入图像和以前的隐藏状态作为输入,并预测转向角。
基于DNN的自动驾驶系统本质上是软件系统,容易出错,并可能导致悲剧。例如,2018年1月,一辆特斯拉ModelS在使用自动驾驶时以每小时65英里的速度撞上了一辆消防车[9]。2018年3月,一辆自动驾驶优步在夜间道路测试中未能减速,导致一名行人死亡[10]。为了保证软件系统的质量,在文献[11,29]中已经提出了许多软件测试技术,其中通常会生成一组特定的测试用例来测试软件程序是否按预期执行。对于给定的测试输入,确定软件程序是否按预期执行的过程称为测试预言问题[11]。尽管有大量的传统软件测试技术,但它们不能直接应用于基于DNN的系统,因为基于DNN的软件的逻辑是从人工干预最少的数据(如黑盒)中学习的,而传统软件程序的逻辑是手动创建的。
方法
基于DNN的自动驾驶系统蜕变测试
3.1.1蜕变DNN测试。变形测试[35](MT)已被广泛用于自动生成测试以检测软件故障。MT的优势在于它能够通过变形关系(MRS)自动解决测试甲骨文问题。特别地,设p是将程序输入映射到程序输出的程序数学表示(例如,p⟦i⟧=o)。假设fI和fO分别是用于转换输入域和输出域的两个特定函数,并且它们满足以下MR公式:
∀
i
,
p
[
[
f
I
(
i
)
]
]
=
f
O
(
p
[
i
]
]
)
\left.\forall i, p\left[\left[f_{I}(i)\right]\right]=f_{O}(p[i]]\right)
∀i,p[[fI(i)]]=fO(p[i]])
其中i表示程序p的输入。
利用这样的这些MR,我们可以通过检查对于各种输入i是否ˆp⟦fi(I)⟧=fo(ˆp⟦i⟧)来测试p的特定实现。因此,MT被定义为通过与MRS交叉检查输入和输出来测试程序实现。例如,给定一个实现正弦函数的程序,MT可以用来描述测试预言并创建各种新的测试。对于测试函数正弦的任何现有输入i,各种事实可以用作MRS,例如SIN(−i)=−SIN(I)和SIN(i+2π)=SIN(I)。这些事实可以表示为1)fi(X)=fo(X)=−x,2)fi(X)=x+2π和fo(X)=x。有了这样的MRS,我们可以根据FI转换现有的测试输入,以生成额外的测试,并基于fo检查输出。例如,假设函数正弦的默认测试用例是AssertTrue(sin(0.5·Pi),1.0)。基于上述MRS,我们可以生成两个额外的测试:AssertTrue(sin(-0.5·Pi),-1.0)和AssertTrue(sin(2.5·Pi),1.0)。
在这项工作中,我们进一步将机器翻译应用于基于DNN的自动驾驶系统的测试。正式地说,DNN是一个基于数字神经网络的自动驾驶系统,它将每个图像连续映射到预测的转向角信号中(例如,左转15◦)。一个MR可以被定义为给定原始图像流I,各种图像变换T可以简单地改变道路场景(在第3.1.2节中详细示出),而不影响对每个图像I∈i的预测(例如,在不同天气条件下同一道路上的预测方向应该大致相同)。使用附加变换输入测试DNN的MR可以形式化如下:
∀
i
∈
I
∧
∀
τ
∈
T
,
D
N
N
∥
τ
(
i
)
∥
=
D
N
N
∥
i
∥
\forall i \in \mathbb{I} \wedge \forall \tau \in \mathbb{T}, D N N \mathbb{\|} \tau(i) \mathbb{\|}=D N N \mathbb{\|} i \mathbb{\|}
∀i∈I∧∀τ∈T,DNN∥τ(i)∥=DNN∥i∥
现在测试DNN基本都是蜕变测试思想,输入有细微差异但输出应该相同或相似
3.1.2基于DNN的道路场景变换。最近的工作DeepTest[38]还将机器翻译应用于测试基于DNN的自动驾驶系统。然而,它只执行基本的图像转换,如添加简单的模糊/雾/雨效果滤镜,因此具有以下限制:(1)DeepTest可能会生成违反常见场景的图像(在第1节中讨论)。(2)DeepTest不能模拟复杂的道路场景变换(如雪地场景)。
为了通过自动生成各种真实道路场景来补充DeepTest,在这项工作中,我们利用最近发布的基于DNN的单元[27],基于生成性对抗性网络(GANS)[18]和变分自动编码器(VAE)[22]来执行无监督图像到图像的转换。单元的一个观点是,假设两个图像包含相同的内容,但位于不同的域,则它们在共享潜在空间中应该具有相同的表示。因此,给定来自一个域(例如,原始驾驶场景)的新图像,单元可以在另一个域(例如,下雨驾驶场景)中自动生成其对应版本
图4[27]表示单元的结构,S1和S2表示两个不同的域(例如,晴天和下雨的驾驶场景),E1和E2表示将来自S1和S2的图像投影到共享潜在空间Z的两个自动编码器。假设X1和X2是共享相同内容的成对图像。理想情况下,E1和E2将它们编码成相同的潜在向量z,并且可以分别由两个区域特定生成器G1和G2将其翻译回S1和S2。D1和D2是分别检测图像是否属于S1和S2的两个鉴别器。具体地说,期望它们区分输入图像是从目标域(例如,真实图像)采样的,还是由训练有素的生成器(例如,合成图像)产生的。基于自动编码器和生成器,单元可用于在两个域之间转换图像。例如,图像x1可以通过G2(E1(X1))变换成S2。
在单元中,所有的Di、Ei和Gi都体现为神经网络,单元的学习目标可以分解,以优化以下成本:
- VAE损失:将每个 ⟨ E i , G i ⟩ \left\langle E_{i}, G_{i}\right\rangle ⟨Ei,Gi⟩的图像重建损失降至最低。
- GAN损失:在每个 ⟨ G i , D i ⟩ \left\langle G_{i}, D_{i}\right\rangle ⟨Gi,Di⟩的极小极大博弈中达到平衡点,其中Di的目的是区分图像,以找出它们是否是从Si或者旨在愚弄Di的Gi中采样的。
- 周期一致性损失:最小化每个 ⟨ E i , G j , E j , G i ⟩ \left\langle E_{i}, G_{j}, E_{j}, G_{i}\right\rangle ⟨Ei,Gj,Ej,Gi⟩的周期重构损失,其中x1应等于 G 1 ( E 2 ( G 2 ( E 1 ( x 1 ) ) ) ) G_{1}\left(E_{2}\left(G_{2}\left(E_{1}\left(x_{1}\right)\right)\right)\right) G1(E2(G2(E1(x1)))),x2应等于 G 2 ( E 1 ( G 1 ( E 2 ( x 2 ) ) ) ) G_{2}\left(E_{1}\left(G_{1}\left(E_{2}\left(x_{2}\right)\right)\right)\right) G2(E1(G1(E2(x2))))。
总损失可以概括如下:
该损失函数可以用随机梯度下降算法进行优化
S1和S2是两种图片(一种晴天一种下雪),z是隐变量,通过对S1进行编码解码即可到S2
3.1.3 DeepRoadMT框架。图5显示了我们针对基于DNN的自动驾驶系统DeepRoadMT的变形测试框架的总体设计。在图5中,DeepRoadMT首先从两个目标域(例如,晴天和下雪天气下的驾驶场景数据集)获取不成对的训练图像,并通过优化第3.1.2节中提供的损失函数,利用单元将两个域投影到相同的潜在空间。训练过程结束后,DeepRoadMT使用训练好的模型将整个晴朗驾驶场景的数据集转换为下雪天气。具体地说,给定晴天i下的任何图像,DeepRoadMT使用E1将其编码为矢量Zi,并使用G2合成其在下雪天气τ(I)下的对应版本。DeepRoadMT将每对真实和合成的驾驶场景图像馈送到被测试的自动驾驶系统,即DNN,并比较它们的预测结果DNN⟦τ(I)⟧和DN
N⟦I⟧,以检测任何不一致的行为。通常,变换的驾驶场景预计不会显著影响预测的转向角,并且任何不一致都可能指示被测试系统的正确性或健壮性问题[31,38]。
基于DNN的自动驾驶系统的输入验证
DeepTest和DeepXplore合成的驾驶场景可以作为测试用例,对基于DNN的自动驾驶系统进行离线测试。虽然这些测试用例有助于暴露系统漏洞,并建议开发人员补充来自真实世界的训练数据,以提高系统的健壮性,但对于在线测试来说,这是不够的。例如,基于DNN的自动驾驶系统可以经过良好的训练,在阳光明媚的环境中完美发挥作用,但它可能在夜间或白雪覆盖的道路上表现不正确,因为它检测到的引导汽车的车道标志在这样的驾驶场景中消失了。这个例子表明,如果系统可以在线验证输入图像,并在无法处理无效输入时主动建议司机控制汽车,自动驾驶系统可以变得更安全和更健壮。接下来,我们首先定义了DNN(特别是面向图像的模型)的输入验证标准,并提出了基于DNN的自动驾驶系统的输入验证框架。
3.2.1 DNN的输入验证。输入验证(IV)的目标是确保只有格式正确的数据才能被系统接受,而格式错误的数据应该在执行之前被拒绝。原因是无效的输入可能会触发下游组件的故障,从而使系统不安全。通常,程序的有效输入可以明确定义,比如输入字符串不应该为空/空,或者某个输入变量的值应该大于0。然而,正确定义基于DNN的程序的输入有效性并不是一件容易的事。例如,我们可以定义IV标准,因为输入数据应该是大小为640*480的任何RGB图像,或者任何输入数据都应该存在于训练数据集中以保证正确性。但是,由于第一个准则太弱,不能提高系统的鲁棒性,而第二个准则太强,使得系统缺乏泛化能力,所以没有一个是合适的
基于可能近似正确(PAC)学习理论,定义了基于DNN程序的IV准则。根据PAC学习理论[13],机器学习模型Λ期望从训练数据集中学习分布D,并且高概率地预测正确的标签。1这可以表示如下:
E
(
Λ
;
D
)
=
Pr
x
∼
D
(
Λ
(
x
)
≠
y
)
Pr
(
E
≤
ϵ
)
≥
1
−
σ
E(\Lambda ; \mathscr{D})=\operatorname{Pr}_{\mathbf{x} \sim \mathscr{D}}(\Lambda(\mathbf{x}) \neq y)\\ \operatorname{Pr}(E \leq \epsilon) \geq 1-\sigma
E(Λ;D)=Prx∼D(Λ(x)=y)Pr(E≤ϵ)≥1−σ
在公式3中,E表示Λ对从D采样的输入数据x做出错误预测的概率(Λ(X),y),在公式4中,ϵ和σ是0到1之间的两个参数,使得E很可能(大于1−σ)E小(小于ϵ),这意味着Λ对D有效。基于上述公式,我们首先定义了基于DNN的系统的抽象IV准则是输入数据应该从D采样。如前所述,假设输入数据是。违反IV标准,预测精度得不到保证。因此,有必要验证输入以提高基于DNN的系统的鲁棒性。
直观地说,IV标准应该实例化为:
Pr
x
∼
D
(
x
=
i
)
>
θ
\operatorname{Pr}_{\mathbf{x} \sim \mathscr{D}}(\mathbf{x}=i)>\theta
Prx∼D(x=i)>θ
这意味着从D采样输入i的概率应该大于预定义阈值θ。否则,系统拒绝对i进行预测。然而,该定义对于图像数据是不容易处理的,因为图像数据是高维的,并且其分布(例如高斯混合模型)很难被显式表示。为了解决这个问题,我们将图像数据投影到低维空间,并使用输入和训练数据之间的距离来代替
Pr
x
∼
D
(
x
=
i
)
\operatorname{Pr}_{\mathbf{x} \sim \mathscr{D}}(\mathbf{x}=i)
Prx∼D(x=i)。特别地,根据流形学习理论[13],由D生成的图像可以嵌入到非线性低维流形MD中。假设输入数据I是从D采样的,其投影ip应该包含在MD中。此外,我们对非线性嵌入提出了一个额外的约束,即假设输入数据是由不同的分布D‘产生的,它们的投影被期望包含在另一个流形MD’中,该流形对于MD是线性可分的。基于约束条件,我们可以计算iP的最小距离和训练数据的投影,以验证IP是否属于MD。IV标准重新定义如下:
min
j
∥
h
(
i
)
−
h
(
j
)
∥
2
<
θ
′
\min _{j}\|h(i)-h(j)\|_{2}<\theta^{\prime}
jmin∥h(i)−h(j)∥2<θ′
其中,∥·∥2表示L2范数,h(·)表示所需的非线性投影,θ‘表示输入验证的预定义阈值。如果输入满足方程6,则由DNNs进行处理以进行预测,否则将拒绝。
3.2.2 DeepRoadIV框架。提出了一种用于自动驾驶系统的输入验证框架DeepRoadIV。DeepRoadIV将投影h(·)分解为非线性变换和降维两部分。对于第一部分,DeepRoadIV应用VGGNet[37],一种广泛使用的DNN[17,20]来从每幅图像中提取高级特征。具体地说,输入图像是通过内核在VGGNet的每一层中编码的。假设第i层包括Ni个不同的核,它生成每个大小为(wi,hi)的Ni个特征图,其中wi和hi分别是特征图的宽度和高度。这些特征映射可以被存储为大小为(Ni,Mi)的特征矩阵Fi,其中Fi的每一行都是从对应的特征映射和Mi中展平的向量。DeepRoadIV还生成在[16]中引入的样式信息。这些样式信息的目的是捕捉图像的纹理,它是通过特征相关性来定义的,特征相关性可以通过Gram矩阵来计算
G
i
=
F
i
⋅
F
i
T
G_{i}=F_{i} \cdot F_{i}^{T}
Gi=Fi⋅FiT
假设我们选择第i层和第j层分别提取特征矩阵和样式矩阵Fi和Gj,则给定图像的表示向量
v
⃗
=
[
v
F
→
,
v
G
→
]
\vec{v}=[\overrightarrow{v_{F}}, \overrightarrow{v_{G}}]
v=[vF,vG],其
v
F
→
\overrightarrow{v_{F}}
vF和
v
G
→
\overrightarrow{v_{G}}
vG中是Fij和Gj的平面化向量。进一步,我们应用主成分分析(PCA)技术来降低输入和训练数据的特征维数,如下所示:
Y
=
X
⋅
P
Y=X \cdot P
Y=X⋅P
X表示大小为(n,m)的输入矩阵,其中n是输入和训练数据的总数,m是特征向量
v
⃗
\vec{v}
v的长度。P表示大小为(m,k)的投影矩阵,其中k是目标维数(小于m),P可以使用X[13]来计算。
图6显示了我们的输入验证框架DeepRoadIV的总体设计。DeepRoadIV首先将训练和在线驾驶图像作为输入,并使用VGGNet提取其内容和风格特征。如图6所示,DeepRoadIV将雪花图像输入到VGGNet,并选择卷积层conv
4_2和conv 5_3分别提取内容和样式特征。具体地说,彩色网格F4_2和F5_3表示从VGGNet中提取的内容特征,样式特征G5_3由公式7计算。请注意,这些彩色网格只是用于可视化结果,它们的尺寸与实际输出不匹配。然后,将矩阵F4_2和G5_3平坦化并连接成特征向量V。DeepRoadIV对所有图像数据采用相同的处理方法,特征向量组成矩阵X。第二步,DeepRoadIV采用PCA进行特征降维。在图6中,我们将目标维度设置为2。处理后的数据Y显示在2-D平面上,其中蓝色和红色节点分别表示训练图像和在线驾驶图像。最后,DeepRoadIV计算训练数据与每幅在线图像之间的最小距离,并拒绝对距离大于某一阈值的图像进行预测。
原始图片训练集-->卷积特征F-->特征相关性G-->展平V-->PCA降维-->特征向量 新来的图片和这些原始训练集做一个距离检测,超过阈值的拒绝
实验
数据
我们使用Udacity[8]发布的真实数据集作为基线来检查自动驾驶系统的不一致性。我们从数据集中选取了两段高速公路行驶视频,在这些视频中可以观察到帧之间光照和路况的明显变化。为了训练单位模型,我们还从YouTube上收集了极端场景的图像。在实验中,我们选择了大雪和暴雨这两种极端天气条件来转换真实的驾驶场景。为了使采集图像的方差较大,我们只搜索超过20分钟的视频。在大雨的情况下,视频记录了雨刷滑动挡风玻璃的情况,这可能会降低合成图像的质量。因此,在数据预处理阶段,我们对这些图像进行人工检查和过滤。请注意,实验中使用的所有图像都被裁剪并调整到320*240大小,我们对YouTube视频执行了向下采样,以跳过内容接近的连续帧。详细资料见表一。
模型
我们在Udacity[8]发布的三个基于DNN的自动驾驶模型[8]上对我们的变形测试框架DeepRoadMT进行了评估:Autumn[4]、Cauffeur[5]和Rumightman[6]。我们选择这三个模型是因为它们的预训练模型是公开的,并且可以直接在合成数据集上进行评估。具体地说,Rwightman的模型细节是不公开的,但是,类似于黑盒测试,我们的方法旨在检测模型的不一致性。因此,Rwightman仍用于评估。
Autumn。Autumn由数据预处理模块和CNN组成。具体地说,Autumn首先计算原始图像的光流,并将其输入CNN以预测转向角度。Autumn的结构是:三个步长为2的5x5的卷积层,加上两个3x3的卷积层,然后是五个全连接的带dropout的层。该模型由OpenCV、TensorFlow和KERAS实现。
Chauffeur。Chauffeur由一个CNN和一个带有LSTM模块的RNN组成。其工作流程是:CNN首先提取输入图像的特征,然后利用RNN从前100幅连续图像中预测转向角。该模型也由TensorFlow和Kera实现。
指标
模型不一致性的度量。在这项工作中,定义了一个自动驾驶系统,在修改了驾驶图像的天气条件后,如果它的转向角预测落在一定的误差范围内,那么它的行为是一致的。我们将自动驾驶系统的不一致行为定义如下:
I
B
(
D
N
N
,
I
)
=
∑
i
∈
I
f
(
∣
D
N
N
[
[
i
]
]
−
D
N
N
[
[
τ
(
i
)
]
]
)
∣
>
ϵ
)
\left.I B(D N N, \mathbb{I})=\sum_{i \in \mathbb{I}} f(| D N N[[i]]-D N N[[\tau(i)]]) |>\epsilon)\right.
IB(DNN,I)=i∈I∑f(∣DNN[[i]]−DNN[[τ(i)]])∣>ϵ)
其中DNN表示自动驾驶模型,I是真实驾驶数据集。i表示I中的第i个图像。τ表示可以改变输入图像的天气状况的图像生成器/转换器。f是一个指示器函数,当且仅当输入为True或False且ϵ为误差界时输出1或0。
输入验证的度量。如第3.2.2节所述,基于DNN的自动驾驶系统的输入有效性是由输入图像和训练图像在嵌入空间中的最小距离来定义的。该度量可以反映输入数据和训练数据之间的相似性,但是它有以下限制:第一,通常情况下,训练数据集很大(例如10k图像)。假设我们使用上述度量来验证单个输入图像,那么大量的训练数据点将占据PCA,并且结果是有偏差的。其次,使用最小距离进行输入验证并不稳定。例如,假设输入i和训练数据j的距离最小并且小于阈值。然而,j与其他训练数据相去甚远,并且实际上i与训练数据集的大部分并不相似。首先,为了平衡输入数据和训练数据,我们从在线驾驶场景中采集M幅图像作为输入数据,并从训练数据集中随机选取M幅图像作为训练数据。其次,为了更稳定地估计距离,我们对每幅图像的Top-N最小距离进行平均,以表示它们的相似性。输入有效性的度量定义如下:
实验中使用的有效性度量方式不同于定义的,有修改
m
I
V
(
i
,
S
t
)
=
f
(
1
N
∑
k
∈
{
N
}
min
j
∈
S
t
k
(
∥
h
(
i
)
−
h
(
j
)
∥
2
)
<
θ
)
m_{I V}\left(i, S_{t}\right)=f\left(\frac{1}{N} \sum_{k \in\{N\}} \min _{j \in S_{t}}^{k}\left(\|h(i)-h(j)\|_{2}\right)<\theta\right)
mIV(i,St)=f⎝⎛N1k∈{N}∑j∈Stmink(∥h(i)−h(j)∥2)<θ⎠⎞
其中N是小于M的参数,I表示大小为M的输入数据集的图像。StM表示随机选择的训练图像的集合,MINK(·)表示输入数组中的第k个最小值。函数f是指示函数,θ是输入验证的阈值。
m
I
V
(
i
,
S
t
)
=
f
(
1
N
∑
k
∈
{
N
}
min
j
∈
S
t
k
(
∥
h
(
i
)
−
h
(
j
)
∥
2
)
<
θ
)
m_{I V}\left(i, S_{t}\right)=f\left(\frac{1}{N} \sum_{k \in\{N\}} \min _{j \in S_{t}}^{k}\left(\|h(i)-h(j)\|_{2}\right)<\theta\right)
mIV(i,St)=f⎝⎛N1k∈{N}∑j∈Stmink(∥h(i)−h(j)∥2)<θ⎠⎞
结果
4.4.1 DeepRoadMT结果。我们首先在图7中提供几个YouTube屏幕截图作为基本事实,以帮助读者检查合成图像的质量。在图8中,我们列出了实数和GAN生成的图像对,其中两行分别表示Udacity数据集到下雪和下雨场景的转换,奇数和偶数列分别表示原始图像和GAN生成的图像。在质量上,GAN生成的图像在视觉上与YouTube视频中采集的图像相似,并且可以保留原始图像的主要语义信息(如树的形状和道路的形状)。有趣的是,在图8中的第一张下雪图像中,天空相对较暗,GAN可以成功渲染雪地纹理和车前的灯光。在第二列中,降雨图像的清晰度较低,这与图7所示的真实场景是一致的,我们的结果与原始的单元工作[27]是一致的,进一步证明了单元对图像转换的有效性。
我们进一步给出了图9中检测到的自动驾驶模型不一致行为的示例。在图中,每一行分别显示了雪和雨的场景。在每个子图中,蓝色标题表示车型名称,而红色和绿色标题分别表示真实图像和合成图像上的预测转向角度。曲线将有助于检查差异的预测可视化。从图中我们可以看到,模型Autumn(前两列)在两个场景中的不一致数最高;相比之下,Rwightman(后两列)是不同场景下最稳定的模型。此图显示DeepRoadMT能够发现真实世界自动驾驶模型在不同道路场景下的不一致行为。例如,像Autumn(或Chauffeur[3])这样的车型(它们在Udacity挑战赛中的排名都比Rwightman高)可能在阳光明媚的日子里工作得很好,但在雨天或雪天可能会撞到路边(或者更糟糕的是,迎面而来的汽车)(如图9所示)。
表2给出了Udacity数据集上每个研究的自动驾驶模型在不同天气条件下检测到的不一致行为的详细数量和误差范围。例如,当使用10°的误差界和雨景时,DeepRoadMT分别检测到5279、710和656个Autumn、Chauffeur和Rwightman的不一致行为。从表中我们可以观察到,在两种天气条件下,Autumn的不一致数最高。我们认为一个潜在的原因是Autumn是纯粹基于CNN的,没有利用历史信息(例如,通过RNN),因此可能不会在所有的道路场景中都表现良好。另一方面,在所有误差范围内,Rwightman模型比其他两个模型执行得最一致。这一结果呈现了一个非常有趣的现象-DeepRoadMT不仅可以检测所研究的自动驾驶系统数以千计的不一致行为,而且可以根据不同的自主系统的鲁棒性来衡量它们的健壮性。例如,使用原始的Udacity数据集,很难找到Autumn这样的自动驾驶系统的局限性。
4.4.2 DeepRoadIV结果。我们使用晴天、雨天和下雪的驾驶场景来测试DeepRoadIV。本实验的期望是,在嵌入空间中,阳光图像接近于训练图像,下雨和下雪图像对它们来说是线性可分离的。具体地说,晴朗的图像是从原始测试数据集中收集的,雨雪图像是从YouTube视频中提取的。请注意,为了确保输入图像的真实性,我们只选择真实世界,而不是合成图像。此外,我们选择了VGGNet的卷积层Conv3_2和Conv4_1来提取输入图像的内容和风格特征,并将PCA维数设置为3以实现实验结果的可视化。为了降低计算复杂度,我们将所有图像的大小调整为120*90,并将每个数据集的采样数目M设置为600。此外,我们使用每个数据点的TOP100最小距离的平均值来降低每个输入图像的相似度估计的方差。
图10可视化了DeepRoadIV在晴天、下雨和下雪的驾驶场景的结果。具体地说,图10的前三个图片分别呈现了晴天、下雨和下雪图像的结果。并且橙色和蓝点表示采样的训练图像和相应的输入图像。我们首先分析了图像嵌入的结果。从图10a中,我们观察到大多数输入图像与训练样本混合在一起,少数输入远离聚类。从图10b和10c可以看出,在输入点和训练点之间有间隙,并且群集是线性可分离的。这些结果表明,晴天图像和训练图像的分布比较接近,而雨雪图像的分布不是很接近。另一方面,雨雪图像簇相对密集,但晴天图像分散。原因可能是雨雪图像的纹理统一,内容比较差,所以图像之间的距离很小。然而,晴天图像的光照条件和内容较为多样,因此距离较大。此外,从图10d中我们发现,晴天图像的距离主要在0到3之间,雨雪图像的距离几乎都大于2。假设输入验证的阈值为2.5时,DeepRoadIV可以将晴天图像中100%的雨、85%的雪和21%的离群点检测为无效输入,有效地提高了系统的鲁棒性。此外,我们还研究了是否需要对输入图像进行非线性变换来进行输入验证。
图11可视化了DeepRoadIV在没有特征提取的情况下的结果。从图11中,我们观察到所有蓝色聚类都被橙色点包围,这表明输入图像与嵌入空间中的训练图像不是线性分离的。这意味着在这种情况下,距离不是用于输入验证的适当度量,并且确实需要非线性变换(即,使用VGGNet进行特征提取)。
有效性威胁
对所提出的方法及其结果的有效性有几个威胁,包括以下几个方面。
在这项工作中,对内部有效性的主要威胁是我们的技术实施中的潜在缺陷。为了减少这些威胁,在DeepRoadMT时,我们使用了原有的Unit实现来保证DeepRoadMT的性能。此外,在DeepRoadIV的实现中,我们从PyTorch网站2下载了预先训练好的VGGNet权重,而不是在ImageNet上进行训练。
对外部有效性的威胁主要在于图像质量、数据集和自动驾驶模型。首先,我们缺乏一个好的标准来评价图像质量(即真实感)。在本文中,我们提供GAN生成的图像,以供读者检查其质量。这种方法相当直截了当,但不太客观。Salimans等人在[34]中提出了初始评分来评价合成图像的质量。具体地说,“Inception Score ”使用在ImageNet上预先训练的“Inception-v3网络”来计算网络输出的统计数据,作为生成图像的质量。然而,Barratt等人[12]证明,在比较生成模型(例如GANS)时,初始评分未能提供有用的指导。此外,GANS的生成过程是不可控的,合成图像中可能会缺少某些语义内容(如树木或汽车),这可能会威胁到蜕变测试的有效性。其次,Udacity数据集相对较小,自动驾驶模型相当简单。假设数据集足够大,则可以训练一个更复杂、更健壮的模型,从而大大减少不一致行为。此外,自动驾驶系统是复杂的,其输入和输出是多样化的。在这项工作中,我们只专注于测试转向角度的准确性,而不是速度调整。
相关工作
蜕变测试。蜕变测试是一种识别软件缺陷的经典软件测试方法[15,36,44]。它的主要思想是检测在具有不同输入的程序的多个运行的输出之间定义的特定于域的变形关系的违反。变形测试已经应用于机器学习分类器的测试[30,40,41]。针对基于DNN的自动驾驶系统,DeepRoad开发了一个基于GAN的变形测试模块,其中定义了变形关系,使得无论如何合成驾驶场景以应对天气条件,驾驶行为都期望与相应的原始驾驶场景下的驾驶行为一致。
输入验证。输入验证旨在确保只有格式正确的数据才能被信息系统接受,并防止格式错误的数据导致系统错误。已经应用输入验证来增强Web应用程序的健壮性[1,25]。针对基于DNN的自动驾驶系统,DeepRoad提出了一种基于距离的输入验证框架,其核心思想是将有效的输入图像与训练数据集中的部分图像相似,通过非线性低维空间中的距离来度量相似性。为了增强系统的安全性,如果图像的距离大于给定的阈值,则会拒绝图像。
基于DNN的自动驾驶系统的测试与验证。与DNN模型的传统测试实践[28,39]不同,最近的一组方法(如DeepXplore[31]和DeepTest[38])利用差分和变形测试算法来识别在不同DNN模型之间或在原始和转换后的驾驶场景之间触发不一致的输入。虽然这些方法已经成功地发现了各种自动驾驶系统的问题,但仍然缺乏能够测试基于DNN的自动驾驶系统具有多样化和真实感的综合驾驶场景的方法。此外,DeepSafe[19]专注于自动识别输入空间的安全区域,在这些区域内,网络对于对手的扰动是健壮的。
基于GAN的图像翻译。基于GAN的域自适应最近被证明在无监督的图像到图像的翻译中是有效的[21,27,43,45]。CycleGan[45]、DiscoGan[21]和DualGan[43]提出了类似的思想,即图像到图像的平移应该满足循环一致性,即来自域A的图像在被转换回域B时应该是相同的。实验表明,这种额外的约束可以使转换后的图像更加逼真。Unit[27]还假设两个域的表示可以投影到相同的向量空间(共享潜在空间),并且基于VAEs和GANs来构造。具体地说,他们还将循环一致性应用于GaN模型,以使转换正则化。
此外,基于GAN的域自适应也适用于虚到实、实到虚的驾驶场景自适应[26,42]。DUdrive[42]提出了端到端驱动的无监督实域到虚拟域统一框架。他们的关键洞察力在于,原始图像可能包含与转向角预测无关的讨厌细节,相应的虚拟场景可以忽略这些细节,还可以解决域偏移问题。Grad-GAN[26]被设计成在虚拟世界中自动传输场景注释,以方便现实世界的视觉任务。在该工作中,提出了一种语义感知鉴别器来验证渲染图像每个语义区域的保真度。
结论
AN的域自适应也适用于虚到实、实到虚的驾驶场景自适应[26,42]。DUdrive[42]提出了端到端驱动的无监督实域到虚拟域统一框架。他们的关键洞察力在于,原始图像可能包含与转向角预测无关的讨厌细节,相应的虚拟场景可以忽略这些细节,还可以解决域偏移问题。Grad-GAN[26]被设计成在虚拟世界中自动传输场景注释,以方便现实世界的视觉任务。在该工作中,提出了一种语义感知鉴别器来验证渲染图像每个语义区域的保真度。
结论
本文提出了一种无监督学习框架DeepRoad,用于合成真实的驾驶场景来测试基于DNN的自动驾驶系统的不一致行为,并验证在线输入图像以提高系统的鲁棒性。在三个真实的Udacity自动驾驶模型上的实验结果表明,DeepRoad能够成功地检测出数千种不一致的行为。此外,我们的结果还表明,DeepRoad可以有效地验证输入图像,从而潜在地增强系统的鲁棒性。