论文部分内容阅读
图像信息的分类器的作用在于识别人脸图像和非人脸图像。对于一个实际使用的分类器,其判断人脸的正确率要求是99.9%以上的精确。而现有的HaarTraining算法能实现分类问题,可以训练一个强分类器,同时也能实现训练级联的强分类器(CascadeofClassifiers)。该算法能根据给出的正样本即人脸图像,作为训练分类器的基本数据,得到一个级联的分类器。再通过给出的负样本即非人脸图像,来判断训练出来的分类器能否识别出非人脸,只有当分类器的正确率达到了,才能得到强分类器。按照以往的训练经验来说,一个满足要求的级联分类器至少需要100个弱分类器组成,弱分类器训练是一个迭代过程,每个弱分类器的训练时间与样本数量有关系,样本数量越多获得一个最优弱分类器的时间耗费就越长。因此强分类器的训练时间太长,为了解决耗时问题,就需要使用并行计算的思想。
首先,剖析现有HaarTraining算法。通过分析算法的原理、算法结构,考虑训练算法的整个过程。该算法训练级联分类器的流程,主要由创建Haar特征,载入正负样本数据,计算Haar特征值,保存结果,测试分类性能等部分构成。其中以20*20尺寸的样本为例,包含的特征值有七万多个,弱分类器就由某些特征值组合而成,算法再选取效果最好的弱分类器,将其组合成级联的强分类器。
其次,通过分析该算法,确定并行点,并进行HaarTraining算法并行的可行性分析。AdaBoost算法中各个弱分类器误判率的计算存在彼此计算不相关,程序计算前后顺序对计算结果没有影响,即:每个弱分类器的计算符合并行化的特点。将弱分类器集合分发到各个并行节点是可行的。即不保存上一步状态的弱分类器计算并行是可行的。
然后,选择合适的并行编程技术。MPI,作为目前最重要的并行编程工具,其编程方法的优点是显著的,最大优点是其高性能,具有丰富的点到点通信函数模型、可操作数据类型及更大的群组通信函数库。主要通过多个节点间的消息传递来实现并行,它具有非常良好的移植性,有相当多支持它的硬件设施。采用该编程方式,对现有串行程序的整体代码更改量不会过大,而且该编程技术具有强大的功能和的高效性。所以本论文采用MPI的并行编程技术来实现。
最后,在确定了并行点和实现方案后,结合进程组的主从模式(Master-slave),将并行点用MPI并行编程技术实现。主从模式是指进程组的关系模型,主要包括一个“主进程”,其他称为“从进程”;这两种进程分别负责不同的任务,主进程负责整个并行程序的数据控制任务,而从进程只需要对该节点上的进行数据处理和计算任务,主从进程间的通讯需要通过数据广播(BroadCast),数据收集(Gather),数据散发(Scatter)来实现。而这些功能在MPI并行化框架中都提供了完备的程序支持,并将计算结果send给主进程。并通过实验结果证明多个进程的训练时间比原有的训练时间有所减少,同时也做了对比实验,随着进程数的增加,训练时间是不断减少的,但是并不是与进程数呈比例的趋势减少,其下降的幅度有一定程度的减小。