密集交通场景的目标检测算法研究

2020-07-15 05:01王海燕
计算机技术与发展 2020年7期
关键词:密集类别损失

李 轩,李 静,王海燕

(沈阳航空航天大学 电子信息工程学院,辽宁 沈阳 110136)

0 引 言

自深度学习发展以来,目标检测领域已经取得了很大进展[1-4],基于区域建议和回归思想的目标检测算法相继提出,在准确率和检测速度上都有较大的提升。但密集场景的目标检测一直是计算机视觉领域中的难点问题。在现实的交通场景中由于人为因素造成的目标遮挡阻塞情况十分常见。造成密集场景检测困难的原因分为两种,一种是由同类目标相互遮挡造成的类内遮挡,另一种是由不同类之间相互遮挡造成的类间遮挡。在常用的交通场景数据集中类内遮挡较为常见,在City Persons数据集[5]中类内遮挡率达48.8%,在KITTI数据集中遮挡和截断率也接近50%,因此在检测过程中极容易出现漏检、重复检测等情况。

近年来在密集目标检测领域中已经取得了一些成果。例如,Wang等[6]提出了一种排斥力损失函数,在有效吸引真值框和预测框相互接近的同时排斥由其他物体真值的影响,但在现实操作过程中很难掌握吸引和排斥之间的平衡。文献[7]从正负样本量入手,通过Focal Loss重新定义交叉损失熵,改变难分样本占总loss的权重,提高对负样本的判断能力,改进了one_stage算法对密集目标的检测能力。文献[8]使用Jaccard index作为评估检测质量分数,重新定义了IoU Loss,提出新型的EM-Merge 单元,致力于解决检测框重叠歧义问题。尽管在密集场景中的检测已经取得了一些进展,但如何在复杂的遮挡环境下准确地对目标进行定位仍然是交通场景检测中的难点。

1 基本原理

文中在实验过程中发现由于人为因素造成的目标密集遮挡问题,使面积相对较大,包含特征因素更多的检测框往往有更高的置信度,这容易在非极大值抑制时使真正更为准确的检测框被抑制掉造成目标的漏检。如图1所示,在检测过程中,行人A(左)和行人B(右)之间位置接近,在判断特征得分时极容易出现特征的混淆和重叠,因此图中实线预测框相比虚线预测框有更高的置信度,在后置的非极大值抑制中导致定位更为准确的预测框被当作同一目标的冗余框而被抑制掉。造成这种目标错检可能存在两种情况,一是特征提取不够完善,二是学习过程没有针对性。解决第一种情况需要学习更强壮的特征信息,扩增数据集训练样本,文中采用mixup[9]算法重构数据集,将任意两张图像以一定比例融合,构成新的样本集,神经网络学习的样本数量成倍增多;针对第二种情况,文中提出一种新的损失函数Occlusion Loss,Occlusion Loss中包含两项内容即IoG Loss和UoG Loss。IoG Loss用于衡量图1中虚线检测框和阴影之间的相似度,UoG Loss用于降低实线检测框对整体检测的影响。

图1 相互遮挡造成的错误检测情况

2 相关工作

2.1 Occlusion Loss损失函数

(1)p∩g尽可能大,保证检测框和真值框尽可能匹配;

(2)在满足条件1的情况下p尽可能小,防止出现一个检测框对多个目标的情况。

基于以上两点考虑,文中使用IoG和UoG作为损失函数,而不是传统的IoU。IoG定义为:

(1)

在IoG的定义中,用真值框g取代了p∪g,g是待检测样本的自然属性,在整个检测过程中保持不变,希望神经网络能够通过增大p∩g的值不断拟合预测框和真值框的相似程度,并且在这个学习过程中损失函数能不断减小,因此定义LIoG损失函数为:

(2)

在IoG函数中已经能够匹配位置相对准确的框,UoG函数用来抑制在同等匹配情况下检测面积更大的预测框,UoG定义如下:

(3)

(4)

LUoG、LIoG算法流程如下:

Algorithm:IoG,UoG回归框损失

计算P面积

计算G面积

计算P,G相交区域面积

计算

LIoG=exp(-IoG),LUoG=sigmoid(UoG)

2.2 YOLOv3检测框架

文中采用YOLOv3算法作为主体框架进行实验。YOLOv3网络主体为Darknet53残差网络,并结合多尺度检测,已经成为目前为止最优秀的目标检测算法之一,常用在交通、工业等多种场景中[11-14]。在检测过程中首先将图片划分为S×S个小格,当目标中心落在某个小格时该小格负责预测这个物体。YOLOv3借鉴了类似FPN网络[15]的金字塔结构对特征图进行了上采样和融合做法,分别在13×13,26×26,52×52三个尺寸上进行检测。每个单元格首先借助anchor box预测3个检测框,每个检测框预测4个相对坐标值即中心坐标(x,y)与目标宽w和高h,再根据卷积神经网络输出的坐标对anchor box进行修正,修正过程公式如下:

bx=σ(tx)+cx

(5)

by=σ(ty)+cy

(6)

bw=pwetw

(7)

bh=pheth

(8)

其中,cx,cy为目标中心所在小格相对于左上角的偏移量,tx,ty,tw,th为网络学习输出,pw,ph为预设锚点的宽高,坐标的损失函数采用平方误差损失函数。

在类别预测方面,YOLO原有的softmax层假设一张图片或者一个待检测物体都只属于一个类别,但这并不适用于复杂的场景,在复杂的场景中一个待检测的物体可能分属于不同的类别,存在多个标签,因此YOLOv3采用逻辑回归层进行类别预测。在逻辑回归层加入sigmoid函数对输出类别概率值进行限制,概率大于0.5,就表示属于该类。类别公式计算如下:

Pr(object)*IoU(b,object)=s(t0)

(9)

在损失函数上,YOLOv3整合了均方误差调整目标相对单元格的宽高,二值交叉损失熵调整置信度得分,类别信息和中心坐标可抽象表达为:

loss=∑coord_Err+conf_Err+class_Err

(10)

YOLOv3并没有将检测匹配度作为学习的模块,十分适合文中的算法移植。

文中算法检测流程如图2所示,首先经过DarkNet 53进行特征提取,利用多尺度特征的原理在13×13,26×26,52×52三个尺度的特征图上分别对同一目标进行不同尺度的预测。在训练过程中加入了LIoG指导神经网络学习更准确的定位,LUoG防止检测框中多个特征的情况,得到最终输出结果。

图2 YOLOv3算法检测过程

2.3 数据集

文中算法在自动驾驶数据集KITTI上进行测试。KITTI数据集是目前交通场景中公认的大规模算法测试数据集,数据量达12 G。存在行人、车辆的互相遮挡截断情况,反映了现实中复杂的交通场景。文中定义两个目标重合度IoU在0.5以上为遮挡阻塞情况,车辆阻塞和截断情况占总数的40%以上,行人间的遮挡占总数的30%左右。

文中检测主要针对类间遮挡情况,将KITTI原数据集重新整理,‘Van’,‘Truck’,‘Tram’标签都重新标定为‘Car’类,‘Person_sitting’标定到‘Pedestrian’类中,最终检测类别为‘Car’,‘Cyclist’,‘Pedestrian’。另外将KITTI训练集重新划分得到新的训练集4 000张,验证集400张,测试集3 081张,评价指标基于重新划分数据集的结果。表1展示了经过处理后的数据集各类别样本的数量情况。

表1 KITTI数据集样本数量统计

3 分析与讨论

文中算法在开源框架Keras上实现,电脑配置为Intel(R) Core(TM) i3-4170CPU@3.70 GHz,运行内存8 G,显卡1050Ti,操作系统为Windows 10。

3.1 训练方法

训练阶段参数设定动量为0.9,权重衰减率为0.005,初始学习率为0.001,采用Adam优化方法。模型在100 K左右收敛,达到最优值Loss=0.254 8,相比改进之前有更强的特征表达能力。

3.2 实验结果

将改进后的算法与原YOLOv3进行对比,对比结果如表2所示。在平均准确率上,文中算法较原算法提升了2.12%,在‘Pedestrian’类别上提升明显,可见由于行人体积小,并且容易成群结队是交通场景检测困难的主要因素。

表2 改进算法和原算法性能对比

图3展示了文中算法的部分检测结果,可以看出文中算法对于不同场景的车辆和行人的密集场景检测表现良好,能够更加准确地定位,有效减少了漏检情况,具有很好的鲁棒性。

图3 原YOLOv3(左)与改进后的YOLOv3(右)检测结果对比

图4显示了文中算法和原YOLOv3算法在不同类别上的PR曲线,通过比较曲线下的面积可以看出,在提出的损失函数指导学习后的YOLOv3在‘Car’,‘Cyclist’,‘Pedestrian’三个类别上均获得了优于原算法的性能。

图4 不同类别的PR曲线

4 结束语

文中提出了针对密集场景检测的Occlusion Loss。Occlusion Loss包含两项内容:第一项是负责更准确定位的IoG Loss;第二项是负责调整一个检测框对应多个目标的UoG Loss。将该损失函数移植到YOLOv3网络中,在KITTI数据集上获得了更好的表现,不仅能准确匹配到目标位置,而且有效抑制了目标漏检,在准确率和召回率上都有更好的表现。在后续工作中,将该算法移植到多种框架中,以实现密集交通场景的车辆多类别识别任务。

猜你喜欢
密集类别损失
洪涝造成孟加拉损失25.4万吨大米
密集恐惧症
一起去图书馆吧
两败俱伤
简析基于概率预测的网络数学模型建构
Seeing Red
做个Patty万人迷
损失
那些损失上百万的演员
选相纸 打照片