一种基于分布式大数据平台的行人检测方法与流程

文档序号:12734713阅读:606来源:国知局

本发明涉及机器学习算法并行化领域,特别涉及一种基于spark分布式计算平台的行人检测方法。



背景技术:

传统的行人检测方法采用视频背景建模方法,运动帧差检测法,光流目标检测法,这些方法都是先提取出目标,然后通过分类的方法提取行人。这些方法适合于背景比较简单的场景,但是在背景比较复杂的情况下,提取的目标会出现粘连现象,在分类时将其误认为是其他目标,还有背景收到光照的影响,会将背景误检为目标。

基于现有的模型,比如说:快速线性SVM模型,Adaboost检测hog特征模型,卷积神经网络,非线性SVM模型,DPM模型,深度神经网络模型都可以具有相当好的精度,但是问题就是计算速度比较慢,训练模型比较慢。

AdaBoost是一种贪婪迭代算法,实现方式如下:首先,AdaBoost算法将训练集中的每一个样本集赋予一个相同的权重W。然后,该算法进行迭代运算。根据每次迭代运算中样本集的分类错误率εt,AdaBoost对训练集中的每一个样本集重新赋予一个新的权重值Wt。Wt是一个与εt相关的函数,即分类错误率εt小的样本集权重值Wt小,反之分类错误率εt大的样本集权重值Wt大。利用重新赋予权值的方法可以成功的使AdaBoost算法聚焦于分类错误率大的样本集,最终使样本集的分类错误率达到设定的合理值。AdaBoost算法针对同一的训练集训练出不同的分类器(即弱分类器),进而把这些弱分类器集合起来,构成一个更强大的分类器(即强分类器)。该算法仅仅要求弱分类器的错误率小于50%(略好于随机猜测),则通过迭代运算整体的分类错误率将以指数的方式降低到指定值。

Spark是Apache推出的分布式实时计算框架,提供了并行编程模型,用户只需调用相关的API即可完成分布式处理程序,为大数据的处理提供了有利的条件,因此,基于分布式spark实时计算框架的行人检测,能够极大的提供训练速度,图像处理速度,大大改善因为硬件设备导致的精度,速度问题。

SVM是一种基于统计学习理论的VC维理论和结构风险最小原理基础上的机器学习系统,主要用来处理二元样本的分类问题,根据有限的样本信息在模型的复杂性和学习能力之间寻求最佳折衷,以期获得最好的推广能力。算法采用核函数映射的方法,将原始空间的样本映射到高维特征空间,在高维特征空间内,寻找一个超平面,使此超平面正确分类样本,并且使正负样本之间的间隔最大。

在行人检测的过程中,由于拥有的特征数多和训练样本不平衡等问题,使用单一弱分类器的AdaBoost算法容易引发训练时间过长和过拟合等问题。本文针对传统AdaBoost算法的不足,提出利用SVM代替单一弱分类器的AdaBoost算法(SVM-AdaBoost)增强分类器的分类能力。



技术实现要素:

一种基于分布式大数据平台的行人检测方法,其特征在于,包括以下步骤:

为了能更好的解决海量数据条件下的训练效率问题,本发明提出了一种基于分布式Spark实时计算框架,提高SVM-AdaBoost的行人检测并行化计算方法,采用新一代并行计算技术,在不影响训练精度的条件下,提高SVM的训练速度,提高训练效率,实现SVM-AdaBoost在多个节点上并行计算。

通过消息采集机制Kafka接收来自行人检测的图像集,启动Spark集群,创建SparkContext。

接着图像数据预处理,将正负样本集的图片训练切分成多个子集的和,将图片流生成多个弹性分布式数据集RDD,对每个RDD进行独立计算。

hog特征提取首先将图像分为小的细胞单元,然后在每个细胞单元上计算梯度直方图,并使用一种逐块的模式来归一化计算的结果,最后对每一个细胞单元返回相应的特征描述子。

本方法采用径向基函数作为SVM的核函数:

方法的主要步骤为:

步骤1:给定训练集样本S={(x1,y1),...,(xn,yn)},循环次数T,SVM核函数的参数σ={σ12,...},C={C1,C2,...}.

步骤2:设定训练集样本权重:Wi1=1/N,i=1,....,N

步骤3:训练一个基于径向基核函数的SVM(RBFSVM)弱分类器。

步骤4:计算训练错误率ht:如果ξt大于50%,则返回步骤3,否则进行步骤5.

步骤5:根据错误率重置RBFSVM弱分类器的权重ht:

步骤6:重置训练样本集的权重

i=1,K,N,Ct为归一化参数。

步骤7:T次循环或达到指定精确度后,输出训练后的分类器

将样本的初始化重用样本所在类的规模来标记,表示为wi=1/Cn,这样稀有类的样本具有较高的权值,在规则抽样中被选中的概率较大,在迭代过程中叫容易被抽到,避免了分类器忽略稀有类的现象。对多类SVM的1-r,轮换将其中的任意一类作为正类,其他作为负类,若有m个类,进行m次以下步骤:

(1)w={w=1/Cn|j=1,2,...,n},{初始化N个样本的权值,Cn是样本所属类中样本的个数}

(2)令k表示迭代的轮数

(3)For i=1 to k do

(4)根据wi通过对D进行抽样(有放回)产生训练集Di

(5)在Di上训练基分类器Ci

(6)用Ci对原训练集D中的所有样本分类

(7)根据计算加权误差

(8)ifεi>0.5then

(9)w={wj=1/Cn|j=1,2,...N}{重新设置N个样本的权值}

(10)返回4

(11)End if

(12)根据调整每个样本的权值

(13)End for

从直观上理解,首先,当错误率越大时,分类器的权重越小,这符合一般解释及分类器性能越高置信度也就越大,在最终的表决中所占比重也就越大。其次,在新样本分布的更新过程中,分类正确的样本在下次分类器学习中作用越小,而分错的样本在下次分类器学习中的作用越大,这样可以是新的分类器设计更集中在之前错分的样本分类上,使整体的分类性能提高。

附图说明

图1分布式行人检测视频检测流程图。

具体实施方式

为使本发明的目的,技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。

搭建spark平台集群,使用一台服务器作为Master,4台服务器作为Slaver。其中Master主要记录了数据流之间的依赖关系并负责任务调度以及生成新的RDD,Slaver主要是实现算法的计算和数据的存储。Kafka来接收视频流,通过zookeeper来集群管理spark平台集群,可以达到稳定,提高容错性能。

为验证算法的优越性,我们采用具有挑战性的MIT行人库和INRIA行人库两个库的样本,其中MIT行人库包含19240个行人正样本彩色图像,不含负样本,INRIA行人库包含一个训练库和一个测试库,其中训练库包含4416个正样本,测试库包含2126个正样本,本次试验选取其中部分样本作为训练及测试样本,测试样本用来评估训练样本的误检率和漏检率。

行人视频流通过Kafka消息采集,接着初始化,启动SparkContext,SparkStreaming。

将接受到的图片转换成spark streaming,然后按照行人检测框将图片流分成多个RDD来分片处理。

RDD弹性数据集中对视频流进行hog特征提取,本发明中的样本集的图片64*128像素,hog特征提取后则为3781维描述子。

具体特征提取如下:

1)灰度化(将图像看做一个(x,y,z)(灰度)的三维图像);

2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;

3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。

4)将图像划分成小cells(例如6*6像素/cell);

5)统计每个cell(细胞单元)的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor;

6)将每几个cell组成一个block(块),一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。

运用基于SVM-Adaboost的行人检测模型来训练学习样本集,非线性SVM模型选用的是径向基核函数。

模型函数为:

运用了对偶形式将其转化为

其中<φxi.φ(x)>为内积

利用Adaboost来增强提升SVM分类效果。算法步骤如下:

1)开始初始化D={xi,y1,.......,xn,yn},kmax,Wi(i)=1/n,i=1,....n

2)K<-0

3)do K<-K+1

4)训练使用按照Wk(i)采样的D的弱学习器Ck

5)Ek<-对使用Wk(i)的D测量的Ck的训练误差

6)

7)

8)Until k=kmax

9)Return Ck和ak k=1,........kmax(带权值分类器的总体)

10)end

通过判断检测模型的结果yi,如果大于0,则认为该检测框里是行人,反之,则认为该检测框是背景。

对检测到的为行人的检测框通过spark中的join将检测框的数据放到一个新的RDD中,然后在对检测框进行合并,其中合并比较近的检测框,删除比较大和比较小的检测框。最后将检测后的行人检测框的图片保存到HDFS分布式文件系统。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1