"你觉得,在未来的多久之内,我们的生活可以看到有明显的改变呢?"在地铁上,F.W.H问他的一位同学。
“你是指说我们在事业和家庭上有一定成就?”
“我是想说就比如街道上无人驾驶的汽车变得很常见,或者一些其他的,能够让人们的生活发生肉眼可见的变化的技术得到比较广泛的使用。”
“那我觉得可能还需要很久。”
“如果5年,10年的话,其实并不算久,其实那将是很短的一段时间”
“可是我觉得会更长。”
“也许吧,毕竟我也没有调查过相关的领域知识,如果我说些什么,也是没有依据的,那样的谈论便是没有意义的。”

在结束了漫长的保研奋战之后,我有幸被某研究所的某老师录取为直博生。在10月份一个月的休整后,我到达了所里和导师商量毕设的选题。

导师的大方向是程序分析和软件工程(测试)在具体复杂系统上的应用(简单点来说就是如何用各种方法在一些实际系统上找Bug),组内具体又分为了分布式系统,node.js和电子表格三个方向。但是对于我,导师考虑能否由我开启组内的新的方向——无人驾驶系统上找Bug.

其实我内心是有那么一点抗拒的,毕竟我是抱着投身分布式系统或者node.js的想法来的。导师倒也很理解,问我对无人驾驶系统有没有想做这个课题的欲望,如果没有就换掉。但我实事求是地说:“我对这个领域一无了解,我没有办法说我对这个方向有没有兴趣…因为根据我的经验,做一个东西深入做下去,总是会领略到其中的一点乐趣的。但是我仍然无法说这个东西我应不应该作为研究方向”。导师便说其实这个课题可以只做个毕设,就作为一个了解体验的过程,毕设的方向和博士的方向其实也是没有关系的。如果做了发现不想继续做下去,我们就再按照分布式或者其他的去培养。

那么,对于这个我也不知道我会不会喜欢会不会讨厌的方向,我便还是决定去看上一看。人生漫漫,路过一处风景,自然可以赶路而直接经过,不过留下来看一看,倒也无碍。

本文的接下来会介绍下我看的三篇论文,都是关于无人驾驶的测试的。这些论文可能和读者平时看到的无人驾驶算法类研究论文所研究的内容迥异,但阅读一下也未尝不可。这篇文章其实也算不上导读,最多也就是个引入和介绍,如果想要对相关论文深入了解的话,文章提供了原文地址,读者可以下载查看。

ML-based Fault Injection for Autonomous Vehicles:A Case for Bayesian Fault Injection(2019, DSN)

原文链接:ML-based Fault Injection for Autonomous Vehicles: A Case for Bayesian Fault Injection

题目直译:“对于自动驾驶系统使用基于机器学习方法的错误注入:一个贝叶斯错误注入的例子”

错误注入

首先解释一下什么是错误注入(Fault Injection)。

用最简单的话解释,就是在程序正常运行时,我们强行修改内存中某一个变量的值,然后观察程序能否在被我们修改了内存后仍然正确处理异常的值并最终将程序恢复到正确的状态。
举个例子,假如一个无人驾驶程序正在控制着一辆汽车正常运行,内存中会有一个变量,假如叫speed,值为60.0,代表着这个程序将控制汽车以60km/h的速度行驶。在某一个时刻,我们的错误注入程序会突然将内存中speed的值修改为90.0,然后观察这个无人驾驶程序能否恢复到正常状态。

理想情况下,这个无人驾驶程序可能会判断出speed这个值突变是不合理的(可能是通过对于“速度”这个模块具体的一些监视和检查逻辑),然后将speed立刻复原到原来的值。或者这个无人驾驶程序并没有判断出speed这个值变得不合理,但是其他的各个模块可以协调运作,将整个系统迅速恢复到正常状态。(比如,车距模块控制着车辆和周围的车辆在speed突变的时刻保持着一个比较安全的距离,然后speed突变后,相关车距变小,摄像头和图像处理模块检测到车距变小并且向系统发出减速命令,speed即车速又从90逐渐下降,最终在安全距离内恢复到初始的speed=60的状态)。

错误注入方法是一个非常强力的检测系统可靠性的方法。除了修改内存中的变量外,错误注入可以修改系统传递的消息,修改内存中某一个寄存器上的某一位从1变0或者从0变1。对于无人驾驶系统,除了可以为速度控制器注入故障,还可以注入比如某一时刻前置摄像头的一部分像素被修改,刹车系统在某个很短的时间内失灵等情况。

那么对无人驾驶系统应用错误注入到底有没有意义呢?这是一个见仁见智的问题了。我个人的看法是它是有一定意义的,但是意义也是有限的。一方面,对于无人驾驶系统,各个模块和传感器确实可能遇上一些问题,比如刹车系统突然短时间内和主系统失去了联系,或者前置摄像头突然失灵,或者数据传输过程中突然出现了一些信号错误,这都是确实有可能发生的,无人驾驶系统有保证一定可靠性的必要,而我们的错误注入工具正可以帮助相关的开发人员找到可能的关键场景,完善这个系统。但另一方面,如果我们为了找到所谓的"Bug",向系统中注入了很多极其刁钻的完全不可能在显示中出现的错误组合,那么这样的“Bug”我个人认为意义就很有限了。

关于错误注入的一些资料我放在了文末,如果对错误注入有兴趣的读者可以选择性阅读。

贝叶斯

关于贝叶斯的介绍网上可太多了。

简单介绍一下,就是通过已经发生的事件,判断未来的事件概率如何,而不是基于整体的分布来判断(那就是条件概率)。

我在本文最后附了一些和贝叶斯相关的资料,如果对贝叶斯还不了解或者有相关兴趣的读者可以先翻到最后查阅一下。

现有问题及论文的解决方法

在论文中,作者提出,现有的在无人驾驶中使用错误注入的方式有一个共同的问题——注入的错误不够精确。

注入的错误不够精确意味着很多注入的错误并不能让无人驾驶系统产生问题,换言之,无人驾驶系统能够从这些错误中恢复过来。可是为了验证无人驾驶系统能够从这些错误中恢复过来这个事实,我们需要花大量时间跑实验,这是一个很大的时间和成本的浪费。

毕竟对于软件测试的研究人员来说,找到新的Bug才是令人兴奋的。如果我花了一个月,跑了几百个可能的错误,结果发现系统在这些错误下都能正常运行,那某种角度上其实我这一个月是没有任何成果的(这其中的逻辑在于——如果一个东西是正确的,无论你验证不验证,它都是正确的,但如果它是错误的,只有当你验证了,它才会暴露出来,人们才会知道,它是错误的)。

那么怎么才能更精确地知道哪里可能出现Bug然后我精确地把错误注入到这里呢?啊哈,我们可以用贝叶斯!

通过贝叶斯,我们可以训练出执行不同的错误注入可能产生的错误的概率,然后运用这些概率,我们就可以更快更好的注入真正能产生Bug的错误。

具体怎么做就不在本文中详细介绍了,可以详细阅读论文,其中涉及到了比较复杂的数学推导。

DeepRoad:GAN-Based Metamorphic Testing and Input Validation Framework for Autonomous Driving Systems(2018, ASE)

原文链接:DeepRoad: GAN-based Metamorphic Autonomous Driving System Testing

题目直译:DeepRoad: 面向自动驾驶系统的基于GAN的蜕变测试和输入验证框架

背景及解决问题

这篇文章主要想解决两个问题。

首先,对于无人驾驶系统,在正常情况下一般是不容易出现问题的,那么什么时候容易出现问题呢?当然是类似于雨天、雪天、雾天之类的极端环境下。

但是这种恶劣天气的数据集是很不好找的。所以想要训练出能在这些极端环境下也能正常运行的无人驾驶系统就比较困难。

但是现在AI这么发达,我们能不能搞个模型,让它把一张晴天的道路图片生成雨天的或者其他恶劣天气之类的呢?

诶之前还真的有人想过,就是把一个普通的路况图片数据集,给生成成含有各种干扰的数据集,从而提升训练的无人驾驶系统的可用性。

但是效果嘛,如图

第一张图是在图片上简单加了马赛克,第二张是随机加了一些黑点,第三张是图片整体向右下角位移了一下(左方和上方空出的地方则用黑色填充),第四张模仿雾的效果,但是真正的雾显然不会是这种视觉效果(你试过用相机拍摄雾吗?),第五张模仿雨的效果,雨就是一个白色的线段在图片上复制粘贴了n多次。

这太粗制滥造了!

所以作者准备在这方面下点功夫,想个法子能生成更好点的极端情况数据集。

第二个问题是,怎么判断生成的数据集中的数据(图片)合不合理?

在传统的软件测试中,输入合法性检查是非常重要的一环。比如对于一个用于登分的教务系统,那么分数便不可能是负数,输入合法性检查便应该将其检查出来。

需要注意的是,一个不合法的输入能够被输入合法性检查给检查出来并拒绝掉,和一个系统能够处理不合法的输入,这两者并不矛盾。前者是后者的一种实现方法。假设一个系统含有相关的逻辑去检查不合法的输入并进行相关的处理(比如拒绝),我们就可以说这个系统能够处理不合法的输入。

但是在神经网络/机器学习的相关程序中,很难判断一个输入的数据合法不合法。比如一个猫狗识别的程序,假如程序只有两种输出:猫和狗,但是我放入了一张鸡的图片。这显然应该是一个不合法的输入,但是似乎没有什么办法能够在这张图片放入前检测出来它是一个不合法的输入,然后将其拒绝放入模型中进行识别。

作者也尝试着解决这个问题。

UNIT


作者主要使用到的前人的成果是一个叫做UNIT的东西。

UNIT这个工具的核心概念在于,如果两个不同“域”的图片包含的“内容”是一样的,那么他们会在一个共享潜在空间(share-latent space)中有着相同的向量标识。

什么意思呢?具体到我们的无人驾驶场景中也许会好理解一些,我们不同的天气情况,比如晴天和雨天,就可以认为是不同的“域”,而因为我们是用晴天的图片在上面修改一些东西使其变为雨天图片的,所以其实两张图片的主体信息是相同的,也就是UNIT中所谓的“内容”是相同的。那么这两张图片,都经过某种变换(可理解为两个函数f和g,输入分别是这张晴天的图片和这张雨天的图片,输出都是一个向量),就能产生一个同样的向量。而这种变换f和g对于其他的晴天图片和雨天图片也是适用的,只要雨天图片是由这个晴天图片生成的,那么晴天图片经过f产生的向量和雨天图片进入g产生的向量就是同一个。这时候f和g这两个函数的值域就是所谓的共享潜在空间。

那么关键的f和g两个函数是如何求出的呢?UNIT是个工具,自然是有一套相关的数学公式和逻辑去求他们。但是在这篇文章中就不多做介绍了,我在本文最后的资料上放了UNIT论文的原文链接,感兴趣的读者可以深入了解一下。

解决方法

这里只稍微提一下作者的方法,因为这篇论文相当偏算法,如果想要理解还是需要仔细阅读原文,看相关的数学推导和程序设计逻辑。

对于生成极端情况数据集,作者应用UNIT,使用晴天的图片,首先生成共享潜在空间的向量,然后通过这个向量生成目标场景(域)下的图片。

之后,作者会将这两个图片一起放入目标系统,然后检查目标无人驾驶系统在这两种输入情况下产生的输出(即对车辆运行信息的决策)是否一致,从而判断目标系统是否在极端环境下可靠。

那么,对于作者提到的第二个问题,输入合法性,作者又是怎么做的呢?

这个问题作者用了一大堆卷积呀,取列呀,组合呀,最后放入PCA,找相关的离群点。过程十分复杂,总体思路是用各种图像处理手段提取信息,并且相互比较从而找出一组输入数据中不太合适的那些。这里只放一张概览图,具体方法可以查阅作者原文。

A First Look at the Integration of Machine Learning Models in Complex Autonomous Driving Systems(2020, FSE)

原文链接:A First Look at the Integration of Machine Learning Models in Complex Autonomous Driving Systems - A Case Study on Apollo

题目直译:复杂无人驾驶系统上的机器学习模块整合初勘

解决问题

这篇论文其实并没有解决什么问题。。它是一篇非常软工的论文,主要是作者对一些无人驾驶系统(具体来说,百度的Apollo无人驾驶系统)进行了研究,然后和一些开发者进行了讨论。对无人驾驶系统开发上目前的一些问题进行了总结和归纳。

问题&解答

  1. What is the ML model architecture and relevant information flow in Apollo?(Apollo的机器学习模型结构和信息流是什么?)

    答:直接上图



    作者发现在Apollo中有28个ML模型,使用不同的ML框架进行了训练。Apollp平台非常灵活,支持针对特定任务配置不同的ML模型。
    作者提出具体的改进空间为:未来的研究应为ML模型的管理和演变提供支持。未来的研究可能会通过更好地抽象不同的ML框架来帮助开发人员减少维护开销。未来的研究可能会考虑测试HD map或V2X对ADS(无人驾驶系统)决策的影响。

  2. What are the relationship and interaction between code modules and ML models?(Apollo系统中ML模块和普通的代码模块之间的关系是什么?两者如何进行交互?)

    答:作者首先总结出了n种交互的模式,这里由于篇幅原因就不再详细说了,感兴趣的读者可以查看原文。
    之后作者得出结论:
    一、开发人员使用代码逻辑对ML模型的输入和结果进行预处理和后处理,以提高预测精度。
    二、ADS可以根据不同情况选择使用哪种ML模型,并依靠不同的算法来组合来自不同ML模型的结果。
    三、开发人员还提供配置选项,以调整ML预测中使用的阈值。
    之后作者又提了几点建议:
    一、未来的研究应考虑针对同一任务的不同场景测试ML模型
    二、在大型系统中测试ML模型时,未来的研究应考虑复杂的ML模型交互。
    三、未来的研究应该调查ML模型交互中代码逻辑的维护所带来的挑战。
    四、未来的研究应考虑测试ML模型和代码逻辑的集成行为。

  3. 最后,作者研究了一下Apollo的代码覆盖率(即有多少代码包含有相关的测试代码)。发现还是比较低。

其实这篇论文给我的感觉就好像没什么东西,我问老师为什么这样的论文能够发表在顶级会议上。老师表示其实不少软工的文章就是这样的,就是对一个大型工程的相关研究和梳理。如果看系统的文章就比较硬核,但是那种文章可能又看起来比较难顶,因为做系统的话就要说明白各种各样的细节。(不过,我后来又看了不少软工领域的有意思的文章,软工的大多文章也是兼具硬核和实际意义而且有趣的,只能说我对于这一篇确实是不太感冒)

路漫漫其修远兮,我的科研生活终于是开始了。其实我在无人驾驶上的研究只进行了11月一个月,之后又转向了分布式的研究。因此可以说对于无人驾驶,我也只是匆匆一览。

但是在这样的过程中,我由于对于前景的迷茫,不由得时不时搜索一些比如“无人驾驶是否有发展前景”,“人工智能测试如何”,“测试工程师的发展”云云。其实现在想想,之所以会产生这样的一些迷茫和焦虑,正是因为我对这样一个初次接触的领域还谈不上有任何感情或者说热爱。其实科研本身是一个舍实利而求心安的过程(正好和本科就业的“舍虚名而求实利”对应)。当我回到我本预期的分布式系统,几个月来我竟没有一次想过去查看相关的“发展前景”云云。当然这并不是一件好事,我只能说我一直忘了这件事情,或者说一直没有去做这件事情。但正是由于对手头的事情有那么些投入,有那么些沉浸,才会忘了这些事情。

不过在我搜索之时,我倒是发现一些沧海之栗。对于机器学习相关程序的测试在学术界似乎是目前的一个潜力方向。软件测试这个研究方向其实有一种比较奇怪的感觉,一个新的类型的系统出来,测试就可以开始研究,搞出来很多很多成果和工具,然后差不多研究透了,再换下一个研究的系统。机器学习的系统目前似乎就处于刚开始研究的阶段。我在资料中附了一些相关的资料,对于方向选择还有些迷茫的同学也许可以看一下,就权当扩宽一下知识面。(当然,我个人是十分不建议就因为这么一篇博客或者一些资料就对一个方向下什么论断的,这最多只能意味着是一场调查的开始)。

资料

错误注入

错误注入学习笔记

贝叶斯定理

贝叶斯定理厉害在哪里?
贝叶斯推断及其互联网应用(一):定理简介
贝叶斯推断及其互联网应用(二):过滤垃圾邮件

UNIT

Unsupervised Image-to-Image Translation Networks

机器学习测试

Machine Learning Testing: Survey, Landscapes and Horizons
程序分析研究进展

2020年11月总结(自动驾驶测试三篇论文介绍)相关推荐

  1. 【数据竞赛】2020年11月国内大数据竞赛信息-奖池5000万

    2020年11月:下面是截止到2020年11月国内还在进行中的大数据比赛题目,非常丰富,大家选择性参加,初学者可以作为入门练手,大佬收割奖金,平时项目不多的,比赛是知识非常好的实践方式,本号会定期发布 ...

  2. 2020年11月国产数据库排行: PingCAP融资破记录,PolarDB登云巅,达梦南大壮心雄

    墨墨导读:2020年11月国产数据库排行已经发布,本月的前十名和上月相同,其中 GaussDB 跃升一位排至第八,而 SequoiaDB 则是降低一位,位列第9位.TiDB.达梦数据库 和 GBase ...

  3. 数字孪生技术在自动驾驶测试领域的应用研究概述

    来源:汽车测试网 作者:王庆涛 周正等 摘 要: 研究数字孪生技术在自动驾驶测试领域的应用.旨在构建高度开放的数字孪生自动驾驶测试平台,结合仿真测试工具.通信设备.真实测试车辆等功能单元,形成丰富的测 ...

  4. 2020年11月软件设计师真题透析

    2020年下半年软件设计师上午真题及答案解析 1.在程序执行过程中,高速缓存(Cache)  与主存间的地址映射由(   ). A. 操作系统进行管理 B. 操作系统进行管理 C.    程序员自行安 ...

  5. Play.ht训练出播客乔布斯/用嘴做视频?Meta出品/我国牵头发布首个自动驾驶测试场景领域国际标准...

    本周,业界有哪些新鲜事? 核心硬件 Linux 6.1为LoongArch CPU带来新功能 日前,Linux 6.1为LoongArch CPU带来新的附加功能.早在5.19版本中,Linux便实现 ...

  6. AI一分钟 | 张亚勤:保护用户数据安全是百度的第一原则;美国开通全球首条高速自动驾驶测试路...

    整理 | DaivdZh 一分钟AI 张亚勤:保护用户数据安全是百度的第一原则 Uber 收购美国共享单车公司 JUMP,收购价接近 2 亿美元 美国开通全球首条高速自动驾驶测试路,位于密歇根州 G ...

  7. AI一分钟 | 张亚勤:保护用户数据安全是百度的第一原则;美国开通全球首条高速自动驾驶测试路

    整理 | DaivdZh 一分钟AI 张亚勤:保护用户数据安全是百度的第一原则 Uber 收购美国共享单车公司 JUMP,收购价接近 2 亿美元 美国开通全球首条高速自动驾驶测试路,位于密歇根州 G ...

  8. 10年老电脑如何提速_电信宽带免费提速至200M,面向全国用户活动日期2020年11月9日至12月31日...

    近日中国电信免费提速活动,也是为了大家方便剁手吧! 2020年11月9日至12月31日,针对接入速率200Mbps以下的电信光纤宽带家庭用户,中国电信推出免费在线提速到200Mbps的优惠活动:针对接 ...

  9. 北京正研究“车路协同”模式,将打造自动驾驶测试专用道路

    据透露,第一条自动驾驶测试专用道路将落地亦庄. 今天上午,北京市交通委相关负责人在一档节目中透露,为了推广自动驾驶技术,北京将在未来对道路设置进行改造,实现"车路协同",而第一条自 ...

最新文章

  1. 常用Python机器学习库介绍
  2. centos7下安装gcc7
  3. gradient 渐变
  4. SparkSQL之External Data读写parquet
  5. c语言安卓图形库cairo,cairo 图形库
  6. 第五十四期:Libra盟友纷纷“跳船”,联盟链还有戏吗?
  7. 十个最适合 Web 和 APP 开发的 NodeJS 框架 1
  8. 分布式事务实践 解决数据一致性 分布式事务实现,模式和技术
  9. 3d建模电脑配置要求_建模你会一个软zbrush够吃一辈子,你学会了吗?
  10. 软件测试bug文档模板,国家标准测试计划文档模板
  11. c语言程序设计课用电脑吗,C语言程序设计之简单计算器
  12. java实现Beta函数
  13. return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Replacing columns cSerDe may be incompati
  14. 1007 Problem H A+B 输入输出练习VIII
  15. iCheck的使用示例
  16. Android百度地图水波纹动画,高德地图实现水波纹扩散
  17. 野百合的春天 ——布鲁斯鲍文
  18. 【工业机器人】工业机器人最全面基础知识科普,一篇文章彻底搞透
  19. 微信小程序遇到的坑。
  20. Flood fill algorithm

热门文章

  1. 我的世界在线服务器地址,私の世界_我的世界1.7.10服务器地址大全 我的世界1.7.10服务器ip大全_游戏堡...
  2. 进阶笔记——java并发编程三特性与volatile
  3. vue使用Echarts地图展示并标注坐标点、点击进入省市子区域地图
  4. Android矢量图形-Vector
  5. python调用按键精灵插件_按键精灵——办公常用脚本集锦
  6. CPU性能测试——CoreMark篇
  7. DreamChess — 跨平台的 3D 国际象棋游戏
  8. day20request和bs4
  9. 利用配置组策略解决Chrome浏览器第三方扩展被停用的问题
  10. 为什么做跨境电商的企业要马上开始重视TikTok强大的流量?