自动驾驶汽车是一种对安全性有极高要求的人工智能应用,但软件都有漏洞,寻找那些可能导致致命危险的漏洞是至关重要的。来自弗吉尼亚大学和哥伦比亚大学的几位研究者提出了一种自动测试深度神经网络自动驾驶汽车的方法 DeepTest,可以对自动驾驶系统进行更加全面的测试评估。
深度神经网络(DNN)近来的进展推动了 DNN 驱动的自动汽车的发展,这些汽车使用了相机、激光雷达等传感器,无需人类干预也能自己驾驶。包括特斯拉、通用、福特、宝马和 Waymo/谷歌在内的最主要的制造商都正在研发和测试不同类型的自动汽车。包括加利福尼亚、德克萨斯和纽约在内的美国多个州的立法者已经通过了新的法规,以便加速在他们的道路上测试和部署自动汽车的进程。
但是,尽管 DNN 成绩斐然,但就像传统的软件一样,往往会表现出不正确的或非预期的极端案例行为,这些行为可能会导致潜在的致命撞车。现在已经出现了一些涉及到自动驾驶汽车的车祸,包括一起出现了死亡的事故。对 DNN 驱动的汽车的大多数已有的测试技术都严重依赖于人工收集的不同驾驶条件下的测试数据,随着测试条件的增多,这种收集方法的成本也会变得非常高昂。
在这篇论文中,我们设计、实现和评估了 DeepTest。这是一个系统性的测试工具,可用于自动检测 DNN 驱动的汽车可能导致致命碰撞的错误行为。首先,我们的工具经过设计可以自动生成测试案例,这种生成利用了驾驶环境的真实变化,比如雨、雾、光照条件等。通过生成能最大化激活神经元数量的测试输入,DeepTest 系统性地对 DNN 逻辑的不同部分进行了探索。在 Udacity 自动驾驶汽车挑战赛中三个表现最好的 DNN 上,DeepTest 发现了不同现实驾驶条件(比如模糊、雨、雾等)下的数千种错误行为,其中很多都可能导致致命碰撞。
表 1:涉及自动汽车的真实事故案例
图 1:DeepTest 在 Chauffeur DNN 中找到的一个危险的错误行为
图 2:一个基本的自动驾驶汽车 DNN 以相机、光检测和测距传感器(激光雷达)、红外传感器为输入,然后输出转向角度、刹车决策和加减速决策。这里给出的 DNN 本质上是对的功能的建模,其中 θ 表示边的权重,而 σ 是激活函数。右边给出的是单个神经元所执行的计算的详情。
图 3:(上图)一个简化的 CNN 架构,其中输入图像的左上部分是一个卷积核。然后同样的过滤器(带有相同权重的边)会在整个输入空间上移动,然后计算边的权重和互连的神经元的输出之间的点积。(下图)一个简化的 RNN 架构,它的隐藏层中存在循环。右边展开的版本展示了这种循环可以如何让该 RNN 在处理了一个输入序列(即图像)之后,根据这些图像预测出要转向的角度。
算法 1:用于结合图像转换的贪婪搜索,以增加神经元覆盖率
表 3:(左图)用于评估 DeepTest 的 DNN 的细节。(右图)这个 DNN 的输出是调整自动驾驶汽车向前行驶的转向角度。Udacity 自动驾驶汽车的最大转向角度为 +/- 25 度。