APP下载

基于ZYNQ的车载行人检测系统设计与实现

2018-04-19邓健峰

网络安全与数据管理 2018年3期
关键词:行人梯度摄像头

邓健峰,谢 云

(广东工业大学 自动化学院,广东 广州 510006)

0 引言

目前,随着汽车保有量的日益增多,道路安全问题日益突出,行人因为没有好的保护方法而容易受到伤害。2016年中国的道路交通事故死亡人数约为40 824人,与2015年的36 178人相比,增加了4 646人[1],可见,车辆装备具有行人检测功能的安全驾驶系统是有必要的。当前,行人检测技术越来越广泛,但由于行人检测复杂度高,数据处理量大,因此大多数行人检测平台一般采用PC来完成。但问题就是功耗和成本比较高。因此笔者采用Xilinx公司ZYNQ-7000 SoC开发板,设计了一种车载行人检测系统。开发板包含处理系统(Processing System,PS)和可编程逻辑(Programmable Logic,PL)两部分[2],PS端集成双核ARM Cortex-A9系列处理器,PL端包含Xilinx 7系列的FPGA。本系统采用软硬件协同设计的方法,移植操作系统Linux作为系统软件运行环境,满足准确度、低功耗和便携性要求。

1 系统总体框架

如图1所示,系统由6个功能模块组成,分别是采集模块、缓存模块、显示模块、行人梯度方向直方图(Histogram of Oriented Gradient,HOG)特征提取模块、支持向量机(Support Vector Machine,SVM)分类识别模块和IP核驱动模块。其中采集模块、缓存模块和显示模块在FPGA中完成,行人HOG特征提取模块、SVM分类识别模块和IP核驱动程序模块则在ARM中完成。FPGA与ARM之间的通信是通过高级可扩展接口(Advanced eXtensible Interface, AXI)完成的。

图1 系统构成图

系统主要模块功能如下:

(1)采集模块:采用摄像头采集数据,用户可以通过IIC协议[3]设置摄像头的工作模式。本系统设置RGB565、分辨率640×480的图像输出格式。

(2)缓存模块:采用IP核视频直接内存访问(Video Direct Memory Access,VDMA)[4]作为ARM和FPGA之间的数据传输工具,将图像数据通过格式转换缓存到外部储存DDR3中。

(3)行人HOG特征提取主要包括图像灰度化、图像缩放和特征提取。

(4)SVM主要对提取的行人特征向量进行判别。

(5)显示模块:由IP核视频定时控制器(Video Timing Controller,VTC)提供分辨率为640×480的显示时序,主要任务是将已经被方框标出的行人位置输出到VGA(Video Graphics Array)显示器上,并根据行人离摄像头距离远近变换方框颜色。

(6)驱动模块程序主要是IP核VDMA驱动,使得ARM处理器的软件程序可以控制FPGA中的IP核。

2 硬件系统(FPGA)部分设计与实现

本系统采用OV7670型号的摄像头来采集视频图像,因为摄像头上电后默认输出YUV422格式的视频图像,所以通过IIC协议改变摄像头的采集模式和输出模式。摄像头初始化完成后,在行同步(高电平有效)、帧同步信号(低电平有效)情况下,每两个像素时钟周期输出一个16位的RGB565的像素值,同时输出有效的写使能信号、行同步信号和帧同步信号。

系统采用DDR3缓存视频数据。在开发板结构中,DDR3是ARM控制的。AXI包括3种接口标准,分别是AXI4、AXI-Stream和AXI-Lite[5]。FPGA中的图像数据主要以AXI-Stream与ARM通信,所以摄像头采集的数据信号要转换成AXI-Stream的接口信号,而AXI-Stream不能直接和ARM相连[6]。本设计采用VDMA,通过AXI_HP(High Performance)接口将数据缓存到DDR3中[7]。ARM端读取DDR3数据并进行处理,处理后的数据通过AXI_GP(General Purpose)接口传到FPGA中[7],最后转换成RGB565格式输出。图2为分辨率为640×480的实景效果图。

图2 实景效果图

3 软件系统(ARM)设计与实现

本系统采用了“HOG+SVM”框架的行人检测算法,完整的行人检测流程如图3所示。

图3 行人检测流程图

3.1 HOG行人特征提取

本系统采用HOG作为行人特征。HOG提取分为6个部分:图像预处理、图像缩放、梯度计算、梯度统计、重叠Block标准化和特征组合,具体过程如下:

(1)原始图像灰度化,目的是弱化光照效果,减少图像信息。灰度值g(x,y)的计算公式为:

g(x,y)=0.3r+0.59g+0.11b

(1)

其中r、g、b分别为像素H(x,y)中红、绿、蓝的分量值。

(2)由于行人相对于摄像头的距离各有不同,会造成视频图像中行人的大小不一。本设计是利用滑动窗口扫描法检测图像中行人,滑动窗口的尺寸是64×128。为了能够提取出图像中大小不同的行人的特征,需要对原帧图像按照一定比例进行缩放操作,然后对每一尺度下的图像都利用滑动窗口遍历扫描[8],提取行人HOG特征,直到图像缩小到不小于滑动窗口的尺寸为止。缩放算法采用二维线性插值法,该算法计算复杂度不高,实现效果较好。

(3)对滑动窗口进行单元和块的划分,水平方向和垂直方向上的滑动窗口扫描步长均为8像素。用8×8像素的单元(cell)对窗口进行划分,形成了8×16=128个单元。把上下左右4个相邻的单元视为一个块(Block),一个块的滑动步长也是8像素,每一个像素的梯度方向范围为0°~180°,平均划分为9个区间。计算窗口里每个像素的梯度大小和方向。

像素点H(x,y)的梯度为:

Gx(x,y)=H(x+1,y)-H(x-1,y)

(2)

Gy(x,y)=H(x,y+1)-H(x,y-1)

(3)

像素点H(x,y)的梯度幅值为:

(4)

像素点H(x,y)的梯度方向为:

(5)

(4)空间和方向上的梯度统计,首先在cell中统计9维向量,一般像素点的梯度方向离散化到9个区间中,则它会对相邻的2个区间有影响(梯度方向如果在某个区间的中心,则认为只对该区间有影响),每个cell中的向量统计都是基于该cell中每个像素点进行投票,投票的权重根据该像素点的梯度幅值在方向和位置上三线性插值到相邻两个梯度方向中心上计算出来[9]。其次,在一个Block中,一个cell中的像素梯度方向对另一个cell的像素也有影响,统计Block梯度直方图时除了对单个cell的统计,还要考虑对其他cell的投影权重,因此采用三线性插值法求出权重。最后,因为每个Block按照一定的步长在水平和垂直方向上移动,所以Block与Block是相互重叠的,每个cell的梯度直方图在不同的Block中被重复计算,对Block中的特征向量使用L2-norm函数进行标准化能获得更好的检测效果[9]。

(5) 将所有的Block的特征向量组合得出(所检测的目标)描述子,在64×128的扫描窗口中,水平方向一共有7个Block,垂直方向一共有15个Block,一个cell的描述子为9维,一个Block的描述子为36维,整个扫描窗口的描述子就为3 780维,这样完成了行人特征提取。

3.2 SVM训练与判别

SVM是一种基于结构风险最小化原则的模式分类方法,可将多类的问题转化为多个两类的问题来解决[9]。使用SVM前先进行训练,然后再读取已经训练好的分类器(XML文件)进行行人检测,这样既节省时间,也不会影响检测率。当行人检测时,求每个检测窗口产生的3 780维向量与XML文件里的3 780维检测子向量内积,如果结果大于0则被认为检测到行人,并保存当前检测窗口的位置。分类器训练使用的是INRIA数据库,该训练库包含正样本集和负样本集,正样本集包含3 500张含有人体的图片,分辨率为64×128,负样本集包含1 200张不含人体的图片,每张随机截取10张分辨率为64×128的图片,一共为12 000张,得到特征向量矩阵A,利用A训练SVM分类器。当完成训练时,重新对负样本集进行行人检测,收集错误检测到的矩形框,把这些误判保存并加入原来负样本集中,重新进行SVM的训练,这样能显著减少误报。

3.3 窗口融合

当所有尺度下的图像检测完毕后,如果有行人就会输出滑动窗口的四点坐标,再用方框将其连起来,但这样同一个行人会产生尺度不同的行人方框,需要窗口融合算法将重叠的方框合并成一个方框,核心思想是将所有的矩形框分为若干类,初始为空,遍历所有矩形框,如果每两个矩形框的四个相应顶点的差值的绝对值都在0.5范围内,则认为属于同一类,否则是不同类。然后计算每一类别的平均矩形框位置,将类别中个数少于设定阙值的矩形框舍弃,只有当某一个类别中的矩形框个数大于设定的阙值,才保留该类别。最后将大矩形框里的小矩形框舍弃,得出融合的窗口,并在图像中表示出来。

3.4 VDMA IP核驱动设计

VDMA驱动程序是通过AXI-Lite接口向VDMA中不同功能的寄存器进行赋值实现的,因为FPGA和ARM之间图像数据传输是通过IP核VDMA传输的,所以用户需要控制VDMA来控制传输,当开始帧缓存前需要分配好每帧首地址。当ARM端进行数据处理,读取一帧图像数据时,VDMA写通道中断[10],帧缓存暂停,完成处理并显示后,帧缓存继续工作,以此循环。

4 实验结果与分析

本系统采用软硬件协同设计方式实现,利用了FPGA+ARM架构。FPGA部分通过VDMA将图像数据缓存到DDR3,由ARM做算法处理,最终将结果输出到显示器上。行人检测系统的评价标准是系统输出的矩形框能否包含行人躯体80%以上。软件性能测试结果通过准确率(Precision)和覆盖率(Recall)曲线描述,准确率和覆盖率计算公式如下:

(6)

(7)

首先从ETH行人数据库截取4段不同场景的视频在Linux系统上进行测试,4段视频分别是晴天,人多;晴天,人少;阴天,人多;阴天,人少,每段视频都是20 s,600帧图像。系统平均处理一帧图像需要0.45 s,在不影响正确率情况下,可以调整图像的缩放比例使处理速度加快。表1为4种情况下行人检测系统检测率和误检率统计结果。由表1看出,在晴天情况下,人多时的检测率要低于人少时的检测率,人多时的误检率要高于人少时的误检率。在行人数量相近的情况下,晴天时的检测率要高于阴天的检测率,晴天时的误检率要低于阴天时的误检率。图4是行人检测部分的准确率和覆盖率曲线图,从图中可看出,当准确率达到85%时,覆盖率达到70%,当覆盖率达到85%,准确率也达到72%,基本达到预期效果。

表1 行人检测系统检测率和误检率

图4 行人检测的准确率和覆盖率曲线图

图5、图6是行人检测系统校园实景测试效果图。图5是行人比较多的画面,图中出现的方框大小、粗细不同表示行人距离摄像头的远近不同,线条粗的表明行人距离摄像头较远,线条较细的表明行人距离摄像头较近。

图6是行人比较少的画面,存在漏检现象,主要是因为行人距离摄像头较远,光照不足而导致,但基本达到理想预期。

图5 行人较多的检测结果图

图6 行人较少的检测结果图

5 结束语

本文在ZYNQ平台上进行嵌入式软硬件协同设计,结合梯度直方图和支持向量机算法进行行人检测,在FPGA端实现了图像采集和显示功能,在ARM端进行行人检测和分类。该系统已经进行了测试,当准确率达到85%时,覆盖率达到70%,当覆盖率达到85%,准确率也达到72%,达到基本应用要求。行人多时准确率不高,主要是行人遮挡影响了准确率。误检主要是因为行人的影子、诸如路灯和树这些柱状物体的干扰。行人的服饰与背景相似、光照不足是造成漏检的原因之一。如果要降低漏检率就要增加包含人各种动作的正样本来训练SVM,在SVM分类器选择上,可以采用非线性和线性分类器级联,以提高检测速度。本系统实现了一种低功耗、灵活的嵌入式行人检测系统,在实际应用中有比较大的意义,具有良好的发展潜力。

[1] 中华人民共和国国家统计局.中华人民共和国2016年国民经济和社会发展统计公报[N].经济日报,2017-03-01(5).

[2] 孟繁星.基于ZYNQ-7000的视频图像处理系统设计[J].信息通信,2015(8): 60-62.

[3] 莫长江,李俊宏,骆绮健,等.基于ZYNQ AP SoC的安全驾驶系统设计[J].电子产品世界,2017(Z1):38-41.

[4] Xilinx.LogiCORE IP AXI video direct memory access v6.3[EB/OL].[2017-10-04].http://china.xilinx.com/support/documentation/ip-documentation/axi-vdma/v6_3/pg020_axi_vdma.pdf.

[5] 郑建立,漆荣辉,张璐.基于AXI4-Stream总线的数字视频采集接口IP核设计[J].电子科技,2016,29(9):161-165.

[6] 曾爽,应骏,王健,等.基于ZYNQ的人脸检测的快速实现[J].电视技术,2015,39(15):144-147.

[7] 陆佳华,潘祖龙,彭竞华.嵌入式系统软硬件协同设计实践指南:基于Xilinx ZYNQ[M].北京:机械工业出版社,2014.

[8] 梁新宇.基于ZYNQ的行人检测系统的软硬件协同实现[D].大连:大连海事大学,2016.

[9] 徐光柱, 雷帮军. 实用性目标检测与跟踪算法原理与应用[M]. 北京:国防工业出版社,2015.

[10] 符晓,张国斌,朱鸿顺.Xilinx ZYNQ-7000 AP Soc开发实战指南[M].北京:清华大学出版社,2016.

猜你喜欢

行人梯度摄像头
浙江首试公路非现场执法新型摄像头
一个带重启步的改进PRP型谱共轭梯度法
摄像头连接器可提供360°视角图像
一个改进的WYL型三项共轭梯度法
毒舌出没,行人避让
一种自适应Dai-Liao共轭梯度法
一个具梯度项的p-Laplace 方程弱解的存在性
路不为寻找者而设
我是行人
曝光闯红灯行人值得借鉴