本站小编为你精心准备了DM642的人脸检测参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
《电子器件杂志》2014年第三期
1基于简化Gabor小波和层次型支持向量机的人脸检测算法
1.1简化Gabor小波特征为了降低运算量,提高人脸检测速率,共24个小波响应来提取简化Gabor小波特征。简化Gabor小波特征是通过输入图与二维简化Gabor小波进行卷积得到的,具体实现方法是:将输入图像分别与简化Gabor小波的实部和虚部进行卷积运算。这样每个像素通过与简化Gabor小波卷积之后得到共24个简化Gabor小波变换系数,为了简化运算,提高人脸检测速度,去除光照等因素的影响,此处求取24个简化Gabor小波变化系数的均值作为该像素点的简化Gabor特征。
1.2基于简化Gabor小波特征的层次型支持向量机的人脸检测算法基于简化Gabor小波特征的层次型支持向量机的人脸检测算法框图如图1所示。首先将输入图像与简化Gabor小波进行卷积运算按照上节的方法提取简化的Gabor小波特征,利用多尺度和多方向的简化Gabor特征可以有效的去除光照所造成的影响。然后用20×20像素大小的矩形检测窗口在图像中移动,穷举搜索输入图像中所有的可能位置,通过一个线性SVM组合构成的分类器快速的排除输入图像中绝大部分的非人脸区域,从而减少候选人脸区域的数量,通过线性SVM初步判断可能是人脸的,加入到候选人脸区域列表,最后通过非线性SVM来对剩余的难于区分的候选区域进行判断,最终检测出人脸。因为在实际应用中,图像中得绝大多数背景区域和人脸有较大的差别,所以为了快速的排除背景中的非人脸区域,本文使用了层次型结构的SVM分类器。先设计一个线性组合SVM分类器快速排除大部分的非人脸区域,然后用一个非线性的SVM分类器判别剩下的难以区分的人脸候选区域。线性SVM的设计本质上就是分段线性判别函数的设计。因为非人脸模式变化范围比较大,我们考虑把非人脸样本聚类成N个子类,然后针对这N个子类分别设计分类器,所有的人脸样本作为一个类别。本文采用Kohonen自组织映射(SOFM)聚类方法。线性SVM分类器具体设计方法如下:对第i(0<i≤N)类非人脸和人脸模式,线性SVM分类函数如下:若u=N则认为可能是人脸,加入人脸候选区列表,否则认为是非人脸区域而排除掉。总体思想就是用N个线性SVM分类器进行投票,只有当所有分类器全部认可才能通过验证。此处的线性分类器选择N=8。对于非线性SVM分类器的设计,是用于对可能的候选人脸区域作进一步的判断,非线性SVM分类器如下式:
2.1系统硬件构成DSP平台下人脸检测系统的实现我们选用的DSP平台是闻亭科技公司的TDS642EVM开发板,主处理芯片是TI公司的TMS320DM642,开发环境是CCS2.20,编程语言为C语言。TMS320DM642是TI公司C6000系列的一款高性能芯片,其主频600MHz,有8个并行运算单元,处理能力达4800MI/S。本系统硬件以TMS320DM642为核心,辅以视频解码器等外设芯片,基本框架如图2所示。图像采集部分由CCD摄像头采集视频信号,采集图像大小为320×240,经视频解码器A/D转换为YUV信号,再由DM642芯片通过DMA读取数据并进行处理,随后将数据存储到SDRAM中,再通过视频编码芯片D/A转化为模拟信号,最终输出到显示器显示。系统从摄像头获取PAL制式视频信号,经过视频解码器得到的是4∶2∶2格式8bit宽的YUV格式的信号。该视频信号由DM642上的外设VP口读取,实现视频的输入。读取进来的视频信号,只选取Y分量用于检测,调用编好的检测程序进行检测。检测完成后的视频帧再由视频编码器编码后输出到电视机的显示屏上。开发环境如图3所示。
2.2系统软件工具本文采用TI公司的DSP集成开发环境CCS2.2进行软件开发,该软件平台提供了基于C语言系统的编译、链接和调试工具,并能进行系统仿真和实时跟踪,为DSP程序的设计和开发提供了很大的方便。
2.3系统代码移植为了验证算法的有效性,本文先在PC环境下进行了算法仿真,使用C代码和汇编语言混合编程,并调用了计算机视觉OPENCV函数库,在VC6.0环境下仿真。由于OPENCV不能在DSP特定的开发环境下使用,因此需要对部分代码进行裁剪和转化。在PC端将人脸检测所用到的OpenCV函数库从OpenCV中剥离出来,并将这些代码用标准C代码实现。另外,在代码移植中,还得具体考虑VC和C6000编译器相关基本数据类型之间的差别。在程序的移植过程中,由于采用纯C语言编程,而人脸检测所用的分类器文件是xml文件,但C语言却不能直接读取,因此需要将xml格式的分类器文件转换为txt文件。从xml格式的分类器文件到txt文件的转换,我们采用的是FirstObjectiveSoftware公司提供的CMarkupC++类的免费版,利用CMarkup类自己编写了c++程序来直接读取xml中有用的数据再依靠C函数Fprintf存入到txt文件中。
2.4系统优化为了能够实现人脸检测系统的实时检测,需要针对DM642对算法和配置进行相应的优化。具体优化方法[9]主要有:浮点定点数转化,循环优化,使用内联函数和线性汇编优化。(1)浮点定点数转化DM642是定点运算芯片,在其中进行浮点运算是非常耗时的,因此需要将代码中使用到的浮点数转化为定点数。定点化过程的一个关键是定标,也就是确定变量的范围,需要对其进行精度分析,在精度范围内进行数据位操作。实验证明,将浮点数分类器转化为定点数分类器,并对代码中浮点变量定点化,最终检测速度有了很大的提高。(2)循环优化一般情况下,循环过程会占用程序运算的很大一部分时间。AdaBoost算法中,窗口搜索和级联分类器都用到了循环体,对循环体的优化主要是循环展开,将多重循环展开为单重循环,从而能充分利用C6000软件流水,提高速度。(3)使用内联函数C6000编译器提供了很多内联函数,它们直接映射为内嵌汇编指令的特殊函数,这样可迅速优化C语言代码。例如用内联指令_add2、_mpyhl、_mpylh等完成两组16bit数的加法和乘法,效率比单纯16bit数的加法和乘法提高一倍。(4)线性汇编优化线性汇编是C6000系列的类汇编工具,线性汇编代码与汇编源代码相似,但线性汇编代码中没有指令延迟和寄存器使用信息。可以将最耗费时间的一部分C代码用线性汇编写,然后使用汇编优化器优化这些代码,优化后检测速度能明显提高很多。
3实验结果
人脸检测的实验训练样本使用Yale,Harvard等人脸识别库,线性SVM分类器训练使用的非人脸样本从没有人脸的图像中随机选择,共使用大约8000个样本,训练惩罚因子C设为10。非线性SVM分类器训练使用的非人脸样本在线性SVM组合的约束条件通过自举的方法获得。具体过程描述如下:(1)对50幅没有人脸的输入图像进行检测,使用通过线性SVM组合分类器的部分背景窗口作为初始非人脸样本,用这些非人脸样本对非线性SVM分类器进行训练,此处的惩罚因子C设为20。(2)用训练得到线性SVM分类器、非线性SVM分类器重复对第1步中50幅输入图像进行检测。(3)如果虚警数没有超过一定数值,则停止训练,否则选择一部分虚警窗口图像加入原来非人脸样本集,更新非人脸样本集,然后按照第2步的方法继续训练非线性SVM分类器。表1是人脸检测测试的统计结果:从统计结果我们可以看到利用简化Gabor特征的层次型支持向量机方法可以提高人脸检测率,同时降低虚警数目。因为简化Gabor小波特征运算过程得到很大的简化,运算速率得到显著的提高。系统检测时,输入的视频图像大小为320×240像素,检测窗口初始大小为20×20。系统的关键步骤是代码的移植和系统的优化,表2列出了经过各个优化步骤后,系统的检测性能。由上表可以看出,经过4次优化,系统检测速度接近20帧/s,基本达到了实时的要求。经过数据统计,误检率低于6%。而且本系统对人脸的多视角有较好的检测效果。
4结束语
本文介绍了基于DSP的人脸实时检测系统,研究提出了一种基于简化Gabor小波特征和层次型支持向量机的人脸检测算法,该算法检测速度快并且误检率低。将此算法用于TDS320DM642处理芯片,对代码进行移植和系统优化,在保持检测准确率的同时提高检测速度,最终能达到实时的检测效果。由于存在周围复杂环境以及光照条件的不稳定性,本系统的检测效果会受到一定的影响。因此,可以考虑增加训练分类器层数来提高系统检测的稳定性,为今后开展人脸跟踪和识别的研究奠定基础。
作者:李月芳单位:常州轻工职业技术学院电子电气工程系