一种基于FPGA的二值神经网络实时面部情绪识别方法

文档序号:30520338发布日期:2022-06-25 04:42阅读:299来源:国知局
一种基于FPGA的二值神经网络实时面部情绪识别方法
一种基于fpga的二值神经网络实时面部情绪识别方法
技术领域
1.本发明属于情感计算、fpga领域异构计算领域,尤其涉及一种基于fpga的二值神经网络实时面部情绪识别方法。


背景技术:

2.如今,计算机在工业领域和日常生活中发挥着极其重要的作用,正迅速成为社会发展中不可或缺的一部分。因此,研究人类与计算机之间交互问题的必要性与日俱增。当然,人机交互的前提就是一台计算机能够准确快速的分析人的情绪与意图,并据此做出恰当的反应。在面部表情中流露出的各种情感是一种普遍有效的表达人类意图的方式。通过脸部所透露的情绪来分析人的意图被称为面部情绪识别技术,这项技术被应用于多个领域,如机器人技术、安全检测领域以及近期渐热的自闭症幼儿检测。
3.面部情绪技术按照对特征提取方式的不同,可以分为两类:
4.一类是传统手工特征方法实现情绪检测。该方法包括:图像预处理、特征提取和特征分类。
5.图像预处理阶段通过滤波和直方图均衡化去除无关信息,增强与人脸情绪相关的信息。特征提取阶段使用局部二值模式(local binary patterns,lbp)、主动形状模型(active shape models,asm)、哈尔特征模板(haar-like features)等特征提取方法从图像中提取人脸特征。表情分类阶段使用支持向量机(support vector machine,svm)、k最近邻(k-nearest neighbor,knn)或adaboost等分类器将提取的特征分类为对应的情感。然而,使用手工特征的方法需要单独分别设计一个合适的特征提取器和表情分类器,在进行系统化优化时,同样需要对特征提取器与特征分类器分别制定优化方案,因此,手工特征提取的方法无法实现两个阶段的同时优化。此外,该方法对外部因素比较敏感,外部因素(如姿态变化、遮挡和光照等)可能导致最终识别准确率的严重下降。
6.另一类是基于深度学习的方法,近年来随着硬件技术和大数据技术的突破性进展,深度学习因为在解决复杂问题时表现出的优异性能而越来越受欢迎。特别是在计算机视觉中,如图像分类和目标检测,基于卷积神经网络(convolutional neural networks,cnn)的方法具有更好的鲁棒性,此外,通过端到端训练,cnn可以一次性优化参数进而简化了优化方式。虽然在面部情绪识别的研究中,基于cnn的方法表现出比常规方法更高的性能,但由于网络的深层结构中具有多层数和百万个参数,例如vgg-16网络中含有1.4亿个32位浮点参数,整个网络需要占用500多兆的存储空间,进行1.6
×
10^10次浮点运算。如此庞大的参数和计算量导致cnn严重依赖gpu等高性能的硬件计算平台。然而在实际应用中通常均为计算资源有限的设备,例如,基于现场可编程门阵列(field programmable gate array,fpga)的嵌入式设备通常只有几千个计算单元,远不能处理常见深度模型中的数百万次浮点运算,复杂的模型与有限的计算资源之间的存在着严重的矛盾。这直接导致面部情绪检测在需要进行实时处理的应用中受到了极大限制,譬如高级驾驶辅助系统(advanced driving assistance system,adas),通过摄像头采集驾驶员面部信息后,传输
到嵌入式系统中进行处理,然而在实际应用中,嵌入式计算平台很难实时准确的判决出驾驶员的状态,进而无法正确的辅助驾驶;在婴儿情绪识别安抚系统中,图像识别系统识别婴儿的情绪后通过主控服务器启动语音安抚模块来安抚哭闹的婴儿,达到远程看护的效果,在此系统中对于婴儿情绪的实时检测尤为关键,如果不能实时传达婴儿情绪状况,那么远程看护便无法实现。
7.要解决部署cnn的问题,需要使用其他性能、能耗和成本更加适合的平台。对此,最合适的选择之一就是片上系统硬件平台(system on chip,soc),因为soc本身就是针对嵌入式应用而设计的,与gpu相比,soc消耗的能量更少,成本更少。此外,soc还有fpga的硬件组件与arm处理器综合交互能力,fpga上对cnn网络推理可进行有效加速,arm处理器可以灵活控制系统,综合达到对cnn网络加速的效果,因此基于fpga与arm相结合的方法实现实时识别面部情绪成为一个新的研究方向。


技术实现要素:

8.现有技术缺陷为复杂的模型与有限的计算资源之间的存在着严重的矛盾。具体包括两方面:
9.·
卷积神经网络的方法,因为计算参数多、计算量大的因素严重依赖于gpu等高性能的硬件计算平台;
10.·
当前硬件计算平台,如cpu、gpu等能耗大,成本高,面部情绪识别技术不利于移动端的部署、普及。
11.本发明的目的在于克服上述现有技术缺陷,提出了一种基于fpga的二值神经网络实时面部情绪识别方法。
12.为了实现上述目的,本发明提出了一种基于fpga的二值神经网络实时面部情绪识别方法,所述方法包括:
13.步骤1)对采集的视频图像进行预处理;
14.步骤2)基于harr-like特征模板,采用窗口滑动机制对预处理后图像中的人脸进行检测与裁剪,并截取包含人脸图像的部分,采用圆形lbp算子对截取图像提取局部二值信息;
15.步骤3)将提取的局部二值信息输入预先建立和训练好的面部情绪识别模型得到情绪识别结果;
16.所述面部情绪识别模型为二值神经网络,通过在fpga中采用同或门设计、位累计运算和阈值比较方法,进行前向推理,实现情绪识别。
17.作为上述方法的一种改进,所述步骤1)具体包括:
18.对采集的视频图像进行分帧处理,再对分帧后的图像进行对比度和亮度增强,并对图像尺寸进行等比例的放缩。
19.作为上述方法的一种改进,所述步骤2)具体包括:
20.基于harr-like特征模板,对预处理后的图像通过哈尔特征进行特征描述,并采用积分图加速哈尔特征的提取;
21.采用预设尺寸的滑动窗口在特征提取后的图像上依次滑过所有位置,进行人脸检测;并逐渐增大滑动窗口的尺寸到一定倍数,重复该步骤,获得各个尺寸下可能包含人脸的
检测窗口;
22.采用adaboost与分类器级联结构将不同尺寸的检测窗口进行筛选,消除不同尺寸滑动窗口圈定同一目标的可能性,并返回包含人脸窗口的坐标信息;
23.根据包含人脸窗口的坐标信息截取包含人脸图像的部分;
24.采用圆形lbp算子对截取图像提取局部二值信息。
25.作为上述方法的一种改进,所述面部情绪识别模型的输入为局部二值信息,输出为识别结果,所述面部情绪识别模型包括依次多个级联的block层、路由层、重排序层和多个级联的卷积层,其中,
26.所述多个级联block层,用于得到增强的特征图;其中每个block层均包括卷积层、批量归一化层和池化层;
27.所述重排序层,用于提取前端输入特征图并在其邻域内按位置进行抽样,相同位置的像素输出子图,输出的子图长宽与接下来级联的特征图长宽一致;
28.所述路由层,用于将重排序层输出的子图与经过多个级联的block层运算增强的特征图进行级联,并输入卷积层;
29.所述多个级联的卷积层,用于实现最终的情绪分类任务,其中每个卷积层结构相同,卷积核大小均为1
×
1。
30.作为上述方法的一种改进,所述方法还包括在上位机上进行的面部情绪识别模型的训练步骤;具体包括:
31.通过翻转、平移和裁剪的方法对fer2013人脸表情数据集的已知情绪标签的图片进行数据增强,得到增强后的数据集,并从中选取一定数量的图片建立训练集;
32.采用圆形lbp算子提取训练集中图像的局部二值信息进一步增强训练集图片中的有用信息;
33.将局部二值信息输入面部情绪识别模型,通过调整每层的配置信息,进行自监督学习,直到满足训练要求,得到训练好的面部情绪识别模型;
34.提取训练后的模型权重,并转化为适合硬件电路运行的二进制权重文件。
35.一种基于fpga的二值神经网络实时面部情绪识别系统,所述系统包括:部署在上位机上的图像预处理模块和部署在硬件计算平台的人脸检测模块、硬件推理模块和面部情绪识别模型,其中,
36.所述图像预处理模块,用于对采集的视频图像进行预处理;
37.所述人脸检测模块,用于对预处理后图像中的人脸进行检测与裁剪,并截取包含人脸图像的部分,采用圆形lbp算子对截取图像提取局部二值信息;
38.所述硬件推理模块,用于将提取的局部二值信息输入预先建立和训练好的面部情绪识别模型得到情绪识别结果;
39.所述面部情绪识别模型为二值神经网络,通过在fpga中采用同或门设计、位累计运算和阈值比较方法,进行前向推理,实现情绪识别。
40.作为上述系统的一种改进,所述硬件计算平台为集成了arm处理器和fpga的pynq板卡。
41.作为上述系统的一种改进,所述面部情绪识别模型的配置信息存储在arm处理器的内存区域,面部情绪识别模型部署在fpga。
42.作为上述系统的一种改进,所述硬件推理模块的处理过程具体包括:
43.从arm处理器的内存区域读取面部情绪识别模型的配置信息通过axi_lite总线发送至fpga的参数缓存模块pcm,将局部二值信息和情绪识别模型的权重参数通过axi_mem总线从动态随机存取存储器dram中传输至部署在fpga的pe处理阵列进行前向推理,将推理计算得到的情绪识别结果通过axi_mem总线传输至dram中;
44.所述pe处理阵列包括多个并行处理的pe处理单元,每个pe处理单元基于二值神经网络的点积运算规则,采用同或门xnor实现,由位累计运算统计参数中“1”的位数,存储至累加寄存器,并与设定的阈值进行无符号比较,得到该处理阵列的计算结果。
45.与现有技术相比,本发明的优势在于:
46.1、本发明基于二值神经网络设计系统,在模型权重二值化压缩的情况下,极大的推进了网络前向推理的速度,另外将网络部署于fpga开发板,利用可编程的硬件逻辑电路减少了网络的计算量,进一步加快了整个网络的运行速率,并保持着较好的精度;
47.2、在本发明中使用了传统机器学习与深度学习相结合的方法进行情绪识别,使用与圆形lbp算子处理输入图像,增强了图片的纹理特征,在后续网络推理中可以提取到更多的特征信息,提高了识别准确率;
48.3、在本发明中,对于pe处理阵列的优化设计,不仅降低了计算复杂度和硬件资源的消耗,而且避免了在推理过程中bn层的复杂计算,提高了系统性能;
49.4、本发明在二值神经网络中加入了路由层,将多层的输入特征图进行级联,作为下一层的输入特征图,通过多维度的信息的融合,增强特征图的信息量,进而提高识别的准确率;使用卷积层代替全连接层,使卷积网络可以在更大的输入图片上滑动,突破了此前对于输入图像尺寸的限制。
附图说明
50.图1是本发明的基于fpga的二值神经网络实时面部情绪识别方法流程图;
51.图2是人脸监测流程图;
52.图3是面部情绪识别模型结构图;
53.图4是fer2013数据集增强前后对比图,其中,图4(a)是增强前,图4(b)是增强后;
54.图5是实时面部情绪检测的硬件架构。
55.图6是pe处理阵列的数据通路。
具体实施方式
56.本发明是一种基于fpga的二值神经网络实时面部情绪识别的方法,fpga硬件计算平台为pynq-z1,该硬件计算平台分别搭载了fpga组件和arm处理器,本发明在实现过程中既能够通过fpga获得较高的计算性能,又能够依靠arm处理器提供完善的应用功能。本发明使用usb摄像头进行视频图像的实时采集,采集到的图像经过开发板发送到上位机进行预处理。本发明所述实时面部情绪识别方法总共分为四个模块:图像预处理模块、人脸检测模块、模型搭建训练模块、硬件推理模块。图像预处理模块主要对采集的图像进行增强,例如对比度,亮度等,并将图像按照二值神经网络的输入尺寸进行了等比例的放缩,人脸检测模块主要对图像中的人脸进行检测与裁剪,并进行人脸特征提取输入到硬件推理模块,硬件
推理模块通过加载训练大量数据生成的权重模型,对输入图像识别,最终输出结果;
57.图像预处理模块:usb摄像头采集到的视频图像进行分帧处理后,利用图像处理模块对每一帧采集图像进行预处理,具体包括图像对比度和亮度的增强、图片灰度化、图片位深度由8位转换为24位(真彩色)。
58.人脸检测模块:利用人脸检测模块对预处理后的图像进行人脸检测与截取。具体包括使用传统机器学习算法harr-like特征模板描述图片中每个窗口的特征,采用窗口滑动机制实现图片包含人脸窗口的框定并返回包含人脸窗口的坐标信息,进行根据返回的坐标信息截取包含人脸图片的部分。
59.模型搭建训练模块:在上位机软件端搭建二值神经网络,加载经过数据增强与圆形lbp算子进行处理后的人脸情绪数据集fer2013,训练并提取训练后的模型权重,最终将模型权重转化为适合硬件电路运行的二进制权重文件。
60.硬件推理模块:在硬件计算平台部署上述二值神经网络,并将二进制权重传输到板卡的片上内存,硬件端加载权重进行实时情绪识别的前向推理,并反馈实时的检测结果。
61.下面结合附图和实施例对本发明的技术方案进行详细的说明。
62.实施例1
63.如图1所示,本发明的实施例1提出了一种基于fpga的二值神经网络实时面部情绪识别方法,方法包括:
64.步骤1)对采集的视频图像进行预处理;
65.步骤2)基于harr-like特征模板,采用窗口滑动机制对预处理后图像中的人脸进行检测与裁剪,并截取包含人脸图像的部分,采用圆形lbp算子对截取图像提取局部二值信息;
66.步骤3)将提取的局部二值信息输入预先建立和训练好的面部情绪识别模型得到情绪识别结果;
67.所述面部情绪识别模型为二值神经网络,通过在fpga中采用同或门设计、位累计运算和阈值比较方法,进行前向推理,实现情绪识别。
68.本发明采用深度学习与传统机器学习相结合的图像处理技术应用于fpga硬件计算平台pynq-z1,实现了低功耗、高精度的实时面部情绪识别。根据实现的功能不同,具体包括:图像预处理、人脸检测、模型搭建训练和硬件推理。
69.1.图像预处理
70.pynq是xilinx公司推出的一种基于python语言和硬件库开发的板卡,该板卡提供了arm处理器与fpga可编程逻辑结合的单片解决方案,非常适合计算密集、功能丰富的嵌入式应用设计。本发明使用pynq-z1开发板搭载usb摄像头进行了实时的视频采集,将采集到的图像传输到上位机,上位机进而对识别到的每一帧图像进行预处理,包括图片对比度和亮度的增强、图片灰度化、图片位深度由8位转换为24位(真彩色)。
71.2.人脸检测
72.使用传统机器学习滑动窗口机制+级联分类器的方法,如图2所示。
73.对上述步骤预处理后的图片通过哈尔特征(haar-like features)进行特征描述,所谓haar特征,即将图像窗口取有白色和黑色两种矩形,并定义该窗口的特征值为白色矩形像素和减去黑色矩形像素和。haar特征值反映了图像的灰度变化情况,能够为人脸与非
人脸区分提供有效信息。由于提取haar特征时每次都需要计算局部区域内多个像素点灰度值之和,这样很大的限制了特征提取的速度,因此,选用积分图的方法加速haar的特征提取。积分图是将图像从起点开始到各个点所形成的矩形区域像素和作为一个数组保存在内存中,在haar特征提取的过程中,当需要某个区域的像素和时直接索引数组内的元素即可,从而减少了计算量,提高了特征提取的效率。图片的特征提取完成后,滑动窗口机制以基础检测尺寸,即训练时使用的32*32尺寸大小在预处理后的图片上依次滑过所有位置,在所有检测窗口判断是否为目标,并且逐渐增大检测窗口尺度(本发明设置每次扩大1.3倍)完成各个尺度下的图片检测。滑窗机制的方式将人脸检测问题简化为二分类问题的同时也带来了巨大的窗口识别数量,这样对特征分类方法的要求就会变高。常见的特征分类方法包括svm、k最近邻和adaboost等,而adaboost因其具有计算代价小、分类准确度高的特点常被选做分类任务。具体来说,adaboost是将多个分类器进行不同方式的级联,根据前端窗口的分类的难度动态调整了后面分类器的复杂程度,从而聚弱为强达到了以更小的计算代价换取较高的分类准确度。最终对所有可能包含的人脸的检测窗口进行合并,消除不同尺度滑窗圈定同一目标的可能性,并返回包含人脸窗口的坐标信息。
74.3.模型搭建训练
75.面部情绪识别搭建的主干网络为二值神经网络,二值神经网络(binary neural networks,bnn)是指仅使用1和-1两个值表示权重和激励的神经网络。相比于全精度网络,二值神经网络会显著降低网络对硬件计算平台内存的占用。此外,二值神经网络可以用同或门和位累加(popcount)这样简单的组合代替浮点乘加运算来实现卷积操作,从而减少了计算量,极大的方便了模型在资源受限设备上的部署。
76.本发明的网络整体框架是受vgg16与残差网络启发的卷积神经网络拓扑,网络模型中包括:卷积层、池化层、重排序层和路由层四类。具体网络结构如图3所示。
77.本发明使用的数据集为fer2013人脸表情数据集,原始数据集中包括35886张人脸表情图片,每张图片是由大小固定为48
×
48的灰度图像组成,共有7种表情。由于原始数据集存在数据分布不平衡、图片数量过少的问题,本发明通过翻转、平移和裁剪的方法进行数据增强,最终增强后的数据集包括76375张人脸表情图片,图片等比压缩为32
×
32尺寸大小,其中包含训练图片61100张、测试图片15275张。如图4(a)和图4(b)所示,数据集经过增强后,各个类别表情的图片数量趋于平衡,特别是“disgust”类别图片数量增加近20倍。通过增强的数据集训练面部情绪识别网络,显著的提高了网络的泛化能力,同时也使网络学习到平移不变性的特征,进而提高了最终的识别精度。
78.本发明在进行网络前向推理之前,使用圆形lbp算子提取输入图像的局部二值信息。lbp(local binary pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。圆形lbp算子公式描述如下:
[0079][0080]
其中(xc,yc)表示中心点的坐标,i(p)和i(c)分别表示中第p个采样点和中心点的灰度值,s(
·
)为门限函数。圆形lbp算子与原始lbp算子相比,使用半径为r的圆形邻域进行中心点像素值与相邻像素值的比较,并将比较得到的二进制数转换为表示该中心点纹理信息的lbp值。
[0081]
经过圆形lbp算子处理后可以有效的降低光照对输入图片的特征提取的影响,同时增强了图片的局部纹理特征,这样卷积神经网络可以提取更具有区分性的人脸特征,提高了最终的识别准确率。
[0082]
本发明在网络结构中添加了重排序层与路由层,其中,将卷积层、批量归一化层(batch normalization layer,bn)与池化层的组合称为“block”。重排序层的作用是提取前端输入特征图并在其邻域内按位置进行抽样,相同位置的像素输出子图,输出的子图长宽要与接下来级联的特征图长宽一致。路由层的作用是将上述子图与经过所有“block”运算后的特征图进行级联,作为下一层的输入特征图。通过多维特征图的级联,特征图的信息量会有较大提升,进而提高识别的准确率。
[0083]
4.硬件推理
[0084]
本发明设计了一种基于fpga的实时面部情绪识别方法,所使用的硬件架构为xilinx公司推出的基于python语言和硬件库开发的pynq板卡,该板卡的硬件架构采用了arm+fpga的设计方法,同时集成了arm处理器和可编程逻辑fpga。其中包含arm处理器的部分通常称为处理系统(processing system,ps),包含fpga的部分被称为可编程逻辑(programmable logic,pl)。ps与pl之间有多种通信方式,最常见的是基于总线协议接口(advanced extensible interface,axi),除此之外还可以通过时钟信号、中断等方式进行通信。图5展示了实时面部情绪检测的硬件架构:
[0085]
arm处理器通过axi_lite总线将配置信息发送到fpga的参数缓存模块pcm,通过axi_mem总线从动态随机存取存储器dram中将输入图像二值信息和权重参数传输到fpga的pe处理阵列进行推理计算,之后将计算得到的情绪识别结果通过axi_mem总线传输至dram中,最终,上位机端完成识别结果可视化。每个pe接收完全相同的控制信号和输入图像数据,但将输入数据与权重的不同部分同时进行乘累加操作。图6展示了pe处理阵列的数据通路:
[0086]
在pe处理阵列中,由于bnn独特的点积运算规则,采用同或门xnor实现,进而由popcount统计参数中“1”的位数,从而取代有符号位算数累加,将结果添加到累加寄存器中。之后,通过将卷积层的输出与预先设定的阈值进行无符号比较,大于等于阈值的输出作为最终输出激活。上述优化技术不仅降低了计算复杂度和硬件资源的消耗,而且避免了在推理过程中bn层的复杂计算,提高了系统性能。
[0087]
结果表明在硬件板卡实现面部情绪的实时推理,充分的利用了fpga的高并行计算能力和arm处理器灵活控制系统的优势,在保持原有精度不变的同时,明显的提高了识别速度,为实时面部情绪识别在资源有限的移动设备移植提供了有力的技术支撑。
[0088]
本发明的技术创新点:
[0089]
1、本发明采用深度学习与传统手工特征提取相结合的图像技术处理方法来解决面部情绪识别问题。其中,传统手工特征提取算法大大的弥补了深度学习中对图片局部特征提取不足的问题,对深度学习对抗光照等不利因素也有明显提升;
[0090]
2、本发明将上述面部情绪识别方法部署于fpga板卡,在保证面部情绪高准确率识别的同时,利用fpga并行计算的优势大大的降低了计算量,降低了功耗;
[0091]
3、本发明使用基于圆形lbp与二值神经网络的新方法来训练面部情绪识别网络,在网络输入的原始图像基础上加入了lbp特征信息,增强了图像的纹理信息与抗干扰性;
[0092]
4、本发明在二值神经网络中加入了路由层,将多层的输入特征图进行级联,作为下一层的输入特征图,通过多维度的信息的融合,增强特征图的信息量,进而提高识别的准确率;使用卷积层代替全连接层,使卷积网络可以在更大的输入图片上滑动,突破了此前对于输入图像尺寸的限制。
[0093]
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1