文 | 木子Yanni
在评测自动驾驶系统安全与否的征程中,除了上路硬刚,还需要点更有趣的。
1、复仇中孕育出的无人驾驶2001 年,两架被恐怖分子劫持的民航客机,一架撞塌了美国纽约世贸中心大楼及附近五座建筑,另一架则撞塌了美国国防部五角大楼。
图片来源于网络
在这起恐怖袭击面前,不管是里子还是面子,美国都稀碎。
“9·11”事件后,美国情报部门锁定了幕后黑手本拉登,迅速出兵阿富汗,开始了长达十数年的复仇行动。
但复仇之路,遍布荆棘。
面对美国的来势汹汹,本拉登领导的武装力量,在当地很多道路上埋设了爆炸装置,美军运送物资时,常常会误触,导致伤亡,这让美军犯了难:难不成安排人手挨街去扫雷?
在排除了无数种无效方案后,美军面前只剩一个靠谱选择:研究无人驾驶,减少运输伤亡。
这个在当时看来科幻无比的技术难题,毫无疑问,落在了美国著名的黑科技组织 DARPA 身上。虽然 DARPA 厉害,但也架不住这个开头难,脑筋一转,DAPRA 心生一计:举办比赛,发动群众力量,共同解决难题。
2004 年,DAPPA 拿出了 100 万美元作为奖金,举办了一场机器人汽车比赛。
为了贴近阿富汗战场的实际情况,比赛场地被定在位于拉斯维加斯南部的一个沙漠中,路线总长 240 公里。比赛限时 10 小时,在规定时间内,谁第一个到达终点,就能抱走那 100 万美金。
我们都知道,做研究最怕缺钱。这不,一大批从事机器人研究的团队,一听说参加比赛就能搞到钱,全都跑来报名。
这其中,有技术名人,比如曾发明远程勘探车“漫游者”,承担了美国 1979 年核事故后清理事故现场重任的威廉·惠特克,也有平平无奇的选手,比如研究生厄姆森 (正是受到这场比赛的熏陶,他开始专心研究无人驾驶技术,一连参加三届比赛,后来还曾担任谷歌无人驾驶项目的首席技术官)。
终于,比赛的日子到来了。
得益于 DAPRA 前期的成功营销,一大批记者早早出发,乌央乌央地挤在赛道终点,寻找有利角度,架好机器,试图捕捉冠军车辆风尘仆仆后的荣光。
为了那一刻,记者们足足等了十个小时。
然而,直到比赛结束,也没有一辆汽车冲过终点。主办方一了解才知道,有的车被小石子卡住了,有的车被沙丘困住了,总之别问,问就是团灭。
在这场漫长的寂寞等待中,记者们感觉自己受了捉弄,纷纷在新闻能登上台面的前提下,用最扎心的语言对比赛进行了报道。比如在一篇“DAPRA:沙漠中惨败”的报道中,记者用了大量篇幅,将 DAPRA 描绘成异想天开的官僚机构,称他们总是撒钱在一些蠢事上。
不过,DAPRA 并没有放弃,还一连举办了三届。
在这个过程中,一切都在变化:DAPRA 不再将它视为支援战争的工具,比赛场地从沙漠走进城市;比赛规则开始注重安全,从最初的到达终点即可,到必须遵守交通规则;奖金也不再是发不出去的道具,开始有团队凭实力取胜,笑捧奖金而归。
这场从沙漠和尴尬中走出的机器人汽车比赛,拉开了无人驾驶技术的序幕。
2、重回事故现场如今,距离 DAPRA 发起机器人汽车比赛,已经过去了 17 年。
在这 17 年中,借着深度学习这*风,自动驾驶技术发展的如火如荼,谷歌、特斯拉、Uber、百度皆是其中的头号玩家,但从比赛伊始就强调的安全,至今仍是一个绝对难题。
尽管各巨头对自家的自动驾驶技术都很有信心,但谁也无法保证上路后 100% 安全,于是在出行新模式面前,大家不约而同采取了折中方案:车上坐个安全员,你好,我也好。
然而,当事故出现,安全员立刻卑微成了背锅侠,主角光环都难以拯救。
2018 年 3 月 18 日晚,美国亚利桑那州的街头,Uber 正在进行自动驾驶测试,一位安全员正坐在驾驶位上,而在车前方,49 岁的女性伊莱恩·赫茨伯格,正推着自行车横穿马路。
随后,Uber 无人驾驶车撞上了伊莱恩·赫茨伯格,尽管伤者在第一时间被送往医院抢救,却终因伤势过重,不幸离世。
图片来源于网络
事后经过调查,警方发现,在事故发生时,Uber 处于自动驾驶模式,车速为每小时 38 英里,而该路段限速为每小时 35 英里,属于超速行驶;坐在驾驶位上的安全员,也没有全程注意路面状况,而是时不时地低头看手机,从行车记录视频看,安全员最后一次抬头,是在事故发生前的半秒钟,但为时已晚。
最为关键的是,直到事故发生,Uber 的自动驾驶系统都没有识别出前方有人。
几个月后,这起自动驾驶*人案迎来了初步判决结果:安全员被控过失*人罪,可能面临两年半的有期徒刑,而 Uber 不会面临刑事指控,但必须改进自动驾驶技术中存在的缺陷。
这是全世界范围内第一起自动驾驶汽车撞人致死的事故,它给整个行业留下了一个思考:在自动驾驶中,如何判定过错方是技术还是人?
去年,Waymo 发布了首个以“事故”为主题的自动驾驶路测报告,清晰揭示了 Waymo 所遇事故的责任真相。
图片来源于网络
报告中涵盖了共计 21 个月的自动驾驶数据,能看到,Waymo 一共遭遇了 47 起事故,其中有 8 起事故触发了安全气囊。
值得注意的是,这 47 起事故,有 29 起并未实际发生,而是通过安全员的提前干预,将危险解除,剩下的 18 起事故,才是真的发生了碰撞。
图片来源于网络
在这 18 起真实碰撞的事故中,碰撞原因多种多样,比如倒车、拐弯擦碰等,绝大多数碰撞都很轻微,类似被庞麦郎的滑板鞋踹了一脚,而在 8 起严重事故中 (3 起真实发生,5 起模拟发生),主要责任都在人类司机身上,比如逆行、追尾等。
人类司机逆行(橙色轨迹)
有人可能会问,什么叫模拟发生?
模拟发生其实叫反事实模拟,是一种事后仿真,也就是在一个模拟器中进行假设:假如当初自动驾驶车辆遇到紧急情况时,安全员没有出手干预,而是任由自动驾驶车辆自行处理,会出现什么结果?
可能又有人会问,既然没有实际发生,Waymo 为什么还要在事后“重回现场”?是嫌自动驾驶事故率太低,找潜在事故来凑数吗?
非也。我们先回顾一个去年发生的特拉斯自动驾驶事件。
2020 年 6 月 1 日清晨,在台湾嘉义县国道 1 号水上乡段的高速公路上,一辆白色厢式货车发生侧翻,直挺挺横躺在路上,货车司机在路边等待救援。
没多久,后方一辆疾驰而来的特斯拉 Model 3,径直超侧翻的货车箱体开过来,在一个明显的刹车动作后,特斯拉继续行驶,直到几乎半个车身都嵌进货车中,才被迫停了下来。
图片来源于网络
万幸的是,由于货车当时装载的是类似奶油状的食材,起到了很好地缓冲作用,两位驾驶员都没有受伤。
此前,类似的事故还有两起,它们都有共同点:
1、前方障碍物都处于近乎静止状态;
2、障碍物被撞面都是大面积白色。
这种在没有黑客攻击情况下出现的事故,叫做 AI 感知攻击,属于“非攻击场景下的安全问题”。
就拿特斯拉在台湾的这起事故来说,在自动驾驶系统的眼里,障碍物是可以“凭空消失”的,这也是一种安全问题。
Waymo 在自动驾驶报告中,通过仿真现实场景、重回事故现场的做法,就是为了发现潜在的自动驾驶安全风险,找出系统眼里那些“凭空消失”的障碍物,确保日后某一天,当安全员没能及时干预时,自动驾驶系统依然能够主动避开危险。
毕竟,在真正的无人驾驶时代,不会出现“一车一安全员”的配置。
事实上,如何在仿真环境中提前发现安全风险,已经成了自动驾驶头号玩家们的发力方向。
3、风险挖掘小能手国内的自动驾驶大咖百度,和 Waymo 及其他自动驾驶巨头一样,也在使用自动驾驶仿真器预测风险,但又有些不同。
在 2021 年 DEF CON CHINA 上,百度首席安全科学家李康分享了百度阿波罗的仿真训练,我们可以从中了解一二。
与市面上大部分的自动驾驶仿真平台一样,百度阿波罗使用的 AI 感知安全验证平台,支持对道路和地图的规划,也具备可编程调整的动态环境,比如天气、光线、周边车辆及行人的状态,能够最大限度模拟接近现实的复杂场景。
同一道路,可以调节不同的天气和光线
仿真测试其中一个重要用途,就是重构事故现场:通过还原事故当时的环境,重新测试自动驾驶软件,找出事故原因,加以改善。
但在这个重构过程中,存在一个巨大的挑战:如何在给定的静态场景中,找到有风险的动态配置?
如果想最大限度还原现场,就要找到最接近现场的环境参数,不仅要考虑光线、路面、天气等静态场景因素,更重要的是考虑环境中的动态因素,比如周边车辆有多少,是在行驶、急刹还是准备停车,这样才能生成一个有效测试例。
如此多的动态参数,在重构现场过程中,往往需要进行多次调整,很难一次性成功。
如果在一开始,只是随便选择了一些参数,看自动驾驶软件会不会发生碰撞,那即便测试很多次,可能都不会出现碰撞。所以说,动态配置非常关键。
在寻找合适的仿真参数配置问题上,百度选择了一个技术帮手:Fuzz,也就是模糊测试。
过去,Fuzz 被广泛运用在自动化漏洞挖掘领域,是一种原理简单、却有效的技术。
Fuzz 的基本思路,就是用特定的生成策略来生成随机化的输入,让被测试的目标程序执行该输入,通过监控程序的运行情况,例如是否发生了 crash 等异常动作,达到测试程序功能完备性的目的。
这个过程类似机器人走迷宫:把一个机器人放到迷宫中,它可以自由安排路线,一条路走不通就换,直到找到迷宫出口为止。
但它并不是蒙眼随意走,而是会特别留意之前没走过的路,这就是 Fuzz 中一个非常有用的机制:路径反馈。
要想尽可能完整的测试程序,就要尽可能多的覆盖程序执行路径和执行状态,路径反馈机制正是以此为目标:它会特别关注那些触发了新的执行逻辑的输入,把这些输入重新进行随机化变异,生成新的输入,而那些没有触发新的执行逻辑的输入,就会被舍弃。
如果把迷宫出口看做是自动驾驶系统的风险点,Fuzz 这个小机器人在迷宫中不断探索可能的道路,最后到达终点,也就是找到了自动驾驶系统存在的风险。
在仿真测试中,主要需要捕捉的一个风险场景就是碰撞。
在整个自动驾驶仿真测试过程中,简单来看,fuzz 的工作流程分下面几步,感兴趣可以看看:
1、输入种子;
2、变异种子集,形成新的样本;
3、收集代码覆盖率 (CFG edges) 信息;
4、如果覆盖率提高,保留新变异的样本进种子集;
5、返回第二步。
举个栗子,先输入一套环境配置,再对场景中的环境变量进行随机变异,比如把光线从中午十二点调到下午四点,把湿度从晴天变成雾天,在随后的仿真测试中,如果车辆发生了碰撞,就算是找到了风险场景。
如果没有,那就继续调整,直到碰撞发生。
不过,不是所有的碰撞,都是自动驾驶软件的问题,也有其他原因。
比如后车操作不当发生追尾,又或者是仿真环境和真实环境差距过大才导致碰撞,这样的测试例就需要过滤。
过滤后剩下的碰撞参数,才是有效测试例,需要进行保存。
通过日复一日大量的仿真测试,可以发现很多潜在的安全风险,有效提高自动驾驶软件的可靠性,但有一说一,仿真环节毕竟不能 100% 代表真实环境,仿真测试中表现好,不代表上路就一定没问题,需要理性看待。
在自动驾驶问题上,安全将是一个长久追求的目标,只可能无限接近,谁也无法拍胸脯说绝对没问题。
因为在这个世界上,本就不存在绝对安全的系统。
嗨,这里是浅黑科技,在未来面前,我们都是孩子。
想看更多科技故事,欢迎戳→*浅黑科技。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved