游戏开发者使用动作捕捉技术教导自动驾驶Cruise理解行人手势
图中表示工人在两车道的马路上进行施工。一名工人左手举着停车标志,用右手挥手示意汽车通过。这在司机看来并不是难事。然而,这种情况是否会让自动驾驶汽车停下来吗。它能否理解停止的标志以及如何反应,但是那个手势呢?这要复杂得多。
而司机,人类和电脑,每天都要面对这种更复杂的情况,在这些情况下,解读肢体语言是关键。以一个城市的街角为例:一个准备闯红灯的行人停下来查看手机,挥手示意右转的车向前开。另一个行人举起手向对面的朋友挥手,但还是继续往前走。对于我们来说一眼就能理解这些手势。
在不影响交通的情况下,安全地、无缝地应对这些挑战,需要自动驾驶汽车了解用于引导人类司机应对意外情况的常见手势,以及行人处理事情时的手势和肢体语言。人类对这些信号无需过多思考就会做出反应,但它们对仍在了解周围世界的计算机系统提出了挑战。
世界各地的自动驾驶汽车开发人员多年来一直致力于让自动驾驶汽车至少理解一些基本的手势,最初的重点是自行车手发出的信号。一般来说,开发人员依靠机器学习来提高车辆识别现实环境并了解如何应对的能力。在Cruise,我们从200多辆自动驾驶汽车中收集数据。在过去的七年里,这些汽车每年行驶数十万英里;在疫情爆发之前,它们昼夜不停地在路上行驶,只有在充电和定期维护时才会休息。我们的汽车学习速度很快,因为它们正在旧金山的丘陵街道上行驶,这是是美国最复杂的驾驶环境之一。
但我们意识到,我们的机器学习模型并不总是有足够的训练数据,因为我们的汽车在现实世界中体验重要手势的次数不够多。我们的汽车需要从不同的角度、不同的距离以及在不同的光照条件下识别出每一种情况——这些限制因素的组合产生了大量的可能性。如果我们仅仅依靠汽车的真实体验,我们将需要数年时间来获得这些事件的足够信息。
我们在Cruise找到了一个创造性的解决方案:人类手势的动作捕捉(mo-cap),这是一种游戏开发者用来创造角色的技术。为了获得模拟详细世界的专业技能,Cruise一直在雇佣游戏开发者,我们中的一些人承担起捕捉数据的挑战,教我们的车辆如何理解手势。
首先,我们的数据收集团队着手建立一份完整的清单,列出人们用手势与他人互动的方式,比如打出租车,走路时打电话,或者走到街上躲避人行道施工。我们从自动驾驶汽车可能会误解为指令本身的动作开始——例如,行人向朋友挥手。接着,我们又做了其他一些靠近车辆但不是针对它的手势,比如停车人员在车辆旁边的车道上挥手示意车辆开进车库,建筑工人举着暂时停车的牌子。
最终,我们提出了一个用手势传达的五个关键信息的初始列表:停、走、左转、右转,加上我们所说的“不”——也就是那些与过路车辆无关的常见动作,比如自拍或取走背包。我们使用了普遍接受的美国手势,假设汽车会在右边行驶。
当然,人们用来发送这些信息的手势并不是统一的,所以我们从一开始就知道我们的数据集必须包含远不止五个例子。到底有多少,我们不确定。
创建这个数据集需要使用动作捕捉技术。有两种类型:mo-cap系统-光学和非光学。光学版本的mo-cap分布在一个围绕舞台的大网格状结构上的照相机; 来自这些摄像机的视频流可用来三角定位演员全身服上的3D视觉标记。该系统有几种变体,可以产生非常详细的捕捉,包括那些面部表情。这种技术允许电影演员扮演非人类角色,比如2009年的电影《阿凡达》,也允许游戏行业记录运动员的动作,以开发以体育为主题的电子游戏。
然而,光学运动捕捉必须在工作室中使用复杂的多摄像头设置来完成。因此,Cruise选择了一种非光学的、基于传感器的动作捕捉版本。这项技术依赖于微机电系统(MEMS),因为携带方便,无线,不需要专门的工作室空间。这给了我们很大的灵活性,允许我们把它带出工作室,放到现实世界任何位置上。
我们的动作帽每一套都包含了19个传感器包,它们附着在身体的关键部位,包括头部、胸部、臀部、肩膀、上臂、前臂和腿部。每个包大约是一枚银币大小,包含一个加速计、一个陀螺仪和一个磁强计。这些设备都被连接到一条包含电池组、控制总线和Wi-Fi收音机的皮带上。传感器数据无线传输到一台运行专用软件的笔记本电脑上,让我们的工程师实时查看和评估数据。
我们从邮轮工程团队中招募了5名身体特征各异(包括身高、体重和性别的差异)的志愿者,让他们穿上实验服,并把他们带到相对没有电子干扰的地方。他们首先摆出t形(站直,双腿并拢,手臂伸向一侧)来校准动作控制系统。之后演员做了一个又一个手势。在7天的过程中,我们让这5位演员一遍又一遍的重复这些手势,每只手分别使用,有时也一起使用。我们还要求他们表达不同的强度。例如,对于在施工区内超速行驶的汽车发出紧急停车信号的手势,其强度可能会很高。对于指示车辆应当减速并逐渐停止的运动,强度将较低。最终我们得到了239个30秒的剪辑。
然后,我们的工程师准备数据,输入到机器学习模型中。首先,他们验证了所有的手势都被正确记录下来,没有额外噪音,没有旋转错误的传感器提供的错误数据。
然后工程师通过软件对每个手势序列进行运行,以确定序列中每一帧的关节位置和方向。由于这些位置最初是三维捕获,软件可以计算每个序列的多个二维透视图;该功能允许我们通过递增地旋转点来扩展我们的手势设置,以模拟10个不同的视点。我们创造了更多的变化,通过随机放下身体的不同点来模拟真实世界中某些东西隐藏了这些点,然后再一次递增地旋转剩下的点来创造不同的视角。
除了给我们提供了不同的人从不同的角度所做的各种各样的手势,动作捕捉也给我们提供了非常清晰的数据:人体姿势的骨骼结构是一致的,无论服装的风格、颜色或光线条件如何变化。这些干净的数据让我们更有效地训练我们的机器学习系统。
一旦我们的汽车接受了动作捕捉数据的训练,它们就能更好地驾驭城市驾驶呈现的各种场景。其中一个例子就是道路建设。旧金山总是有过多的建设项目在进行中,这意味着我们的汽车经常面对着指挥交通的工人。使用我们的手势识别系统,我们的汽车将能够在理解他们各自的手势的同时,安全地绕过多个工作人员。
Cruise使用来自动作捕捉系统的数据来生成简笔画和道路工人的动画,作为教会自动驾驶车辆识别人类手势的一部分。
举个例子,三名公路工人挡住了一辆自动驾驶汽车车道。其中一名工作人员负责指挥交通,另外两名工作人员负责评估道路损坏情况。指挥交通的工人手里拿着一个牌子;它有八条边,像个停车标志,但上面写着“慢行”。他用另一只手示意车辆向前走。为了安全通过十字路口,自动驾驶汽车将识别这个人是控制交通的人。车辆将正确地理解他的手势,即它应该转到另一条车道,向前行驶,并忽略在十字路口对面停车但似乎拥有路权的汽车。
在另一种情况下,我们的车辆会意识到,有人进入十字路口,无视闪烁的“禁止行走”标志,实际上是在指挥交通,而不是一个闯红灯的行人。汽车会注意到这个人是面对着它,就像准备过马路的人会做的那样。它会注意到这个人的一只手是抬起的,另一只手在移动,以便给车辆发出信号让它过马路。它甚至会记录武断的行为。所有这些使我们的汽车明白,即使在十字路口看到有人,它也可以继续向前行驶。
训练我们的自动驾驶汽车理解手势只是一个开始。这些系统必须能够探测到不仅仅是一个人的基本运动。我们正在继续测试我们的手势识别系统,使用我们的测试车辆在现实世界中行驶时也能收集视频。与此同时,我们已经开始训练我们的系统来理解人类搬运或推动其他物体的概念,比如自行车。这一点很重要,因为推自行车的人通常与骑自行车的人行为不同。
我们还计划扩大我们的数据集,以帮助我们的汽车更好地理解骑自行车的人的手势——例如,左手向上,肘部呈90度角,意味着骑自行车的人要右转;右臂直向外也有同样的意思。我们的汽车已经能识别骑自行车的人,并自动减速为他们腾出空间。然而,知道他们的手势意味着什么,可以让我们的汽车确保给骑自行车的人足够的空间来执行有信号的操作,而不会完全停下来,造成不必要的交通堵塞。(当然,我们的汽车仍然会注意那些没有表明意图的自行车手的意外转弯。)
在未来几年,自动驾驶汽车将改变我们的生活方式。机器学习在这方面已经帮助我们走了很长的路。但是创造性地使用像动作捕捉这样的技术可以让我们更快地教会我们的自动驾驶车队更好地在城市中共存,让我们的道路更加安全。
此外,我们还计划扩大数据集,帮助我们的汽车更好地理解骑车人的手势——例如,左手向上,肘部呈90度角,意味着骑自行车的人要右转;右臂直向外也有同样的意思。我们的汽车已经能识别骑车人,并自动减速。不管他们的手势意味着什么,我们的汽车将确保他们给骑车人足够的空间进行信号机动,而不会完全停下来,造成不必要的交通堵塞。当然,我们的汽车仍然会注意那些没有表明意图的自行车手的突然转弯。
在未来几年,自动驾驶汽车将改变我们的生活方式。机器学习在这方面已经帮助我们走了很长的路。但是创造性地使用像动作捕捉这样的技术可以让我们更快地教会自动驾驶如何在城市中更好地共存,让我们的道路更加安全。