APP下载

基于改进的ViBe 和YOLO v3 算法的行人检测方法

2023-03-05李士骥李忠民李威

红外技术 2023年2期
关键词:鬼影像素点行人

李士骥,李忠民,李威

(南昌航空大学 信息工程学院,江西 南昌 330063)

0 引言

背景提取是一种目标检测算法,其准确性、实时性和鲁棒性较好[1]。ViBe 算法[2]是背景提取算法中的一种像素级的前景检测算法,这种算法检测迅速、检测精度优异。虽然这种算法的性能十分优异,但其仍具有不足之处。比如,算法所存在的鬼影问题就是影响算法性能的最主要原因之一。所谓鬼影,是指在没有运动目标的区域中被错误检测出的前景区域,也就是不真实的前景[3]。

对于如何解决鬼影的问题,许多学者提出的解决措施中,主要包含两种处理方式:一是对背景模型初始化作出改进。比如,文献[4]使用多帧图像进行背景模型的初始化。文献[5]将最大类间方差法(OTSU)[6]引入到帧间差分法中,把前面几帧图片加以适当的处理,组成一张背景样本图像,以这幅图片为依据来创建初始的背景模型。文献[7]用视频的前25 帧图像中的像素点及其它邻域的像素点中的像素值来初始化背景模型。此方法的背景模型初始化需要通过多帧图像来建立,而这会大大降低背景模型的初始化速度。但同时,此方法无法处理因背景突变而产生的鬼影现象。第二种处理方式是在前景检测的过程中对鬼影进行识别,若识别出鬼影,则将其视为背景。比如,文献[8]比较了前景目标与相邻背景像素的直方图,根据直方图的不同来辨别鬼影区域。文献[9]通过分析前景的像素值来进行鬼影的消除。然而这种算法对速度慢并且颜色单调的目标的检测敏感性不高,容易将其误判为鬼影,并且算法较为复杂,无法确保实时性。

综上所述,当前消除鬼影的方法都具有一定的不足。为了解决鬼影问题,本文提出了一种基于改进的ViBe 和YOLO v3 算法的行人检测方法。算法采用YOLO v3-SPP 对首帧中的行人进行检测,将检测出的行人消除后,将输出的图像作为ViBe 算法的首帧,从而解决鬼影问题。

1 算法原理

1.1 ViBe 算法原理

ViBe 算法为每一个像素点都创建了一个背景样本模型,通过比较当前帧与背景模型中相对应位置的像素值,并由预设的阈值将其定为背景点或前景点。一旦像素被确认为背景点,则随机更新其背景模型里的一个样本值。同时基于空间一致性原则,将其邻域像素背景模型中的一个样本值进行随机更新。ViBe 算法主要由3 部分组成,即背景建模、前景检测和背景模型的更新。

1)背景建模

背景模型是背景样本的集合。在背景模型的初始化过程中,从一帧图像每个像素的八邻域中随机选择N个像素的灰度值存放到背景模型样本中。背景模型也可以描述为:

式中:M(x)为背景样本;vi表示背景模型样本中的像素值;N表示样本的大小。

2)前景检测

将当前的像素值与背景模型中同一位置像素的样本作比较来判定当前像素点是否为前景。如图1 所示,v(x)为当前帧图像中的像素x的像素值;C1与C2组成了二维的色彩空间(C1,C2);SR(v(x))是以v(x)作为圆心的圆形区域,R是此区域的半径;v(x)与背景样本模型之间的相似程度由SR(v(x))所包含的M(x)的样本数M来描述。当M大于或者等于设定的阈值时,判定v(x)为背景;当M小于设定的阈值时,判定v(x)为前景。

图1 当前帧像素值与样本值在二维色彩空间的比较Fig.1 Comparison of current frame pixel value and sample value in two-dimensional color space

3)背景模型的更新

本文中,ViBe 算法的背景模型更新方法使用了随机更新策略。设定抽样因子为λ。假设第二步前景检测过程后,算法判定当前像素点为背景像素点,那么它会有1/λ的概率更新其在背景模型中的样本值,并将随机替换样本模型中的一个样本。每一个样本经过时间Δt仍被保存的概率可以描述为:

该过程将有助于确保样本生命周期的平滑。基于图像空间的一致性原则,该算法可以通过相同的方式与概率随机选取八邻域中的一个像素来更新其背景模型。

1.2 YOLO v3-SPP 介绍

YOLO v3 借鉴了在Faster R-CNN 中提到的锚框(Anchor box)机制[10]。为了增强检测的精度,采用K均值聚类算法得出边框的尺寸,从而获得合适的锚框[11]。同时,采用特征金字塔网络(feature pyramid networks,FPN)来实现多尺度预测[12],检测时可以应对不同尺寸的物体,因此能够大大提高对精细物体的识别能力。YOLO v3 结合了锚框和特征金字塔网络的思想,每个网格可以预测3 个预测框,并选择具有最优交并比(IoU)的锚框作处理后作为输出的预测框。

YOLO v3 使用Darknet53 网络为主干,舍弃了最大池化层,采用步长为2 的卷积层作为代替。

由于YOLO v3 算法在行人遮挡检测上的漏检率较高,不利于对图像进行特定的处理,所以对网络结构进行改进以增加算法的准确率与检测精度。

YOLO v3-SPP 是提出的YOLO v3 算法的增强网络。与YOLO v3 不同的是,它在网络的YOLO 层前增加了一个SPP层,并为了避免过拟合而进行多尺度训练,从而能够增加检测精度(在COCO 公共数据集上)。

SPP 层的基本构造如图2 所示。利用5×5,9×9 与13×13 这3 个最大池化层对特征图进行池化,再连接起池化后的特征图,并将其传输到下一层网络中[13]。

图2 SPP 层结构Fig.2 SPP layer structure

加入SPP 层的YOLO v3 算法(YOLO v3-SPP)的结构如图3 所示。

图3 YOLO v3-SPP 结构Fig.3 YOLO v3-SPP structure

2 基于YOLO v3 SPP 的改进ViBe 算法

2.1 鬼影问题

ViBe 算法为了提升初始化的速度,通过只处理视频图像的首帧来对背景样本模型作初始化。但是这种措施存在着不足,当待检测的运动前景存在于首帧时,会使后续检测中出现鬼影。如图4 所示。

图4 鬼影问题展示Fig.4 Ghost problem display

2.2 提出的改进措施

因为鬼影产生的原因是第一帧中出现了运动目标,所以利用YOLO v3-SPP 算法本身对静止行人目标的检测优势,在进行背景初始化之前,对首帧图像进行行人检测。检测出行人后,将检测出的行人进行消除,从而避免鬼影的产生。

基于YOLO v3 SPP 的改进ViBe 算法框图如图5所示。

本文使用PASCAL VOC2012 数据集对YOLO v3-SPP 网络进行训练后得到权重文件。在输入待检测的视频后,对首帧作处理。利用训练好的权重文件进行行人检测。整幅首帧图像可以分为两部分,即前景部分与背景部分。针对背景部分的像素点,与传统算法的背景初始化步骤一致。针对前景部分的像素点,采用以下的行人消除方法对行人进行消除。具体步骤如下:

1)将每个检测出的行人,分为6 个部分。如图6所示。

图6 分成六部分的行人Fig.6 Pedestrians divided into six parts

2)如果检测出的行人不在图像的边界处,则用行人周围的像素来代替图6 中各方框内的像素值。代替规则如下:

①和②分别用各自上方的像素值来代替。③和④用各自两边的像素值来代替。

⑤和⑥分别用各自下方的像素值来代替。

3)如果检测出的行人在图像的边界处,则基于2)中的规则,做出适当的调整。具体调整如图7 所示。

像素代替方法的总流程图如图7 所示。

图7 像素代替方法的总流程Fig.7 General flow chart of pixel replacement method

用这种方法可以将首帧中的行人进行消除。行人消除的效果如图8 所示。

图8 行人消除的效果Fig.8 Effect of pedestrian elimination

用处理好的首帧图像进行初始化背景建模,再用ViBe 检测行人,对鬼影的消除效果如图9 所示。

图9 鬼影消除的效果Fig.9 Results of ghost elimination

可见,本文算法可以有效地解决鬼影问题,并改善算法的检测性能。

3 实验结果分析与评价

3.1 实验结果分析

根据以上的算法描述,选择PETS2006[14]测试视频来进行实验验证。实验环境和参数如下:Windows 10 系统,AMD Ryzen 5 2600X Six-Core Processor CPU,3.60 GHz 主频,16.0 G RAM,Python 3.7。背景模型建立参数N=20,R=20。N为背景样本的容量,R为颜色距离判定阈值。

本文将提出的算法和ViBe 算法、三帧差分法[15](three-frame differential method,TFDM)、高斯混合模型[16](Gaussian mixture model,GMM)算法进行对比测试。三帧差分法是一种对视频中连续3 帧图像进行差分运算来检测运动目标的方法,这种方法的优点是计算量小,实时性较好。GMM 算法是有限个单一高斯分布的加权和,能反映各个像素点不同的分布情况。

测试视频的检测效果如图10 所示,第1 行分别是测试视频中第534 帧、第564 帧和第583 帧的原始图像。第2 行是传统ViBe 算法对这3 帧原始图像的检测效果,可以清楚地看到用这种方法检测后所产生的鬼影;第3 行是使用三帧差分法(TFDM)对这3帧原始图像的检测效果,能够看出这种方法只能检测出运动物体的轮廓信息,而当物体运动比较快时,轮廓的部分信息也会丢失。第4 行是高斯混合模型(GMM)算法对3 帧原始图像的检测效果,可以看到,这种方法检测出的前景会出现部分缺失和空洞的现象。第5 行是本文所提出的算法,可以看出,本文所提出的算法可以有效地解决鬼影问题,并且检测出的运动目标完整无空洞。

图10 PETS2006 视频检测效果:(a)(b)(c)原始图像;(d)(e)(f)ViBe 算法;(g)(h)(i)三帧差分法;(j)(k)(l)高斯混合模型算法;(m)(n)(o)本文算法Fig.10 PETS2006 video detection effect: (a)(b)(c) Original image;(d)(e)(f) ViBe algorithm;(g)(h)(i) Three-frame difference method;(j)(k)(l) Gaussian mixture model algorithm;(m)(n)(o) The algorithm in our paper

3.2 实验结果评价

采用文献[17]中提出的方法对本文提出的算法进行定量评价。使用精确率(Precision)、召回率(Recall)以及F1 分数(F1-score)等指标,可以描述为:

式中:TP 与TN 分别为检测正确的前景像素与背景像素的数量;FP 与FN 分别检测错误的前景像素与背景像素的数量。一般来说,精确率与召回率越高,查准率和查全率就越高,算法性能就越好;F1 分数则为前两者的调和平均,F1 分数的值越大,算法的综合性能越强。表1 为对实验结果做出的对比评价,其中frame per second 指的是每秒处理的帧数,每秒处理的帧数越多,算法的实时性能就越强。可见,虽然三帧差分法的实时性较强,但其精确率明显低于本文提出的算法,而本文提出的算法在精确率、召回率和F1 分数上均高于其他3 种算法,综合性能最强。

表1 实验结果评价Table 1 Evaluation of experimental results

4 总结

本文首先对背景提取技术和ViBe 算法的优点与缺点做了总体上的描述,并对一些当前的改进ViBe 算法作出了介绍,然后详细介绍了ViBe 算法的原理与YOLO v3-SPP 的结构,并在此基础上提出了一种基于YOLO v3-SPP 的改进ViBe 算法以解决传统ViBe 算法中的鬼影问题。改进算法利用YOLO v3-SPP 对静止行人的检测能力来改进ViBe 算法本身的背景初始化策略,对检测出的行人进行了消除,从而解决了传统ViBe 算法由于首帧出现行人而产生的鬼影问题。本文选择在PETS2006 数据集下对所提出算法的性能与传统算法、三帧差分法和高斯混合模型算法进行比较测试。经比较后的实验测试结果表明,本文算法能够有效地解决传统ViBe 算法的鬼影问题,且检测效果得到提升。

猜你喜欢

鬼影像素点行人
毒舌出没,行人避让
基于局部相似性的特征匹配筛选算法
路不为寻找者而设
基于5×5邻域像素点相关性的划痕修复算法
基于canvas的前端数据加密
我是行人
基于逐像素点深度卷积网络分割模型的上皮和间质组织分割
如何消除胶印“鬼影”?
曝光闯红灯行人值得借鉴
基于单应性矩阵的图像拼接方法的对比分析