ADAS深度学习应用的演进

作者:Gordon Cooper,Synopsys嵌入式视觉产品营销经理

嵌入式视觉解决方案将是汽车实现全自动驾驶的关键驱动因素。为汽车装配眼睛 – 采用多个摄像头和图像传感器 – 是第一步,而汽车解析来自这些图像的内容并且相应采取行动也至关重要。要做到这一点,嵌入式视觉处理器的硬件必须经过性能优化,同时实现低功耗和小体积,拥有对硬件进行高效编程的工具,并且拥有运行这些处理器的算法。

过去,汽车安全的重大改进(例如抗碎裂玻璃、三点式安全带、气囊)都是被动安全措施,目的是尽量减少事故造成的伤害。现在,我们的技术可主动帮助驾驶员第一时间避免碰撞。高级驾驶员辅助系统 (ADAS) 将帮助自动驾驶车辆成为现实。盲点侦测可以在驾驶员试图进入被占用车道时发出提醒。车道偏离报警和车道保持辅助可在车辆偏离车道时提醒驾驶员,并主动将车辆驶回原先车道。行人侦测可告知驾驶员注意车前或车后的行人,而自动紧急刹车通过刹车而避免事故或者行人受伤。通过将ADAS能力结合在一起,我们离自动驾驶车辆的目标越来越近 —所有这些都通过高性能视觉处理而实现。

目前,汽车制造商在汽车中配备了更多摄像头,如图1所示。前置摄像头可以侦测行人和其他障碍,并且采用适当的算法帮助驾驶员制动。后置摄像头 – 美国强制要求从2018年起的大多数新车配置后置摄像头 – 可以通过提醒驾驶员注意不在视野内的车后物体而挽救生命。驾驶舱内面向驾驶员的摄像头可以识别驾驶员分心,并发出提醒。最近,增加四到六个摄像头可以提供车辆周围360度的视图。

Figure 1: Cameras, enabled by high-performance vision processors, can "see" if objects are not in the expected place

图1:配备高性能视觉处理器的摄像头可以 “看到” 物体是否未在预期地点

用于对象检测的视觉处理器

由于驾驶员面向前方,前置摄像头似乎没有必要。其价值在于,前置摄像头在探测和提醒障碍时必须始终比驾驶员快。尽管ADAS系统的反应快于驾驶员,但它需要借助嵌入式视觉提供对视频流的实时分析,并知道采取哪种应对措施。

视觉处理器基于异构处理单元。这意味着编程任务被分配到具有不同强项的处理单元中(见图2)。用于传统32位标量处理器(易于编程开发的处理器)的大部分代码使用C或C++编写。向量DSP单元将执行大部分计算工作,因为该单元极大的指令字可对收到的每个图像的像素进行大量并行计算。

Figure 2: Vision processors are based on heterogeneous processing units, including scalar and Very Long Instruction Word (VLIW) vector DSP units

图2:视觉处理器基于异构处理单元,包括标量和极大指令字 (VLIW) 向量DSP单元

检测车前行人是广义的“物体检测”的一部分。对于要检测的每个物体,传统计算机视觉算法采用手工方式。检测算法的例子包括Viola-Jones和最近的定向梯度直方图 (HoG)。HOG算法通过查看图像内的边缘方向而试图描述物体。HOG直到2014年才被视为一种先进的行人检测算法。

通过深度学习而进行物体检测的兴起

尽管依据人类大脑建模的计算机系统 – 神经网络的概念已经出现了很长时间,但直到最近,半导体才实现了处理器的性能,使其成为可行的现实。2012年,卷积神经网络 (CNN) 进入每年一度的ImageNet竞赛表明,在图像分类方面,这种技术比传统计算机视觉算法在准确度上有重大改进。由于准确度更高,基于神经网络的图像分类、检测和识别技术得到了快速普及。

深度神经网络的重要突破是,对象检测不必进行手动编码。深度经网络允许各种特性自动从训练实例中学习。如果神经网络有一个输入和输出层,而且至少有一个隐含的中间层,它就被视为具有“深度”学习能力。每个节点从前一层中多个节点的加权输入结果进行计算。CNN是目前为视觉处理高效实施深度神经网络的最先进技术。CNN的效率更高,因为它们重复利用图像中的多个权重。


在嵌入式领域,早期的CNN采用GPU或者采用视觉处理器的向量DSP部分实现。然而,考察三个不同异构处理单元中执行的任务非常有帮助,如图3所示。

Figure 3: Adding a CNN engine to an embedded vision processor enables the system to learn through training

图3:向嵌入式视觉处理器添加CNN引擎可帮助系统通过训练而学习

CNN早期在硬件中的实施包括有限的乘累加 (MAC) 单元。例如,Synopsys的EV5x – 业内首个可编程、可配置的视觉处理器IP内核 – 实施了具有64个MAC的CNN引擎。EV5x的运行频率为500 MHz,可产生32 GMACs/s或64 GOPs/s的性能(乘法累加器在一个指令中执行两次运算)。这一性能不足以处理整个1MP (1280 x 1024) 帧或图像。然而,其处理能力足以在部分图像上执行CNN(比如64x64像素块)。要处理整个图像,行人检测需要分两个步骤进行。向量DSP将对收到的每个视频流中的图像执行计算密集型感兴趣区域 (ROI) 算法。ROI采用滑动窗口方法识别可能的行人候选对象(例如排除天空部分)。然后,这些“行人”图像块由CNN处理,确定是否真的是行人。实践证明,基于CNN的行人决策解决方案比HoG等算法的精确度更高,也许更重要的是,与通过写入新的手动算法而检测自行车而非行人相比,CNN更容易重新训练,从而用来查找自行车。

更大型的CNN用于全帧对象决策

随着嵌入式CNN变得更加强大,它们不再仅仅限于处理收到的图像。Synopsys最新的视觉处理器EV6x包含了一个配备880个MAC的CNN引擎 – 比前代产品的性能有了显著提高。该产品的运行频率为800MHz,可生成 (880 x .8) = 704 GMACs/s或大约1400 GOPs/s。这一性能足以使用CNN处理整个1MP图像。向量DSP对于预处理图像(例如重新格式化和金字塔处理)以及执行后处理任务仍然非常有用,例如非极大值抑制 (NMS)。如图4所示,EV6x仍为异构处理提供了标量、向量和CNN单元。它还带有多内核特性,可通过轻松扩展而配置多个视觉内核。

Figure 4: DesignWare EV6x Embedded Vision Processors include scalar, vector and CNN processing units for both pre- and post-processing

图4:DesignWare EV6x嵌入式视觉处理器包含用于预处理和后处理的标量、向量和CNN处理

处理整个图像帧的好处是CNN可以通过训练而检测多个对象。如今,CNN图形不仅仅用于寻找行人,而是可以通过训练而寻找自行车、其他机动车辆、货车等。采用HoG算法做到这一点需要针对每个新对象类型对算法进行手动编写。

训练和部署CNN

如前文所述,CNN不采用编程方式。它需要经过训练。Caffe或TensorFlow这样的深度学习框架将使用较大的图像数据集对CNN图形进行训练 – 通过多次迭代而对各个系数进行优化 – 从而检测图像中的具体特征。图5显示了CNN图形训练的关键组件,其中,训练阶段采用云端的GPU存储体,以提供所需的大量处理能力。

Figure 5: Components required for graph training

图5:图形训练所需的组件

部署 – 或“推理”–阶段在嵌入式系统上执行。如Synopsys的MetaWare EV Toolkit等开发工具采用训练阶段的32位浮点权重或系数输出,并扩展为定点格式。这样做的目标是采用最小的分辨率,因为这仍能产生与32位浮点输出相当的精确度。对于嵌入式解决方案来说,更少的乘累加位数意味着计算CNN所需的功耗更低,芯片面积更小(从而降低成本)。根据Synopsys的计算,如果不进行图形的重新训练,需要至少10位定点的格式来保证和32位浮点Caffe输出差不多的精度。

MetaWare EV工具采用权重和图形拓扑(CNN图形中存在的卷积,非线性,池化结构和全面互连层),并且会把这些映射到专用CNN引擎的硬件中。假设没有特殊图形层,CNN现在可通过“编程” 检测你想要识别的对象,只要这些内容CNN事先训练过。

为了保持小巧的体积,CNN引擎经过优化,可执行关键CNN特性,例如3x3和5x5矩阵相乘,但其优化程度不够,无法成为完全的硬件解决方案。通过编程保持灵活性非常重要。随着CNN的持续演进 – 例如新的分层技术或池化方法 – 向量DSP可以在视觉处理中扮演另一个重要角色。由于向量DSP和CNN引擎在Synopsys EV6x中密切耦合,根据需要从CNN对向量DSP分派任务变得非常简单。整合进MetaWare EV工具中的OpenVX运行环境保证了这些任务根据其他向量DSP处理要求而定时运行。向量DSP应该是很好地前瞻到了CNN的发展。

图6显示了嵌入式视觉处理器的输入和输出。来自车辆摄像头的流图被送到预先配置了图形算法和权重的CNN引擎中。CNN的输出是经过分类的图像内容。

Figure 6: Inputs and outputs of embedded vision processor

图6:嵌入式视觉处理器的输入和输出

场景细分和导航

截止到目前,我们已经讨论了可用于避免行人碰撞的(或者自行车、汽车或货车)对象分类 – 这是ADAS的一个例子。性能足够高的CNN也可用于场景细分 – 识别图像中的所有像素。比起识别特定像素,场景细分的目标主要是识别场景中对象类型间的界限。知道道路与场景中其他对象的相对关系对于车辆导航非常有帮助,并且使我们向自动驾驶的目标更近一步。

Figure 7: Scene segmentation identifies the boundaries between types of objects

图7:场景细分可识别对象类型间的界限

举例来说,DesignWare® EV61 CNN上运行的场景细分可采用11类对象(道路、天空、建筑物、行人等)对流式图像进行细分。通过使用五个通道的1920x1080图像作为输入,以800MHz的频率运行的CNN达到了18fps。如果没有足够的性能处理完整图像(帧)的多个事例,CNN就很难实现场景细分。

汽车视觉中视觉处理的未来要求

视觉处理解决方案会随着未来更高的处理性能需求而持续扩张。对于车辆中现有的摄像头,1MP图像是合理的分辨率。然而,车辆中的摄像头不断增多,对分辨率的需求从1MP增加到3MP,甚至是8MP摄像头。摄像头分辨率越高,系统就可以检测到更远处的对象。这样可以分析更多的像素位,以确定前方是否有物体,例如行人。摄像头帧率 (FPS) 也很重要。帧率越高,延时越短,而且停车距离也越短。对于以15 FPS运行的1MP RGB摄像头,需要处理的数量是1280x1024像素/帧 x 15帧/秒 x 三种颜色或者大约59M字节/秒。30fps的8MP图像需要处理3264x2448像素/帧 x 30帧/秒 x 三种颜色,或者大约720M字节/秒。

这种卓越的处理性能不能带来功耗或芯片面积不成比例的增加。汽车是属于持续性价格承压的消费品,更低的功耗对其意义重大。视觉处理器的架构必须针对功耗不断优化,并且还要保持其可编程性。

总结

随着汽车应用领域中对ADAS的要求持续提高,嵌入式视觉和深度学习技术也需要跟上发展步伐。对象检测已经从小规模识别发展为包含每个像素的全面场景识别,而且灵活性也变得和性能、功耗、面积同样重要。Synopsys的DesignWare EV6x嵌入式视觉处理器可通过全面编程而处理新的图形,并在极小的面积和功耗下提供了优秀的性能。