CN112749626B - 一种面向dsp平台的快速人脸检测与识别方法 - Google Patents
一种面向dsp平台的快速人脸检测与识别方法 Download PDFInfo
- Publication number
- CN112749626B CN112749626B CN202011437158.7A CN202011437158A CN112749626B CN 112749626 B CN112749626 B CN 112749626B CN 202011437158 A CN202011437158 A CN 202011437158A CN 112749626 B CN112749626 B CN 112749626B
- Authority
- CN
- China
- Prior art keywords
- layer
- network
- face
- pred
- esti
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/10—Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
- G06V40/16—Human faces, e.g. facial parts, sketches or expressions
- G06V40/168—Feature extraction; Face representation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/94—Hardware or software architectures specially adapted for image or video understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/10—Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
- G06V40/16—Human faces, e.g. facial parts, sketches or expressions
- G06V40/172—Classification, e.g. identification
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Multimedia (AREA)
- Oral & Maxillofacial Surgery (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Evolutionary Computation (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Human Computer Interaction (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Image Analysis (AREA)
- Collating Specific Patterns (AREA)
Abstract
一种面向DSP平台的快速人脸检测与识别方法。本发明解决了上述问题,整个人脸检测与识别过程大致如下:由级联的P‑R‑O网络(即MTCNN)负责同时检测图像中人脸和关键特征点,根据最终输出的人脸框大小将源图像裁剪为3*299*299尺寸,并作为识别网络FACENET的输入,通过比较待测图像与其他图像在欧式空间中对应的512维的归一化特征向量的距离来判断人脸是否相似。
Description
技术领域:
本发明涉及人工智能、深度学习神经网络、图像处理、计算机视觉、边缘计算、人脸检测及识别等领域和方向。
背景技术:
在各种计算机视觉任务中,如场景理解、异常检测和语义分割等,卷积神经网络(CNN)取得较好的性能,随着其时空复杂度不断变大,CNN的推理准确度也获得较大提升。为满足实际应用对CNN正向传播性能低时延、高精度、实时性等要求,将CNN部署到边缘并行计算设备如GPU、DSP、FPGA、ASIC等已成为当前业界研究热点。
与其他生物特征(指纹、声音、步态等)相比,脸部具有更显著的个体差异性和独特性,在采集方面也具有一定优势,将人脸检测与识别技术用于自动身份验证是当前及未来的应用趋势,因此具有很强的学术研究意义。与R-CNN、YOLO、DeepFace等相比,采用轻量型多任务级联卷积神经网络MTCNN用于人脸检测和对齐,基于inception-resnet-v1深层架构的FACENET用于检测后的人脸识别,该组合不仅速度快且准确度较高,且易于在硬件平台上部署实现。
MTCNN由三个前后串联的网络组成:P-网络(Proposal Network)、R-网络(RefineNetwork)和O-网络(Output Network)。其中,P-网络用于对预构建的图像金字塔每层的图片进行初步特征提取,筛选并产生大量候选框。R-网络对所有候选框正向传播后得到对应的人脸概率,根据概率值和给定的置信度大小再执行非极大值抑制,去掉冗余人脸框。O-网络对剩余框进行最终的精筛,并对图中所有人脸输出各自的概率、矩形框信息、五个关键点位置。FACENET的主干架构是由多个inception-resnet模块和reduction模块堆叠组成的inception-resnet-v1,主要包括一个stem模块、5个inception-resnet-A模块、一个reduction-A模块,10个inception-resnet-B模块、1个reduction-B模块、5个inception-resnet-C模块,共有212层,该深层架构实现了多个卷积层和池化层的并行排列和并行计算。
前人技术:
专利文献[1]将MTCNN网络中的卷积层计算分解为逐深度卷积运算和逐点卷积运算,保证输出大小一致的情况下,计算量缩小为原来(K为卷积核尺寸),此外,采用从后往前遍历的方法删减了对检测准确度影响最小的卷积核,将P-网络、R-网络和O-网络的输出层修改为卷积层,可以有效降低网络运算量,保证检测准确率高的情况下提高运行速度。
专利文献[2]裁剪MTCNN网络输出的人脸框并作为FACENET的输入,并且将主干架构替换为轻量级人脸识别网络MobileFaceNet,该网络的主要特征是全局平均池化被替换为可分离全局深度卷积,bottlenecks作为主要模块,网络头部先进行快速下采样,尾部的卷积层早期降维,128维的特征向量是通过最后的1*1线性卷积层输出。无需比较图片差异,只要对比各图片特征向量间距离就可判断是否为同一人脸,大大加快识别速度和提高系统鲁棒性,实现one-shot-learning。
专利文献[3]利用改进后的MTCNN_detector算法对卡尔曼滤波器进行初始化和检测视频序列中的人脸,FACENET和二分类算法判断是否为目标人脸,其技术贡献有两方面:第一,可以对人脸检测框的面积上下限动态调节,从而减小误检概率;第二,FACENET输出的特征值与后台人脸库各特征值比较,若比值低于阈值,则将二分类输出的非目标人俩框与卡尔曼滤波器输出的人脸位置重合以进行视频合成,否则直接合成。整套流程克服并改善了对处于高曝光、多尺度和背景多变的亚洲人脸视频检测与识别。
其他专利文献,如[4][5][6][7]更侧重将MTCNN或FACENET应用到具体的场景,如摄像头下的活体检测、车辆识别中车脸对齐、安全帽佩戴的端到端检测、人脸识别的考勤系统等,采用的方法往往是通过将模型修剪以减少计算量,同时也考虑了待部署平台的硬件资源约束条件,折中推理速度和准确度,从而满足实际应用的需求。
上述现有技术方法存在如下不足:以卷积核为单位删减参数的方法过于粗糙[1],在一个3维卷积核中很少不存在对预测准确度有较大影响的参数,该修剪技术往往效率低下。MobileFaceNet结构过于复杂,最后输出128维度数据太少,很难完全表达人脸图片的所有显著特征[2]。采用卡尔曼滤波器和二分类算法确实能有效帮助MTCNN_detector+FACENET的人脸检测识别与视频合成[3],但增加了重合判断这一步骤,且整个流程仅适合亚洲人脸。专利[4][5][6][7]仅是神经网络的应用,并未优化网络结构和计算过程,往往需要折中和权衡速度与准确度。
参考文献:
[1]周继乐,储超群,吕成涛.一种基于改进的MTCNN模型人脸检测方法和系统:中国,201910925582.7[P],2019-12-27.
[2]邢军华,欧阳一村,曾志辉,贺涛,许文龙.人脸识别方法和人脸识别装置:中国,201910823883.9[P],2020-01-17.
[3]程家明,孔繁东,陈升亮.一种基于深度学习的视频兴趣区域人脸摘要方法、设备及其存储设备:中国,201911002439.7[P],2020-03-13.
[4]段翔,李凡平,石柱国.一种基于单摄像头的活体检测方法.201811562827.6[P],2019-05-28.
[5]周燕,曾凡智,邱腾达.基于侧脸多特征融合人脸识别的考勤方法、系统、设备及介质.201911004543.X[P],2020-02-28.
[6]韦顺军,苏浩,周泽南,闫敏,王琛,张晓玲,师君.一种基于卷积神经网络的安全帽实时检测方法.201910307891.8[P],2019-08-13.
[7]朱顺意,范继辉,李广立,瞿明军,刘雪健,周莉,巩志远,陈建学,杜来民,邓国超,白玥寅,张松,周雨晨.一种基于MTCNN车脸对齐方法.201910625985.X[P],2019-10-11.
发明内容:
本发明解决了上述问题,整个人脸检测与识别过程大致如下:由级联的P-R-O网络(即MTCNN)负责同时检测图像中人脸和关键特征点,根据最终输出的人脸框大小将源图像裁剪为3*299*299尺寸,并作为识别网络FACENET的输入,通过比较待测图像与其他图像在欧式空间中对应的512维的归一化特征向量的距离来判断人脸是否相似。
本发明技术方案:
一种面向DSP平台的快速人脸检测与识别方法,特征是,包括如下步骤:
网络修剪与构建步骤:截枝掉MTCNN中P-R网络的冗余的五个人脸关键点输出环节,O-网络整体不变。inception-resnet-v1作为FACENET的主干架构,微调尾部的网络层:先将末尾的softmax层替换为1*1*512尺寸的全连接层,再在其后添加一个L2嵌入层,从而将inception-resnet-v1输出的512维特征向量归一化。
模型训练与量化步骤:MTCNN、FACENET模型训练采用深度学习框架caffe或TensorFlow,分别在Wider Face数据集和CASIA WebFace数据集上训练和验证。将生成的.caffemodel或.ckpt文件转换成能被DSP平台直接读取的.txt格式,所有的权值数据从32bits浮点定点量化成16bits。
计算加速与优化步骤:在常规层的计算上,一方面将卷积转换为通用矩阵相乘,并行计算的RPU函数加速全连接层、softmax层等;另一方面使用结合了多线程技术的生产者-消费者模型加快卷积层-激活层-池化层的流水线计算。在输入特征图的处理上,定义缩放因子factor可以有规律地任意调整图像金字塔的层数和各层图像尺寸,防止盲目整定带来的计算开销,此外,所有涉及图像的裁剪均采用效果良好且易于实现的最近邻采样方法,使图像内容不扭曲变形和减少失真。针对于inception-resnet-v1推理,底层实现采用双向嵌套链表以辅助人脸识别过程。
人脸检测与识别步骤:待测图片读入DSP平台后,经过MTCNN中图像金字塔的多重缩放、级联的P-R-O网络的正向传播、候选窗的非极大值抑制和各输出窗的边框回归微调,最后输出预测到的最大概率的人脸框,再将其裁剪为3*299*299的尺寸并作为FACENET网络的输入。通过检测的人脸经过识别网络FACENET的两百多层(包括shortcut、batchnorm、concat、scale等层)的特征提取和计算,最后将网络整体输出的512维嵌入向量与后台人脸库中的各嵌入向量进行欧式距离比较,最近的且低于阈值的为具有同一身份的人脸,从而完成了one-shot-learning的人脸检测与识别的流程,即只须通过一个样本的学习就可识别出人脸身份而不必对模型重训练。
本发明创新及有益效果:
1)所有层的计算均采用16位定点量化技术代替网络连接的参数修剪,保证预测精度不显著下降的前提下减少对硬件平台内存的占用。
2)在人脸检测的测试阶段,P-网络和R-网络输出的5个人脸关键点信息并不会被O-网络采纳,故取消了P-R网络的五个人脸关键点输出,减少了冗余的数据处理过程。
4)为保证图像金字塔中图像缩放前后能等比例失真而不变形,采用效果良好且易于实现的最近邻采样。按照MTCNN输出的人脸框将源图像裁剪为适合FACENET输入的尺寸也是采用该方法。
5)将inception-resnet-v1作为FACENET的主干网络,修改并调整尾部的softmax层为1*1*512尺寸的全连接层,从而使输出的512维特征向量囊括人脸中的绝大多数重要信息,并在末尾接了一个L2嵌入层,归一化512维特征向量。
6)考虑到inception-resnet-v1层数较多,采用双向嵌套链表保存每一层的网络信息(如卷积核大小、步长、padding、激活类型、输入和输出特征图的地址和尺寸等),前一层计算完则立即释放该层保留的数据,节省存储资源。
7)将卷积计算转换为通用矩阵相乘(GEMM),此外,在卷积层-激活层-池化层计算时,采用多线程技术并建立了生产者-消费者模型加快计算过程。
8)在对具体的二维卷积点乘、softmax、PReLU激活等运算时,使用DSP平台提供的并行计算RPU函数,1个时钟周期内实现16个16bits的乘累加操作,进一步加速推理。
9)本发明人脸检测识别在训练和测试时不区分对象性别、人种、年龄、地区等,扩大了适用范围。
附图说明:
以下给出实施例附图
图1 MTCNN+FaceNet人脸检测与识别流程图
图2去掉五个人脸关键点输出的P-网络的整体架构
图3去掉五个人脸关键点输出的R-网络的整体架构
图4未修改的源O-网络的整体架构
图5原始的inception-resnet-v1网络结构
图6 L2嵌入层的结构和添加位置
图7图像金字塔缩放示意图
图8非极大值抑制效果(左右对应执行前后)
图9边框回归效果图对比(左右对应执行前后)
图10图像金字塔各层输出的候选框
图11经过R-网络筛选后输出的边框
图12 O-网络输出的边框和标定的五个人脸关键点
图13根据MTCNN输出框裁剪后的用于FACENET输入的人脸
图14 FACENET的底层数据结构——嵌套双向链表
图15待测图片对应的512维嵌入向量可视化结果
图16 3-D卷积映射为矩阵相乘过程
图17矩阵相乘过程中的分块计算
图18生产者-消费者模型示意图
图19生产者线程工作过程
图20消费者线程工作过程
图21卷积层有无采用多线程的生产者-消费者模型的cycle统计图
图22卷积计算RPU优化前后的cycle统计对比
图23 Prelu计算RPU优化前后的cycle统计对比
图24池化计算RPU优化前后的cycle统计对比
具体实施方式:
实施例1
实施例整个开发内容涉及两大部分:
1)软件层面的设计(即本发明技术方案核心):
包括调整了MTCNN网络(取消了子网络P网络和R网络的五个人脸关键点输出)、修改了FaceNet网络结构(替换并调整尾部的softmax层为1*1*512尺寸的全连接层并新添一个L2嵌入层)、将训练后的模型转换并存储为适合DSP平台读取的.txt文件格式、所有的权值和数据定点量化为16bit,自定义图像载入和裁剪以及金字塔缩放的方式(最近邻采样)、MTCNN正向传播(设计实现层融合和层分块、非极大值抑制、边框回归和微调等算法)、FaceNet正向传播(创新性提出四种不同的结构体和设计了一种数据结构以辅助图像计算传播)、应用各种优化技术至MTCNN和FaceNet的检测与识别过程中(映射3D卷积至矩阵相乘、多线程与生产者-消费者模型、RPU并行计算等)。
2)硬件层面的部署:
本实施例将上述优化后的网络和算法(即本发明技术方案核心)部署到华夏芯的SandBlaster3500(简称SB3500)DSP平台实现,使用的开发调试工具是SB3500提供的SandBlaster IDE,该平台包含3个DSP内核和1个ARM处理器,每个核上拥有4个硬件线程,工作频率高达600MHz,支持RPU向量操作,每个周期内可同时执行16个16-位操作或8个32-位乘加(MAC)操作,产生256比特结果。因此,可以满足多线程、RPU并行计算等算法的实现。前述提及的各种技术如模型转换并存储为.txt格式、定点量化为16bit、生产者-消费者模型、3D卷积映射为矩阵相乘等均是为更好地适配并利用DSP平台上的硬件资源,发挥其最大的优势。通过软件和硬件的配合最大程度的加快MTCNN+FaceNet的人脸检测与识别过程。
本发明的开发基于华夏芯公司的DSP芯片开发板,目的是在该平台上实现MTCNN与FaceNet的人工智能人脸检测及识别等功能。根据优化后的MTCNN+FACENET网络结构和定点化后的模型权值和源图像数据,依次完成两个卷积神经网络的正向传播过程以得到人脸检测及识别的结果。整套代码是在DSP集成开发环境—SandBlaster IDE中采用运行速度较快的标准C语言编写实现。在完成基本功能的基础上还对算法进行RPU和多线程并行计算等优化,从而提升算法运行速度和人脸识别性能。
实施例开发的详细流程(如图1)为:
1、模型训练、转换和定点量化:
1.1模型训练
首先在python语言环境下优化和调整上述两个卷积神经网络结构:
1、去掉P-网络和R-网络的脸部关键点位置输出,O-网络整体保持不变,如图2、图3、图4。
2、将FACENET主干架构的末尾的softmax层修改为1*1*512的全连接层,并在其后添加一个L2嵌入层。图5是作为FACENET主干部分的原始的inception-resnet-v1网络整体架构,该结构含有200多个层。图6指示了嵌入层的添加位置,图中最上层的用红色粗实线框出的模块即为嵌入层(embeddings),位于红色区域下部的矩形方框代表图5中的inception-resnet-v1网络。FaceNet网络正向传播的流向是从下往上的,表明网络的输入的入口在最下面,输出的出口在最上面。
之后,利用深度学习框架caffe进行模型训练,MTCNN训练的目标是最小化以下三方面的损失函数:人脸/非人脸分类、边框回归、脸部关键点定位。分别对应的损失函数是交叉熵、平方和和平方和。FACENET训练则是直接学习各个图片的512维特征向量的可分性,使图像的类内距离尽可能小于类间距离,最小化三元组损失。
人脸检测是一个分类任务,交叉熵损失函数为:
边框回归是一个回归任务,平方和损失函数是通过计算各个样本xi的欧氏距离得来:
调整过结构后MTCNN仅有O-网络才需最小化脸部关键点定位的平方和损失函数,定义为:
不同的样本xi用于训练不同的网络,所以并非每张输入图片都需要计算上述三种损失函数,引入如下指标指定样本xi需要计算的损失函数种类:
其中,N表示样本总数,任务重要性程度用αj表示,P-网络和R-网络训练时,αdet=1,αbox=0.5,而O-网络中,αdet=1,αbox=0.5,αlandmark=1。表示样本是否要计算某一类损失函数。
人脸检测网络MTCNN使用Wider Face数据集,以8:1:1的比例分配成训练集、验证集和测试集,再根据与的交并集的临界值0.3、0.4、0.65,将训练和验证集划分为无人脸样本集(0-0.3)、有人脸样本集(0.65-1)、部分人脸样本集(0.4-0.65)和已标定关键点的人脸样本集(0.3-0.4),比例分别为3:2:1:4,根据公式1-4对样本图片进行训练,迭代五千次之后算法趋于收敛,准确率高于90%。
FACENET的训练只有一个目标函数,如下:
对于任意一张样本图片与其同属一个身份的样本为不属于同一身份的样本为 即为三元组,网络学习的任务有二:其一,使左边的二范数(即类内距离)不断下降;其二,使右边的二范数(即类间距离)不断上升。最后,通过梯度下降法使类间距离大于类内距离,损失函数下降。α是一常量。
FACENET模型训练使用CASIA-WebFace数据集,对每一张图片选择合适的正样本和负样本组成三元组(图片到正样本的欧氏距离大于负样本的),根据公式5迭代五万次之后得到了准确率高于95%的模型。
1.2模型转换
虽然在python语言环境下获取到网络模型.caffemodel或.ckpt,文件,但该模型文件并不能直接被DSP使用(即便直接读取,解析过程耗时长),需要调用相关库将其转换为可读的.txt文件,.caffemodel格式和.ckpt格式的模型对权值存储的方式不同,需要调用不同的python函数。权值在.txt文件中的存储方式为:对于卷积层,先遍历宽的维度,再遍历高的维度,据此,将所有卷积核的所有通道平面依次顺序展开;对于全连接层,则是将其视为一个宽和高均为1的特殊卷积层,其对应的全连接权值核的宽高也为1;其他层的参数较少,不必展开。之后,按照所处层的编号,按顺序依次将所有权值存成类似一维数组的形式。具体模型转换的方式为:第l-1层权值写入.txt文件结束后,才可开始读写l层权值;其中,只有等第m-1个卷积核写入完,第m个卷积核才可开始操作;具体到某一个卷积核的存储则为,前面第n-1个卷积核通道平面写完,才可开始第n个平面的读或写;针对于某一个卷积核通道平面,其在.txt中的存放规则是,按照先宽后高的顺序,用一个嵌套循环将平面中的权值都写成一维的形式,从而实现了网络所有参数按顺序依次存储。进一步地,还可将参数按照层的编号和参数类型(偏置/权重)等划分为多个.txt参数文件,DSP平台计算到某一层再读取该层对应的权值.txt文件,进一步缓解了平台上内存压力和减少权值读取时间。
1.3模型定点量化
FACENET模型将近152Mb,给DSP平台存储造成巨大压力。考虑到现有卷积神经网络中的输入输出特征图数据均采用32位浮点数表示,以及卷积层和全连接层存在大量冗余连接,使用低位宽的定点数对网络正向推理的结果影响不大,还可以大幅度减少对DSP平台内存的占用和提高运行速度。因此,本项目采用位宽为16的Q13定点表示法,其中,符号占一位,整数占2位,小数占13位,为防止预测精度过度下降,在对网络模型和源图像数据量化后进行了重训练。具体做法为:首先按照float32全精度正常训练两个神经网络模型,之后将训练后的权值和原始待输入的图片数据按照Q13定点量化为16位,重新训练和微调模型。
2图片数据的预处理
2.1图片数据的载入
本项目支持.bmp图像的输入和解析:用fopen_s()函数打开图像后,先判断前两个字节字段值是否为“BM”,不是则返回出错信息。否则,向后偏移10个字节,保存该位置开始的4字节数值,此为位图文件头到位图数据部分的字节长度。之后,继续后移8字节,分两次,每次连续读取4字节信息,从而得到bmp图像的宽度和高度。移动到数据头位置后,先以“w+”模式创建三个.txt文件,用来存储R、G、B三个通道的像素值;然后,按照以下读取方式:从上往下读,从左往右读,先B、再G、再R;最后将图片三个通道的像素值写入三个文件中。在网络开始推理前,使用3个一维的malloc()函数将三个文件中的像素值构造成3个一维向量。
2.2图片数据的裁剪
当图像的宽高不一致时,先对图像进行调整,考虑到实际人脸处于图片中部的概率较大和减少图片处理步骤,故采用如下方法:若宽大于高,则去掉右边多余的像素列,否则裁掉底部的像素行。后续本文以裁剪成3*512*512的lena图片作为待测试图像。
2.3图像金字塔
定义图像缩放因子factor和最小/最大输入尺寸INPUT_SIZE,只要缩放后图像尺寸(高或宽)大于或小于INPUT_SIZE,则继续将图像缩小或放大factor倍。其中,缩放因子factor非固定值,可以通过修改接口函数中的参数值来改变factor的大小。对于时间敏感型的应用,一般factor值较小,而针对更注重检测准确率的应用,往往选用较大值的factor。factor大于或小于1,表示放大或缩小源图像。考虑到各参数的动态性和提高设计的灵活性,采用单链表的形式保存各个缩小或放大后的图片尺寸与原图片的比例值。源输入图像尺寸越大或越小,可被缩小或放大的次数越多,图像金字塔层数越多,单链表的长度随之变长,实现按需申请内存。如图7为图像金字塔缩放示意图。示例的lena图像采用参数factor=0.709、INPUT_SIZE=12。
图像尺寸的缩小是宽和高维度上的像素个数等比例的减少,必然导致分辨率的下降,为了使图像内容不扭曲变形和减少失真,使用易于实现且效果优异的最近邻采样方法实现图像的减小。方法如下:先定义scale变量用于保存缩小前后图像尺寸比值,再依次遍历R,G,B三通道各平面中的所有像素。以R通道平面为例,将缩小后图像的宽和高作为嵌套循环的内外累加次数的上限值,每迭代一次,在平面上向右或向下前进1*scale,并保留该处的像素作为该通道平面的一个采样值,然后进行归一化(即先减去127.5,再乘以0.0078123)。以最近邻采样得来的缩小的通道平面仍然用一维数组保存。相比于其他采样方法,最近邻耗时更短。
3、卷积神经网络正向传播
3.1 MTCNN正向预测过程
本文将三个小网络的主干结构模块化为多个可重复块:由卷积层、激活层和最大池化层组成的BasicConvPreluPool,由卷积层、激活层组成的BasicConvPrelu,由全连接层和softmax层组成的BasicFcSoftmax,由全连接层和激活层组成的BasicFcPrelu,仅有卷积层的BasicConv,仅有softmax的BasicSoftmax,仅有全连接层的BasicFc。通过多次调用上述可重复块可以构建P-网络、R-网络和O-网络。将多个层组建成一个可重复块,相当于融合成一个层,可大大降低计算复杂度,在重复块内相当于流水线执行,不用重复调用子函数,减少堆内存申请和压栈入栈的时间开销。
如下是BasicConvReluPool的计算过程:
在执行BasicConvReluPool可重复块(卷积层、激活层、最大池化层)前,先打开权值的.txt文件,使用由malloc()函数构建的read_3D()和read_1D()函数读入m*n*(k*k)个权重、m个偏置和m个Prelu参数(m,n,k分别表示卷积核个数、输入图像平面数和核尺寸)。之后,执行该三层的计算。本申请执行可重复块BasicConvReluPool采用的方法如下:以其中一个卷积核与输入特征图的计算过程为例,该卷积核的各个通道先与输入特征图的每一特征平面的所有卷积窗口进行二维卷积点乘,得到每一平面计算后的中间结果,该中间结果仍然是多个平面,中间结果平面数等于输入图像的平面数;之后,遍历中间结果平面的每一个通道,将各通道相同位置的值与对应该卷积核的偏置累加后用Prelu函数激活;最后,将激活后的各个中间结果平面上的每一池化窗口取最大值,组成BasicConvReluPool可重复块的输出特征图的一个平面。其他卷积核重复上述过程,从而,得到完整的输出特征图,特征图平面数等于卷积核个数。本申请设计的计算方法将卷积层、激活层和池化层融合为同一层,卷积核遍历结束,则第一个可重复块输出结果,有效减少了运算次数。
BasicConvRelu、BasicConv和BasicFc计算过程类似。
而BasicFcSoftmax的计算过程为:先将上层输出存储为一维数组形式,本层各全连接权值核同样拉伸为长度与上层输出个数相等的一维向量,采用嵌套循环分别遍历本层各个一维权值向量(外循环)和上层输出的一维数组元素(内循环)。外循环迭代到第i个全连接权值核对应的一维权值向量,内循环中实现将上层的一维数组各元素与一维权值向量中各元素进行乘累加,内循环结束后,再加上本全连接权值核对应的偏置值,从而得到全连接层的一个输出。在内循环外,随外循环的迭代依次计算全连接层的各个输出的指数值(作为exp()函数的输入得到的输出)并累加,外循环结束后,得到总和sum。最后,再利用一个小循环,全连接层的各个输出的指数值除以总和sum,得到softmax层的输出。因此,将全连接层与Softmax层融合计算,可减少至少一个循环和一个函数的调用开销。
BasicFcPrelu与BasicSoftmax的计算过程和达到的优化效果与BasicFcSoftmax模块类似。
P-网络的结构如图2所示:
1、由conv1+PReLU1+pool1组成第一个可重复块BasicConvPreluPool,依次为卷积层、激活层和池化层。3*12*12尺寸的源图像经过10个大小为3*3*3、步长为1的卷积核,再被参数化修正线性单元PReLU激活,最后通过尺寸为2*2、步长为2的最大池化运算,生成10个大小为5*5的输出特征图。
2、conv2+PReLU2为第二个可重复块BasicConvPrelu,依次为卷积层、激活层。上述输出的特征图经过16个10*3*3、步长为1的卷积核,输出值再被PReLU激活,生成16个大小为3*3的输出特征图。
3、conv3+PReLU3为第三个可重复块BasicConvPrelu,依次为卷积层、激活层。上述输出的特征图经过32个16*3*3、步长为1的卷积核,输出值再被PReLU激活,生成32个大小为1*1的输出特征图。
4、conv4-1、conv4-2和prob1依次为卷积层、卷积层和softmax层,通过调用BasicConv和BasicSoftmax实现,为第四、五、六个可重复块。上述输出的特征图经过2个32*1*1、步长为1的卷积核(对应conv4-1),再通过最后的softmax层生成两个表示有无人脸的概率值。第三个可重复块的输出特征图经过4个32*1*1、步长为1的卷积核(对应conv4-2),输出4个值,表示P-网络预测的人脸框的位置。
由于P-网络不含有全连接层,故可接受任意尺寸的图像。将图像金字塔中宽高为h=w>=12的图片作为P-网络输入,prob1输出数据的个数为2*(h/2-5)*(w/2-5),conv4-2输出的个数为4*(h/2-5)*(w/2-5)。其中(h/2-5)*(w/2-5)表示P-网络预测的框的个数,prob1和conv4-2输出的数据分别表示各个框中人脸概率和人脸框位置。
当金字塔中所有尺寸的图像经过P-网络的正向传播,可以获得大量候选人脸框。首先丢弃概率值低于0.6的框,之后对剩余框执行非极大值抑制,具体做法如下:将剩余框按照概率值从大到小排列,从后往前遍历各个框并将其与最前部的人脸概率值最大的框计算交并比(两个候选框重叠的面积与两框并集面积的比值),交并比高于0.5,则舍弃该框,否则,继续遍历下一个候选框。每遍历完一轮,从队列中取出并保存最前部的人脸框,之后,再开启下一轮的遍历。经过多轮次的遍历可以筛去许多不符合要求的候选边框。如图8是金字塔中某层图像经过P-网络后执行非极大值抑制前后的候选框数量对比,由51个变为了33个。
P-网络输出的每个人脸框均有两个标签i和j,表示其在所有原始候选框中的定位,即横纵索引值。根据如下公式得到候选框的估算的真实边框位置:
esti_x=round((stride*j+1)/scale) (6)
esti_y=round((stride*i+1)/scale) (7)
esti_h=round((stride*j+cell_size)/scale) (8)
esti_w=round((stride*i+cell_size)/scale) (9)
其中,stride=2,cell_size=12。
之后,执行边框回归对初筛过后的剩余框的位置微调,方法如下:首先通过预测的和估算真实的人脸框位置(pred_x,pred_y,pred_h,pred_w)和(esti_x,esti_y,esti_h,esti_w),得到对应的边框的左下角和右上角坐标,分别为(pred_x1,pred_y1,pred_x2,pred_y2),(esti_x1,esti_y1,esti_x2,esti_y2),统一表示为,
x1=x-1/2*w (10)
y1=y-1/2*h (11)
x2=x+1/2*w (12)
y1=y+1/2*h (13)
之后,采用如下等式微调预测的人脸框得到更准确的回归边框:
reg_x1=pred_x1+esti_y1*|pred_x2-pred_x1+1| (14)
reg_y1=pred_y1+esti_x1*|pred_y2-pred_y1+1| (15)
reg_x2=pred_x2+esti_y2*|pred_x2-pred_x1+1| (16)
reg_y2=pred_y2+esti_x2*|pred_y2-pred_y1+1| (17)
进一步地,对微调后的人脸框进行后处理:1)保持中心点不变,将所有框按照短边为基准设置为正方形。2)对回归整定后的人脸框越界检查,若该框超过了源图像的上下左右边界,则将框拉回至边界位置。如图9是金字塔中某层图像经过P-网络后有无执行边框回归的候选框的位置和大小变化对比,预测边框得到了微调。
Lena图片经过图像金字塔依次被输入到P-网络后输出的边框如图10所示。
R-网络和O-网络的推理过程和P-网络类似,如下仅大概介绍后两个网络:
其中,R-网络:使用最近邻采样方法将所有初筛过后的候选人脸框裁剪为3*24*24大小并依次作为R-网络的输入。每一个框均需经过两个BasicConvPreluPool、一个BasicConvPrelu和一个BasicFcPrelu,生成128个大小为1*1的输出特征图,最后的fc5+prob1(通过调用BasicFc和BasicSoftmax实现)和fc6(通过调用BasicFc实现)会对每一个候选框输出两个值(表示有无人脸的概率)和四个值(预测的人脸框的位置),如图3。同样地,先对人脸概率值低于0.7的框直接舍弃,再根据R-网络的输出结果对所有候选框执行非极大值抑制(交并比值设为0.4)和边框回归,进一步筛选掉不符合要求的人脸框。
经过R-网络的预测和精筛,剩余人脸框数量锐减。
其中,O-网络:将余下的人脸框最近邻采样至3*48*48并依次作为O-网络的输入。每一个框均需经过三个BasicConvPreluPool、一个BasicConvPrelu和一个BasicFcPrelu(drop层仅用于训练阶段),生成256个大小为1*1的输出特征图,最后的fc6+prob1通过调用BasicFc和BasicSoftmax实现)、fc7(通过调用BasicFc实现)和fc8(通过调用BasicFc实现)会对每一个候选框输出两个值(表示有无人脸的概率)、四个值(预测的人脸框的位置)和十个值(五个脸部关键点的索引坐标),如图4。同样地,先对人脸概率值低于0.7的框直接舍弃,再根据O-网络的输出结果对所有候选框执行非极大值抑制(交并比值设为0.6)和边框回归,进一步筛选掉不符合要求的人脸框。最后,图中每个人脸只会有一个框。
R-网络和O-网络输出的人脸框结果如图11和图12。
3.2 FaceNet正向预测过程
以inception-resnet-v1为主干结构的FACENET接受3*299*299大小的图像输入,故首先用效率较高的最近邻采样算法裁剪MTCNN输出的人脸框,见图13。原始的inception-resnet-v1网络共有212层,整体结构如图5,一些特殊层如route层、shortcut层等并未显式地表示出来。输入图片经过由常规的卷积层和池化层组成的stem模块的计算,得到尺寸为256*35*35的中间特征图。之后依次通过5*inception-resnet-A模块、reduction-A模块、10*inception-resnet-B模块、reduction-B模块、5*inception-resnet-C模块、平均池化核softmax层的正向传播。其中,inception-resnet模块是在残差块resnet的基础上增加多个并行支路得来的,模块内涉及分支的合并,每个分支路径中都有0个或多个顺序连接的卷积层或池化层,之所以采用不对称卷积核结构(如1*3,7*1等),是为了降低卷积计算量的同时特征信息的损失能够足够小,而对称的1*1尺寸的卷积核可以用来降维和增加非线性。此外,为保证能级联多个相同类型的inception-resnet模块,每种inception-resnet模块的输入维度和输出维度必须相同,比如inception-resnet-B的输入为896*17*17,输出也为896*17*17,这是通过在每个模块内的尾端添加1*1的卷积核操作实现的。Reduction-A和Reduction-B模块分别含有3个和4个并行分支,每个分支路径中都有至少一个卷积层或池化层,里面均只含有规则的1*1或3*3的卷积核或最大池化核,输入维度和输出维度不同,Reduction-A的输入和输出尺寸为256*35*35和896*17*17,而Reduction-A的输入和输出尺寸为896*17*17和1792*8*8,可见,Reduction模块的主要作用是减小每张特征图面积,从而达到降低整体计算的时空开销的目的。
本申请定义了四种不同的结构体和设计了一种数据结构以辅助图像在FACENET上高效率地进行正向传播,具体内容如下:
1)、第一个结构体kvp,指针key和val用于指向某一个参数的名称和值,名称和值均存储成字符串常量形式,其定义为
2)、第二个结构体node,是一个双向链表的节点,指针val指向存储某一网络层(如卷积层、shortcut层等)的其中一个参数(如步长、是否批归一化等)的名称和值的地址(即指向结构体kvp的变量),指针next和prev指向前后节点的位置,以方便网络计算到本层时读取本层的所有参数(仅需移动指向双向链表的指针),其定义为
3)、第三个结构体list,其中,指针front和back分别指向上述双向链表的头尾节点,inception-resnet-v1网络中每一层都对应一个list的结构体变量,指向的双向链表的各个节点存储了本层的所有参数,整型变量size表示网络层数或某层的参数个数,其定义为
4)、第四个结构体section,type用于存储本层名称,options指向每一层的list结构体变量,其定义为
为了能在减少底层数据结构复杂度的同时,inception-resnet-v1网络正向推理时能依次访问到各层的参数,在不定义额外的数据结构的前提下(底层数据结构越多,访问数据和执行时间越长),赋予第二个结构体node另外的含义和作用:每一个node的变量还可用于代表每一网络层,其中的next和prev指针指向前一个和后一个网络层,遍历双向链表相当于依次遍历inception-resnet-v1的所有层,空指针val可随时强制类型转换为指向本层结构体section的变量的指针类型。
由此可见,要想用一种数据结构实现inception-resnet-v1网络的全流程计算,至少需要L+1条双向链表相互配合,L是网络的层数。本申请采用的是嵌套的双向链表结构:取其中一个作为主链表,主链表的各个节点即对应相应位置的网络层,每一个网络层均有一个专属的双向链表,故一共L个次级链表,次链表每一个节点都指向本层的一个参数的位置。嵌套双向链表结构如图14所示。
采用图14的结构读取inception-resnet-v1的网络结构配置文件.prototxt后,网络推理需要依次调用各层的正向传播计算函数,故先设计一个嵌套结构体network,定义是
NetType是由一些基本类型(如int,float等)组成,用来存储网络整体的一些信息,包括批大小、源图像和输出结果存放位置、输入宽高通道数大小、网络输出尺寸、是否裁剪图像、迭代次数等,指针变量layers用于指向结构体layer的数组,数组的每一元素均是layer型的变量,长度为网络的总层数。而子结构体layer类型为
layer结构体的函数指针forward代表本层正向传播的计算函数的位置,网络运行到本层时直接读取forward的值即可以调用本层的计算函数(如卷积计算、池化计算、正则化计算等),在计算过程中会用到LayerType存储的一些数据。LayerType主要由其他自定义类型构成,保存本层的一些特有的信息,例如层类型、使用何种激活函数、是否正则化、本层输入和输出特征图大小和尺寸、权重与偏置的数量和位置、步长与padding大小、是否是softmax层、当前状态、缩放因子与平移因子的数值、滑动均值与滑动方差的大小等,本申请支持的层类型有8种,分别是:卷积层、全连接层、正则化层、批归一化层、最大池化层、平均池化层、route层、shortcut层。
各层网络在计算前会先读入本层所需要的参数,并将其赋值给LayerType类型中的对应的变量。以批归一化层BATCHNORM为例,本申请会先判断该层类型,再调用load_batchnorm_weights()函数(对于卷积层就是load_convolutional_weights()函数,其它层以此类推)。因为预先已完成模型转换,网络参数并不是统一存储为一个.caffemodel文件,而是分别存为已量化的.txt文件,每个网络层至少对应一个.txt文件。在load_batchnorm_weights()函数内,会实现将.txt文件中的缩放因子scales、滑动均值rolling_mean和滑动方差rolling_variance读到BATCHNORM层的layer结构体中。
按照上述技术方案,在结构体network内,通过依次调用结构体layer的数组中每一元素(即每一层)的正向传播计算函数,完成inception-resnet-v1网络的推理预测。
值得注意的是,传统的inception-resnet-v1末尾是softmax层,输出的是1000个类别的概率。而本申请的目的是实现one-shot-learning的人脸识别,即只需通过一个样本进行学习,就能够提取出该样本对应的特征向量和完成比较判断。因此修改了inception-resnet-v1的网络结构,将末端的softmax层替换为全连接层,输出512维的向量。比起专利文献[1]只输出128个数据,本方法能够学习到给定图像的更多特征,更全面代表人脸。
每一张图片由于1)人脸在整张图片中占比不同;2)背景、颜色、曝光、遮挡、肤色等导致人脸框区域的像素值差异大;3)同一身份的两张人脸或同一人脸的不同拍摄角度导致网络输出的512维向量数值变化大;等等原因,仅通过比较原始输出的512维特征向量很难比较两张图片的相似性,以及难以确定阈值大小。
为解决上述问题,本申请采用的方法是:将inception-resnet-v1网络输出的512位特征归一化,使归一化后的特征向量满足||f(x)||2=1,即映射到一个超球面上。每一张人脸图片在该高维空间中对应一点,因此将待测图片所处的空间位置与后台人脸数据库中的各个图像对应的点位一一比较,选择最近的点位,若相距低于阈值(可提前根据实际情况设定或调整),表示为同一身份的人脸,输出该身份ID。否则,报错表示找不到待测人脸的ID。图15为一张待测图片lena的512维嵌入向量(归一化后的特征向量)可视化的结果。
4优化技术
4.1映射3D卷积至矩阵相乘
MTCNN的三个级联的小网络层数均较浅且卷积层的尺寸和通道数较小,将卷积的计算过程转换成矩阵相乘并不会带来较大的性能提升,但inception-resnet-v1网络不同,纯卷积层就有132个,每个卷积层涉及的卷积核个数多,优化卷积算子能极大加快运行速度。
假设输出特征图尺寸为M*Rout*Cout,一个卷积核大小为N*K*K,故输入特征图行列像素数分别为Rin=(Rout-1)×S+K,Cin=(Cout-1)×S+K,S为步长。对输入特征图平铺和重排序可以将3-D卷积映射为通用矩阵乘法,如图16。适当多占用内存可以带来推理时间的快速下降,本方法适用于较大型网络。核心操作是将每个三维卷积核或三维输入卷积窗口压平并展开为一列或一行时,按照高宽通道的顺序存储在运行内存中。因此,该层所有卷积核被转变为(N×K×K)×M的二维矩阵,其中,M是卷积核数量,N×K×K是单个核体积。由于权值按顺序读入内存,故可在不将任何数据复制到新位置的情况下就完成重排列过程。对于输入特征图,与权值内核相乘的卷积窗口共有Rout×Cout个,每个窗口区域同样按照高宽通道的顺序被拼合并存储为行,因此,形成(Cout×Rout)×(N×K×K)的二维矩阵,N×K×K为三维卷积窗口的体积,Cout×Rout为输入特征图中的卷积窗口的数量。
此时的卷积操作就可转化为矩阵乘法,进一步地,可以先将矩阵分块,每一个小分块的点乘计算任务(例如PB1与W1)由一个线程负责,在硬件资源足够多时,还可将小分块进一步划分,分配更多的硬件线程,从而加速矩阵相乘过程。如图17所示,在计算输出像素块O1过程中,将输入像素块PB1...n与权值块W1..n(n为分块数量,图17中为3)对应相乘时,各像素点与权值可以并行进行乘累加操作。
4.2多线程与生产者-消费者模型
线程与进程不同,进程是程序和数据的运行过程,作为系统分配和调度资源的独立单位而存在,而线程是为了提高多道程序的并发度以及减小切换任务的时空开销提出的CPU最小执行单元,本身基本不占用资源,但可以与处于同一进程中的其他线程共享局部资源。SB3500平台上含有3个DSP内核和一个ARM核,每个核拥有4个线程处理单元(TPU),相当于传统多处理器上的多CPU,通过创建线程和使用SandBlaster IDE提供的各种API可以在TPU上并发执行程序,此外,还可以根据任务量大小和紧迫程度分配线程数量以及调度的优先级,执行IO操作的线程可与处理CPU密集计算的线程重叠进行。
本申请在DSP开发平台上建立了一个生产者-消费者模型以充分利用TPU来优化卷积计算过程,如图18。该模型的原理如下:生产者线程将生产的物品放置于空缓存区中,消费者线程则从该缓冲区中取得物品,并同时释放一个缓存单元。若缓存区中无空的缓存单元,则生产者线程必须自我阻塞直至消费者线程释放出一个空的缓存单元,同理,消费者线程仅能在缓存区中有满的缓存单元才可取到物品,如图19和图20。该模型可以将生成和消费两过程独立为互不相关的并发主体,降低之间的依赖关系,均衡生产者线程和消费者线程处理数据的速度差异(数据可暂时存在与缓冲区中)。
按照上述原理,本申请首先设定多线程的调度策略为SCHED_PIN,即将线程固定到特定的硬件TPU单元上并始终在其上运行,该策略可以降低同步开销。由于卷积占据了整个网络至少80%的计算任务,故将1号和2号DSP核的8个硬件线程用作生产者,负责对输入特征图和权值参数进行卷积计算。3号DSP核的4个硬件线程则充当消费者角色,对卷积计算的结果数据执行激活和池化运算。若有16个卷积核,则按照提前对各个TPU的编号分配计算任务,如1号DSP核的0号TPU负责第一个和第二个卷积核,1号DSP核的1号TPU则负责第三个和第四个卷积核,依次类推。如果卷积核的个数不为4的倍数,则2号DSP的3号TPU执行完后空等。对于3号DSP核的4个硬件线程,每个TPU负责两个生产者线程的计算结果,即将缓冲区中的每个数据激活并池化。
网络推理过程中,会提前判断后续是否是卷积-激活-池化层,若是,则启动生产者-消费者模型。主进程中立即创建12个线程并初始化属性,划分线程任务,注册互斥锁和条件变量和同步线程。在计算过程中,不论是生产者放置数据到缓存单元还是消费者从缓存单元中取出数据,均会对该操作加锁,虽然会降低效率,但保证了互斥访问临界资源。等最后一个生产者线程做完卷积,调用相应API将生产者线程统一撤销。同理,消费者线程也如此。整个过程实现了卷积-激活-池化层的细腻度流水线执行,即不需要等待前一层完全计算完成,本层就已经开始了运算,有效降低了启动和输出延时。图21是有无采用多线程的生产者-消费者模型的cycle统计图,图中一个cycle就是一个最小的时间单位,随着卷积核个数的增加,优化后的运行时长越来越接近优化前的一半。
4.3 RPU并行计算
RPU向量操作支持对来自8条目256比特寄存器堆的16个16-bit同时进行乘累加操作,可以在每周期内执行8个32-位操作,生成256bit结果数据。平台所具有的RPU函数有:1)实现实/复的乘法、加法、乘加和等操作;2)实现向量移位、比较、重排、搜索极值等逻辑操作;3)还含Galois/FFT/Viterbi/Turbo等复杂算法的基本运算单元。
本申请在MTCNN中的输入特征图卷积窗口和卷积核平面的二维卷积运算过程,使用了RPU API中的Multiply和Add Saturating函数进行优化。其中RPU Multiply函数将目标向量r中每个元素设为两个输入向量p和q中的对应元素的乘积,其调用格式为:“__sb_rmul(&r,&p,&q);”。而RPU Add Saturating函数将p数组和q数组的对应元素相加,饱和运算到16位,和放在r数组,其调用格式为:“__sb_radds(&r,&p,&q);”。大多数情况下,一次二维卷积计算的两个输入向量往往少于或超过16个16位(如存在3*3和5*5的卷积平面),很少会有4*4尺寸的卷积核,本项目采取的措施是在末尾补0或者分多组用多线程计算。如此,我们便完成了一次基本二维卷积的RPU优化,如果卷积中还有偏置参数bias需要进行运算的话,在最后进行加减即可。使用RPU函数对二维卷积进行优化之后,明显的提升了算法的运算效率,优化前后的cycle统计对比如图22所示。
MTCNN网络中的激活层使用Prelu作为激活函数,本申请同样对其进行了RPU并行计算优化,使用的API为Mutiply 32Signed Signed,调用格式为:“_sb_rmul32ss(&l,&h,&p,&q);”,输入输出向量均采用有符号数,其中,目标向量是l和h,输入向量是p和q,p和q中对应元素的32位乘积的结果是l和h中的元素。在使用该APU之前需补齐16个16bit数据,采用RPU函数明显提升了Prelu修正类激活函数的运算速度,如图23.
对于最大池化层,本申请使用RPU中的Maximum函数进行优化。RPU Maximum函数比较两个长度为16的数组p和q的对应元素值,将最大值输出到数组r中,其调用格式为:“__sb_rmax(r,p,q);”。对于2*2范围的最大值池化,需要取出四个位置中的最大值,所以对于池化的一个输出数据,需要进行三次RPU Maximum的取最大值操作。优化前后的cycle统计对比见图24。
Claims (1)
1.一种面向DSP平台的快速人脸检测与识别方法,特征是,包括如下步骤:
网络修剪与构建步骤:截枝掉MTCNN中P-R网络的冗余的五个人脸关键点输出环节,O-网络整体不变;inception-resnet-v1作为FACENET的主干架构,微调尾部的网络层:先将末尾的softmax层替换为1*1*512尺寸的全连接层,再在其后添加一个L2嵌入层,从而将inception-resnet-v1输出的512维特征向量归一化;
模型训练与量化步骤:MTCNN、FACENET模型训练采用深度学习框架caffe或TensorFlow,分别在Wider Face数据集和CASIA WebFace数据集上训练和验证;将生成的.caffemodel或.ckpt文件转换成能被DSP平台直接读取的.txt格式,所有的权值数据从32bits浮点定点量化成16bits;
计算加速与优化步骤:在常规层的计算上,一方面将卷积转换为通用矩阵相乘,并行计算的RPU函数加速全连接层、softmax层等;另一方面使用结合了多线程技术的生产者-消费者模型加快卷积层-激活层-池化层的流水线计算;在输入特征图的处理上,定义缩放因子factor可以有规律地任意调整图像金字塔的层数和各层图像尺寸,防止盲目整定带来的计算开销,此外,所有涉及图像的裁剪均采用效果良好且易于实现的最近邻采样方法,使图像内容不扭曲变形和减少失真;针对于inception-resnet-v1推理,底层实现采用双向嵌套链表以辅助人脸识别过程;
人脸检测与识别步骤:待测图片读入DSP平台后,经过MTCNN中图像金字塔的多重缩放、级联的P-R-O网络的正向传播、候选窗的非极大值抑制和各输出窗的边框回归微调,最后输出预测到的最大概率的人脸框,再将其裁剪为3*299*299的尺寸并作为FACENET网络的输入;通过检测的人脸经过识别网络FACENET的特征提取和计算,最后将网络整体输出的512维嵌入向量与后台人脸库中的各嵌入向量进行欧式距离比较,最近的且低于阈值的为具有同一身份的人脸,从而完成了one-shot-learning的人脸检测与识别的流程,即只须通过一个样本的学习就可识别出人脸身份而不必对模型重训练
人脸检测是一个分类任务,交叉熵损失函数为:
引入如下指标指定样本xi需要计算的损失函数种类:
其中,N表示样本总数,任务重要性程度用αj表示,P-网络和R-网络训练时,αdet=1,αbox=0.5,而O-网络中,αdet=1,αbox=0.5,αlandmark=1;βi j∈{0,1}表示样本是否要计算某一类损失函数;
FACENET的训练只有一个目标函数,如下:
三个小网络的主干结构模块化为多个可重复块:由卷积层、激活层和最大池化层组成的BasicConvPreluPool,由卷积层、激活层组成的BasicConvPrelu,由全连接层和softmax层组成的BasicFcSoftmax,由全连接层和激活层组成的BasicFcPrelu,仅有卷积层的BasicConv,仅有softmax的BasicSoftmax,仅有全连接层的BasicFc;通过多次调用上述可重复块可以构建P-网络、R-网络和O-网络;
将剩余框按照概率值从大到小排列,从后往前遍历各个框并将其与最前部的人脸概率值最大的框计算交并比,交并比高于0.5,则舍弃该框,否则,继续遍历下一个候选框;每遍历完一轮,从队列中取出并保存最前部的人脸框,之后,再开启下一轮的遍历;经过多轮次的遍历可以筛去许多不符合要求的候选边框;
P-网络输出的每个人脸框均有两个标签i和j,表示其在所有原始候选框中的定位,即横纵索引值;根据如下公式得到候选框的估算的真实边框位置:
esti_x=round((stride*j+1)/scale) (6)
esti_y=round((stride*i+1)/scale) (7)
esti_h=round((stride*j+cell_size)/scale) (8)
esti_w=round((stride*i+cell_size)/scale) (9)其中,stride=2,cell_size=12;
之后,执行边框回归对初筛过后的剩余框的位置微调,方法如下:首先通过预测的和估算真实的人脸框位置(pred_x,pred_y,pred_h,pred_w)和(esti_x,esti_y,esti_h,esti_w),得到对应的边框的左下角和右上角坐标,分别为(pred_x1,pred_y1,pred_x2,pred_y2),(esti_x1,esti_y1,esti_x2,esti_y2),统一表示为,
x1=x-1/2*w (10)
y1=y-1/2*h (11)
x2=x+1/2*w (12)
y1=y+1/2*h (13)
之后,采用如下等式微调预测的人脸框得到更准确的回归边框:
reg_x1=pred_x1+esti_y1*|pred_x2-pred_x1+1| (14)
reg_y1=pred_y1+esti_x1*|pred_y2-pred_y1+1| (15)
reg_x2=pred_x2+esti_y2*|pred_x2-pred_x1+1| (16)
reg_y2=pred_y2+esti_x2*|pred_y2-pred_y1+1| (17);
定义了四种不同的结构体和设计了一种数据结构以辅助图像在FACENET上高效率地进行正向传播;
inception-resnet-v1网络正向推理时能依次访问到各层的参数,在不定义额外的数据结构的前提下,赋予第二个结构体node另外的含义和作用:每一个node的变量还可用于代表每一网络层,其中的next和prev指针指向前一个和后一个网络层,遍历双向链表相当于依次遍历inception-resnet-v1的所有层,空指针val可随时强制类型转换为指向本层结构体section的变量的指针类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011437158.7A CN112749626B (zh) | 2020-12-10 | 2020-12-10 | 一种面向dsp平台的快速人脸检测与识别方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011437158.7A CN112749626B (zh) | 2020-12-10 | 2020-12-10 | 一种面向dsp平台的快速人脸检测与识别方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112749626A CN112749626A (zh) | 2021-05-04 |
CN112749626B true CN112749626B (zh) | 2022-09-13 |
Family
ID=75648418
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011437158.7A Active CN112749626B (zh) | 2020-12-10 | 2020-12-10 | 一种面向dsp平台的快速人脸检测与识别方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112749626B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113255544A (zh) * | 2021-06-02 | 2021-08-13 | 通号智慧城市研究设计院有限公司 | 一种基于深度学习模型的人脸识别方法和系统 |
CN113239885A (zh) * | 2021-06-04 | 2021-08-10 | 新大陆数字技术股份有限公司 | 一种人脸检测与识别方法及系统 |
CN113343955B (zh) * | 2021-08-06 | 2022-04-08 | 北京惠朗时代科技有限公司 | 一种基于深度金字塔的人脸识别智能尾箱应用方法 |
CN113705404A (zh) * | 2021-08-18 | 2021-11-26 | 南京邮电大学 | 一种面向嵌入式硬件的人脸检测方法 |
CN113780156A (zh) * | 2021-09-08 | 2021-12-10 | 交通银行股份有限公司 | 一种基于云边端架构的人脸识别方法和系统 |
CN113822927B (zh) * | 2021-09-22 | 2024-01-23 | 易联众智鼎(厦门)科技有限公司 | 一种适用弱质量图像的人脸检测方法、装置、介质及设备 |
CN114115535A (zh) * | 2021-11-12 | 2022-03-01 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于银河锐华移动操作系统的眼动追踪、识别方法及系统 |
CN114743184A (zh) * | 2022-06-10 | 2022-07-12 | 航天科技控股集团股份有限公司 | 一种驾驶员驾驶状态预警系统 |
CN115456962B (zh) * | 2022-08-24 | 2023-09-29 | 中山大学中山眼科中心 | 一种基于卷积神经网络的脉络膜血管指数预测方法和装置 |
CN116229381B (zh) * | 2023-05-11 | 2023-07-07 | 南昌工程学院 | 一种河湖采砂船船脸识别方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109919308A (zh) * | 2017-12-13 | 2019-06-21 | 腾讯科技(深圳)有限公司 | 一种神经网络模型部署方法、预测方法及相关设备 |
CN110363091A (zh) * | 2019-06-18 | 2019-10-22 | 广州杰赛科技股份有限公司 | 侧脸情况下的人脸识别方法、装置、设备及存储介质 |
CN110532871A (zh) * | 2019-07-24 | 2019-12-03 | 华为技术有限公司 | 图像处理的方法和装置 |
CN110619319A (zh) * | 2019-09-27 | 2019-12-27 | 北京紫睛科技有限公司 | 一种基于改进的mtcnn模型人脸检测方法和系统 |
CN110717398A (zh) * | 2019-09-09 | 2020-01-21 | 深圳壹账通智能科技有限公司 | 基于人脸识别进行车辆缴费的方法、相关设备及存储介质 |
CN110956218A (zh) * | 2019-12-10 | 2020-04-03 | 同济人工智能研究院(苏州)有限公司 | 基于Heatmap的Nao机器人目标检测足球候选点的生成方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110210314B (zh) * | 2019-05-06 | 2023-06-13 | 深圳华付技术股份有限公司 | 人脸检测方法、装置、计算机设备及存储介质 |
-
2020
- 2020-12-10 CN CN202011437158.7A patent/CN112749626B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109919308A (zh) * | 2017-12-13 | 2019-06-21 | 腾讯科技(深圳)有限公司 | 一种神经网络模型部署方法、预测方法及相关设备 |
CN110363091A (zh) * | 2019-06-18 | 2019-10-22 | 广州杰赛科技股份有限公司 | 侧脸情况下的人脸识别方法、装置、设备及存储介质 |
CN110532871A (zh) * | 2019-07-24 | 2019-12-03 | 华为技术有限公司 | 图像处理的方法和装置 |
CN110717398A (zh) * | 2019-09-09 | 2020-01-21 | 深圳壹账通智能科技有限公司 | 基于人脸识别进行车辆缴费的方法、相关设备及存储介质 |
CN110619319A (zh) * | 2019-09-27 | 2019-12-27 | 北京紫睛科技有限公司 | 一种基于改进的mtcnn模型人脸检测方法和系统 |
CN110956218A (zh) * | 2019-12-10 | 2020-04-03 | 同济人工智能研究院(苏州)有限公司 | 基于Heatmap的Nao机器人目标检测足球候选点的生成方法 |
Non-Patent Citations (3)
Title |
---|
Binary convolutional neural network acceleration framework for rapid system prototyping;Zhe Xu等;《Journal of Systems Architecture》;20200514;第1-9页 * |
基于多任务级联CNN与中心损失的人脸识别;王灵珍等;《计算机仿真》;20200815(第08期);第398-403页 * |
基于深度学习的目标检测与跟踪算法研究和实现;元楚楚;《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》;20200715;第I138-1183页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112749626A (zh) | 2021-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112749626B (zh) | 一种面向dsp平台的快速人脸检测与识别方法 | |
CN113673307B (zh) | 一种轻量型的视频动作识别方法 | |
CN111210443B (zh) | 基于嵌入平衡的可变形卷积混合任务级联语义分割方法 | |
CN108133188B (zh) | 一种基于运动历史图像与卷积神经网络的行为识别方法 | |
CN108805083B (zh) | 单阶段的视频行为检测方法 | |
CN110188768B (zh) | 实时图像语义分割方法及系统 | |
US8331655B2 (en) | Learning apparatus for pattern detector, learning method and computer-readable storage medium | |
CN111639692A (zh) | 一种基于注意力机制的阴影检测方法 | |
Yaseen et al. | Deep learning hyper-parameter optimization for video analytics in clouds | |
CN112288011B (zh) | 一种基于自注意力深度神经网络的图像匹配方法 | |
CN110322495A (zh) | 一种基于弱监督深度学习的场景文本分割方法 | |
US11580356B2 (en) | Efficient inferencing with piecewise pointwise convolution | |
CN112348036A (zh) | 基于轻量化残差学习和反卷积级联的自适应目标检测方法 | |
CN113128478B (zh) | 模型训练方法、行人分析方法、装置、设备及存储介质 | |
Nguyen et al. | Yolo based real-time human detection for smart video surveillance at the edge | |
WO2022152104A1 (zh) | 动作识别模型的训练方法及装置、动作识别方法及装置 | |
CN112597324A (zh) | 一种基于相关滤波的图像哈希索引构建方法、系统及设备 | |
CN116152254B (zh) | 工业泄露目标气体检测模型训练方法、检测方法、电子设备 | |
CN112183649A (zh) | 一种用于对金字塔特征图进行预测的算法 | |
CN114511785A (zh) | 基于瓶颈注意力模块的遥感图像云检测方法及系统 | |
CN113205137A (zh) | 一种基于胶囊参数优化的图像识别方法及系统 | |
US11429771B2 (en) | Hardware-implemented argmax layer | |
Qiao et al. | Two-Stream Convolutional Neural Network for Video Action Recognition. | |
CN116740808A (zh) | 基于深度学习目标检测和图像分类的动物行为识别方法 | |
CN113627245B (zh) | Crts目标检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |