单目视觉下基于图像裁剪的行人小目标检测算法
2021-07-08穆晓芳郭怡凡
穆晓芳,郭怡凡,李 越
(太原师范学院 计算机系,山西 晋中030619)
0 引言
近年来,随着计算机技术的发展,越来越多的学者对于深度学习有了更深入的了解,并将其应用到目标检测算法中[1].目前基于深度学习的目标检测算法主要分为两类,一类是两阶段目标检测算法,此类算法检测精度较高,但其检测速度慢.例如:R-CNN(Region-conventional Neural Network)、Fast R-CNN、Faster RCNN等.另一类是单阶段的目标检测算法,例如:SSD(Single Shot Multibox Detector)、YOLO(You Only Look Once)系列、PP-YOLO等.此类算法通过在CNN中提取特征达到预测物体分类和位置信息的效果,检测速度较快,但在检测精度方面仍有缺陷.为弥补单阶段目标检测算法的精度不足(尤其是对小目标的检测),近年来国内外相关研究者提出了多种优化方案,部分学者从网络的结构上进行调整,通过在深层次的模型中提取浅层模型的特征来弥补CNN(Convolutional Neural Networks)深层次特征的信息丢失问题.例如:DSSD、FPN、SPPNet、PANet、DenseDet深度可分离卷积等.
基于以上的研究,本文提出了一种基于图像裁剪的行人小目标检测算法,并使用单阶段目标检测器SSD进行测试.经实验得出,裁剪后的图像中小目标检测率更高,且在保证实时性的基础上提高了小目标的检测精度.
1 相关算法与模型
1.1 SSD模型
SSD模型最初由Liu[2]等人提出,该模型的主干网络为VGG16,图1为其网络结构图.该模型的输入图片尺寸为300*300,该网络结构共有6个特征图,通过利用不同层特征图的优势分别预测不同尺寸的物体,检测小目标时用含有更高分辨率的浅层特征图,检测较大的物体目标时用包含丰富语义信息的深层特征图,解决了仅用单层特征检测精度不足的缺点.最后使用非极大值抑制法过滤掉冗余检测框,产生最终检测结果.但SSD模型用于提取小目标特征的浅层特征图数量较少,造成对小目标的细节特征信息提取不充分,出现漏检、误检等现象,导致检测准确率较低.
图1 SSD模型图
1.2 ROI高频感兴趣区域
在视频数据中,数字图像存在着多种冗余容易导致检测效果下降.例如,在一些固定的行人监控场景下,行人往往只会从几个特定入口进入该监控区域,若去掉背景冗余信息,只对图片中人员活动频繁的高频感兴趣区域进行检测,可提升图像或视频中关键目标的检测精度.在以往的两阶段目标检测算法中,有三种提高视频图像检测精度的方法:图像金字塔[3]、滑动窗口法和非极大值抑制法[4,5].往往将这三种方法组合使用,可明显提高目标识别的检出率.滑动窗口法与图像金字塔一般配合使用,不断对金字塔中更小的上一层图片进行滑动窗口检测,再使用非极大值抑制法去除冗余的检测结果(即图像裁剪),最后在图片中进行局部最大搜索并选取检测结果得分较高的,使其权衡召回率和精确度.例如Fast R-CNN[6]中加入了ROI(Region of Interest,感兴趣区域)Pooling层,将大小不同的候选框映射为固定尺寸的的矩形框.这样做有利于后面的目标分类工作和输出回归框操作,而且加快了模型的处理速度.同时为了提高检测的精确度,选择区域时需要尽量多地选择候选框来确保召回率,如果漏选,则漏选区域不会判定类别所属.这样导致了候选框在分类时大部分都会被判定为背景区域,造成大量的额外运算,使得检测速度减慢.
在实际应用场景中,可以通过使用去除图片背景中的冗余信息找出需要检测的感兴趣区域.根据实际研究内容的范围,通过进行图像分幅裁剪(Subset Image)操作达到图像冗余去除的效果.一般情况下选用规则分幅裁剪,即确定图像的裁剪位置将图像裁剪为矩形状.
2 算法设计
SSD检测模型在场景中对行人进行检测时,较小行人目标的检测效果并不理想.在检测速度方面,由于场景中存在大量的冗余信息,使得检测模型在执行过程中,存在大量的冗余检测且影响检测精度.基于以上问题,本文设计了图像裁剪和SSD模型相结合的行人检测算法,对输入图像使用图像裁剪预处理操作,达到对关键目标的精确查找,提升了目标检测率.图2为本文设计的行人检测算法流程图.
图2 行人检测算法流程图
2.1 图像相关
在固定监控下的视频数据中,图像序列不同帧之间是否存在相关性,指的是相似性程度和相关匹配程度是否较高.本文将同一场景下的两幅相邻帧图像随机均切分为多个子图像,并计算两幅图像切分后对应子图像的相关系数.若相关性较高则表示对应的子图像相似度高,即为冗余数据,可通过图像裁剪去除.若相关性较低则表示对应的子图像相似度低,说明该区域行人活动较多,即为需要求出的高频ROI.本文采用spearman相关系数,即斯皮尔曼等级相关系数[7],计算过程如式(1)所示:
字母ρ表示相关系数.其中,x、y分别为两幅图像对应像素值.表示平均像素值.其相关系数依据单调方程来估计变量间的相关性,若数据中无重复值且两个变量完全单调相关,则相关系数则为+1或-1[7].当相关系数为+1时,表明像素间存在相关性,反之则存在无关性.
上述相关系数只能用来表示图像间的相关性,其相关程度并不能完全表示.为得到更精确的图像所需数据量,尽可能剔除多余的数据,验证图像之间的相关程度,此处引入费雪变换[8],对切分后的两帧图像对应的子图像进行显著性验证.费雪变换可验证被观测数据的ρ值是否显著不为零,其显著性越明显,则证明其相关性越高,反之显著性越低,不相关性越高,通过这种方法来验证两幅对应子图像之间的相关程度.费雪变换计算公式如式(2)所示:
ρ总是有-1≤ρ≤1,设ρ的Fisher变换为F(ρ),切分后的每个子图像都可以看作是一个样本数据,n为该样本数据的总数,则
z是ρ的置信区间的值,显著性为:
t的计算过程如公式4所示.
通过对相邻帧对应的子图像进一步验证显著性后,判断其相关性.如果相关性较高,则说明裁剪区域产生冗余,并未产生ROI区域;若相关性较低,则说明裁剪区域并未产生冗余,为ROI区域保存至最终裁剪.
2.2 图像裁剪
计算出两幅图像的相关性系数之后,针对图像相关性系数较小的区域,采用差异函数,即用图像处理库PIL中的ImageChops.difference函数,计算“两个图像之间逐像素差异的绝对值”,并返回差异图像,对其不同区域进行比较,输出两幅图像的不同区域图并用矩阵表示,如图3所示,可以看出像素值横坐标在0~1 500,纵坐标值在200~1 000范围内两幅图像之间的不同:
图3 同一场景下不同时刻的区域对比图
通过图3中两幅图的对比,我们可以看出在没有发生变化的区域,例如左边有壁画的墙壁、上方的天花板、右侧的玻璃窗等区域,像素值的变化基本没有浮动,接下来我们选用规则分幅裁剪,选取裁剪的起始横坐标、纵坐标及裁剪终止的横坐标、纵坐标,进行切片操作.横纵坐标的选择即为图像裁剪后的高频ROI的起始横纵坐标.
图4是进行规则分幅裁剪后的图像对比:在原来的图像中可以看出,个别远处的小目标由于包含的特征数少,包含的像素小,占据整个图像的比例较小,且容易受到背景的干扰,目标背景复杂度高、受光照或遮挡影响、小目标边缘信息不显著等原因,使得远处的行人小目标检测效果较差.经过图像裁剪后的图像局部特征表达更明显,个别远处的小目标由于包含的像素值变大,占据整个图像的比例变大,可使得远处的行人小目标检测效果变好,本文通过大量实验验证了该算法的有效性.
图4 图像裁剪前后对比图
2.3 SSD模型检测
SSD模型在进行检测图像时,针对不同尺寸的图像,进入SSD模型后都会被resize为同一尺寸(300*300)进行检测.如果输入的图像像素高于300*300,在被SSD模型检测时,resize为300*300的图像时会降低分辨率,导致图像失真.而输入的图像像素低时,会resize为300*300的高像素图,此时内部的一些细节会被扩充,对于小目标的特征也会更明显,检测小目标就会有更好的效果.如图5所示为不同尺寸图片拟resize后对比图:
图5 图像裁剪前后对比图
3 实验分析
3.1 数据集与实验环境
本文所使用的数据集取景于某商场大厅内的监控视频数据集.实验操作系统为windows10,CPU为AMD Ryzen 7 3700X8-Core Processor 3.59GHz内存:32GB,GPU:NVIDIA 3080,GPU显存:10GB.程序设计平台语言为Python,用到处理图像的OpenCV、搭建算法模型的Pytorch,并同时安装了CUDA10.2和cudnn7.4.2以支持GPU的使用.
3.2 实验结果与分析
本文选取了五组监控摄像头下的图片进行实验,表1为实验结果图.从表1中可看出,每组实验经过图像裁剪后的行人检测效果均有所提升,除实验2外其余各组实验检测目标个数均增加且平均正确率(即IoU值,预测边框与真实边框的交并比)提高.通过实验4,可以得出其检测时间相比原来快了0.004s,说明通过此改进保证了单阶段目标检测算法的实时性.
表1 改进前后训练时模型的正确率
另外,本文列出了实验4和实验5的改进前后检测结果图,如图6所示.子图a和子图b为实验4的检测结果.子图c和子图d为实验5的检测结果.实验4中原始SSD算法检测了16个行人目标,而改进后的SSD算法检测到了19个行人目标.实验5中改进后的SSD算法有效地检测出了22个行人目标,而使用原始SSD算法漏检了5个行人小目标.由此可见,原始SSD算法检测时存在目标漏检的情况,而改进后的SSD算法可以有效检测出更多的行人小目标.
图6 图像裁剪前后检测对比图
图7 为进行多组实验后得出的改进前后训练时模型的TOP5平均正确率对比图.通过多组人数不同的图片进行对比,改进后的SSD在行人小目标检测的平均正确率上与原SSD相比有所提升,进一步说明本文所提出的算法在行人小目标检测方面有所提升.
图7 改进前后训练时模型的正确率对比图
4 结语
针对通用的目标检测算法在检测小目标时效果不佳、漏检率较高的问题,本文对固定单目视觉监控场景下的小目标检测问题,设计了一种基于图像裁剪的行人检测算法.在目标检测前,先对传输的数据进行图像裁剪预处理,再将处理后的图像使用SSD算法进行目标检测,通过实验前后对比,有效提升了小目标的检测率.但目前改进的算法仅适应于固定单目视觉监控环境中,而实际应用中往往是运动环境或者多目视觉场景中,因此,今后将进一步研究复杂场景下的小目标检测技术,提升目标检测算法的识别效果.