这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 基于Adaboost算法结合Virtex5平台如何提升FPGA器件的性能

共1条 1/1 1 跳转至

基于Adaboost算法结合Virtex5平台如何提升FPGA器件的性能

工程师
2020-09-09 23:43:58     打赏

引言

Adaboost算法是Freund和Schapire于1995年提出的,全称为Adaptive BoosTIng.它是BoosTIng算法的改进,意为该算法通过机器训练与学习不断自适应地调整假设的错误率,这种灵活性使得Adaboost算法很容易与实际应用联系起来。2001年,微软研究院的P.Viola提出了基于Haar特征的Adaboost算法,创造性地将积分图的概念引入到人脸检测的特征计算当中,由于此算法使用了大量尺寸不一的矩形作用来表征人脸。并且该算法中用以检测人脸的分类器是采用的级联结构,按照由弱到强的顺序组织的,其优点在于按照统计概率,在图像检测的一开始就能够将大部分不包含人脸的区域排除在外,省去了后面计算负载更重的检测步骤,以此达到检测速度提升的目的。经过实际测试,P3 700MHz的处理器对352*288的图像进行检测的速度为15帧/秒。但是如果在嵌入式平台上运行的话,纯软件的检测速度则为2帧/秒。本设计将这种快速检测算法转化成了一种并行处理图片像素点的硬件结构,能够大幅度提升图像中的人脸检测速度。

目标平台

Virtex5系列FPGA是Xilinx最新一代基于65nm的FPGA产品。相比上代产品,速度平均提高30%.其改进后的六输入的查找表(LUT)和新型对角互连结构,减少了逻辑层次,增强了构造块之间的信号互连。

基于Adaboost算法结合Virtex5平台如何提升FPGA器件的性能

本文系统的实现主要用到了两类逻辑资源来优化系统性能:DSP48E Slice:25x18位二进制补码乘法器能产生48位全精度结果。此功能单元还能够实现诸多DSP模块如乘累加器、桶形移位器、宽总线多路复用器等。

Block RAM:可配置成2个18 Kb或1个36 Kb的Block RAM,也能够配置为双端口RAM或FIFO,并提供了ECC校验检查功能,提高了系统可靠性。

硬件系统结构

本文采用了一种像素积分单元阵列的结构来实现对图像进行人脸检测的并行性处理[4,5]。该阵列的计算对象为Haar特征。该特征被抽象为各种尺寸大小的矩形。一系列的矩形组合起来即被用来表征人脸。黑白矩形内像素的灰度值经过加权求和后即为该特征的特征值。积分图ii的定义是:

其中ii(x, y)是积分图在点(x, y)处的积分值,i(x‘, y’)是图像在点(x‘, y’)处的灰度值。利用积分图可以快速计算矩形S的灰度和,即Sum=A+D-B-C,其中A、B、C、D是积分图中矩形顶点对应的积分值。

系统结构框图如图3所示,整个系统的工作流程和各模块功能阐述如下:

图像输入模块:系统输入端外接一个模拟摄像头,采集到的图像信号经过板上的A/D芯片转换成ITU-R BT.656 (YCrCb 4:2:2,8位数据宽度)分辨率为352x288(CIF)的图像格式。该模块的作用为当检测控制状态机发送初始化信号后,通过I2C总线配置A/D芯片完成信号转换。另外,由于BT.656格式混合包含了视频的场信息和图像数据,因此该模块还要从BT.656信号中提取出图像数据存放到图像RAM中。针对该实现,RAM大小为8位宽度,深度为101376.

像素积分阵列:像素积分单元阵列是本系统中进行快速人脸检测的核心处理模块。在将图像进入片内RAM后,系统将采用20x20的移动窗口对整幅图像进行扫描处理。每个周期的开始阶段,检测窗口包含的一行(20像素)的灰度值由底部进入积分阵列,积分阵列上部输出按从左至右方向的行像素值的积分和,右部则输出每行按从左至右方向的像素值的平方和。阵列中的灰色方格则保存了检测窗口对应原始图像部分的像素积分值。阵列中的带竖线和右斜线的方格表示了存储特征所包含的矩形权重和特征相似度等参数的流水线。在整个扫描窗口的像素积分值都进入此阵列后经过左侧编码模块的编码控制后,从阵列的右侧可以得到当前一级分类器所包含的矩形的像素灰度值。此灰度值被送到右侧的检测模块(如图4):首先会和当前一级分类器中对应特征的权重weight相乘,然后将乘积进行累加后即得到当前区域对应此特征的特征值。接着这个值会与分类器中的特征阈值a比较,从而选择对应的特征相似度γo(大于等于a )或者γ1 (小于a ),此相似度值也将被累加,当该级分类器中所包含的全部特征的特征相似度都累加完毕后会与最终的该级的检测阈值β比较。比较后的结果显示了该窗口区域是否包含了人脸,1即为包含,0即为不包含。如果包含人脸,此模块还将把当前检测到的人脸的区域信息(包括矩形的左上角起始坐标和矩形长、宽)保存在一个专用的存储区域,以用于后面的结果输出。

人脸信息处理单元:像素积分单元阵列检测到人脸后,此单元将首先保存检测到的人脸位置信息。如同检测阶段中分类器中的特征包含的矩形表达式一样,人脸位置信息也是由起始点坐标和矩形的长、宽组成:(x, y, width, height)。接着根据此信息控制后一级的视频输出模块用以显示人脸。读取(x, y),在图像RAM中检索到对应人脸的起始点的地址,往该地址中写入像素值0.接着纵坐标不变,延x轴方向只至x+width-1的点的像素值均更新为0.然后是绘制人脸的纵向边界。保持横坐标为x+width-1,y坐标依次增1只至y+height-1,将此列对应点的像素值更新为0.后面再按照类似的方法折回完成余下的人脸边界的标识。此时存放在RAM中的检测后的图像数据被送入到视频输出模块,该模块以800x600的分辨率将最后的检测结果显示在VGA屏幕上,在屏幕显示中,被黑色方框包围的区域即是人脸。

图像缩放单元:此模块用以检测图像中大于20x20像素的人脸。本文采用的是固定大小为20x20的移动窗口,以从上至下,从左至右的方向遍历扫描整幅图像来检测人脸。对原始图像数据扫描完一遍后,能够直接检测出图像中大小在20x20以内的人脸。然后有检测控制状态机负责启动该单元模块,以一定系数对原始图像进行缩小处理。处理方法采用的是按照缩小比例生成提取像素点的地址,并将这些像素点重新组成缩小后的图像。其计算公式如下所示,其中( x0 ,y0 )和(x1 , y1)分别为原图像和缩小后的点坐标,scale参数为查表所得:

测试结果该系统在Xilinx ML509开发板上进行测试,该开发板上采用了一块XC5VLX110T-FF1136的FPGA芯片,测试方案为:将摄像头实时采集到的图像送进系统视频输入模块,然后经过拨码开关来控制板上的AD9880芯片转化为384x288的8位灰度图送入核心检测模块检测并输出在VGA显示器上。整个系统逻辑资源占用情况如表1所示。表2为最后系统能够运行的最高频率。

结论

本文创新点在于采用了一种像素积分单元阵列结构,能够对Adaboost算法中的Haar特征进行并行处理。结合Virtex5平台丰富和特殊结构的逻辑资源,得到了理想的性能,甚至已经能够和高性能的PC平台相提并论。从结果中可以看到,本系统只使用了部分资源。通过在FPGA芯片内部例化更多的处理单元,还有进一步增大并行性以取得性能提升的空间。




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]