利用深度学习和计算机视觉进行面部表情分析

作者:Gordon Cooper,Synopsys嵌入式视觉产品营销经理 识别面部表情和情绪是人类社交初期阶段的一项基本且非常重要的技能。人类可以观察一个人的面部,并且快速识别常见的情绪:怒、喜、惊、厌、悲、恐。将这一技能传达给机器是一项复杂的任务。研究人员通过几十年的工程设计,试图编写出能够准确识别一个特征的计算机程序,但不得不反复重新开始,以识别出只有细微差别的特征。 如果不对机器进行编程,而是教会机器精确识别情绪,这样会如何呢? 深度学习技能对于降低计算机视觉识别和分类的错误率展现出了巨大的优势。在嵌入式系统中实施深度神经网络(见图1)有助于机器通过视觉解析面部表情,并达到类似人类的准确度。 

深度神经网络的简单例子

图1. 深度神经网络的简单例子

神经网络可通过训练而识别出模式,而且如果它拥有输入输出层以及至少一个隐含的中间层,则被认为具有“深度”识别能力。每个节点从上一层中的多个节点的加权输入值而计算出来。这些加权值可经过调整而执行特别的图像识别任务。这称为神经网络训练过程。

例如,为了训练深入神经网络识别出面带开心的照片,我们向其展示开心的图片作为输入层上的原始数据(图像像素)。由于知道结果是开心,网络会识别图片中的模式,并调整节点权重,最大限度减少开心类别图片的错误。每个显示出开心表情并带有注释的新图片都有助于优化图片权重。凭借充足输入信息的训练,网络可以摄入不带标记的图片,并且准确地分析和识别与开心表情相对应的模式。

深度神经网络需要大量的计算能力,用于计算所有这些互连节点的权重值。此外,数据内存和高效的数据移动也很重要。卷积神经网络 (CNN)(见图2所示)是当前针对视觉的深度神经网络中实现效率最高的。CNN之所以效率更高,原因是这些网络能够重复使用图片间的大量权重数据。它们利用数据的二维输入结构减少重复计算。

用于面部分析的卷积神经网络架构(或示意图)举例

图2. 用于面部分析的卷积神经网络架构(或示意图)举例

实施用于面部分析的CNN需要两个独特且互相独立的阶段。第一个是训练阶段。第二个是部署阶段。

训练阶段(见图3所示)需要一个深度学习框架 – 例如Caffe或TensorFlow – 它采用CPU和GPU进行训练计算,并提供框架使用知识。这些框架通常提供可用作起点的CNN图形范例。深度学习框架可对图形进行微调。要实现尽可能最佳的精确度,可以增加、移除或修改层次。

CNN训练阶段

图3. CNN训练阶段

在训练阶段的一个最大挑战是寻找标记正确的数据集,以对网络进行训练。深度网络的精确度非常依赖训练数据的分布和质量。面部分析需考虑的多个选项是来自面部表情识别挑战赛 (FREC) 的情感标注数据集和来自VicarVision (VV) 的多标注私有数据集。

部署阶段(见图4所示)针对实时嵌入式设计,可在嵌入式视觉处理器上实施,例如带有可编程CNN引擎的Synopsys DesignWare® EV6x嵌入式视觉处理器。嵌入式视觉处理器是平衡性能和小面积及更低功耗关系的最佳选择。

CNN部署阶段

图4. CNN部署阶段

标量单元和向量单元采用C和OpenCL C(用于实现向量化)进行编程,而CNN引擎不必手动编程。来自训练阶段的最终图形和权重(系数)可以传送到CNN映射工具中,而嵌入式视觉处理器的CNN引擎可以经过配置而随时用于执行面部分析。

从摄像头和图像传感器捕捉的图像或视频帧被送入嵌入式视觉处理器。在照明条件或者面部姿态有显著变化的识别场景中,CNN比较难以处理,因此,图像的预处理可以使面部更加统一。先进的嵌入式视觉处理器和CNN和异构架构允许CNN引擎对图像进行分类,向量单元会对下一个图像进行预处理 – 光线校正、图像缩放、平面旋转等,而标量单元则处理决策(即如何处理CNN检测结果)。

图像分辨率、帧率、图层数和预期精确度都要考虑所需的并行乘累加数量和性能要求。Synopsys带有CNN的EV6x嵌入式视觉处理器可采用28nm工艺技术以800MHz的速率运行,同时提供高达880 MAC的性能。

一旦CNN经过配置和训练而具备检测情感的能力,它就可以更轻松地进行重新配置,进而处理面部分析任务,例如确定年龄范围、识别性别或种族,并且识别发型或是否戴眼镜。

总结
嵌入式视觉处理器上运行的CNN开辟了视觉处理的新领域。很快,我们周围能够解析情感的电子设备将很常见,例如检测开心情绪的玩具,以及能够通过识别面部表情而确定学生理解情况的电子教师。深度学习、嵌入式视觉处理和高性能CNN的结合将很快将这一愿景变为现实。