基于YOLOv5算法的红外图像行人检测研究

2023-03-02 05:42王晓红陈哲奇
激光与红外 2023年1期
关键词:行人损失函数

王晓红,陈哲奇

(上海理工大学,上海 200093)

1 引 言

行人识别作为自动驾驶发展过程中的重要一环必须兼顾准确性和实时性。同时,不同时间段对应的行人检测使用的检测方法也不相同。传统的行人检测一般是在白天通过摄像头采集图片并进行检测,但是到了夜间,由于光照因素的缺失,往往无法满足检测需求[1]。除了光照因素,远距离的行人由于本身目标较小,存在纹理细节缺失,信噪比低的情况[2],这也是当前检测阶段的重大阻碍。

红外成像设备主要是根据物体发射的红外电磁波进行成像,并且利用目标物体和背景的温度差异的原理生成图像,红外检测也可以应用于不同的场合,例如安全监测、军事制导等方面[3-4]。传统的夜间红外行人检测算法往往依赖的是人工设计的特征。具有代表性的有帧间差的方法[5]、方向梯度直方图(Histograms of Oriented Gradients,HOG)、尺度不变特征(Scale Invariant Feature Transform,SIFT)、Haar-like[6]以及局部二值模式[7](Local Binary Pattern,LBP)等。

近年来,基于深度学习的目标检测方法在飞速发展,深度学习的方法不需要太多的人工操作,同时又可以在准确度上有较大的突破,因此基于深度学习的检测方法也在慢慢取代传统方法。目前的主流深度学习检测方法主要分为两类:

(1)两阶段检测算法

在早期深度学习技术发展进程中,主要都是围绕分类问题展开研究,这是因为神经网络特有的结构将概率统计和分类问题结合,提供一种直观易行的思路。例如Ross B.Girshick 提出R-CNN算法[8],其算法结构也成为后续两阶段的经典结构。在此基础上,又有Faster R-CNN[9]、Mask R-CNN等。

(2)单阶段检测算法

以R-CNN算法为代表的两阶段检测算法由于 RPN 结构的存在,虽然检测精度较高,但是其速度却遇到瓶颈,难以满足部分场景实时性的需求。因此出现一种基于回归方法的单阶段的目标检测算法。单阶段算法不需要生成候选区域,同时在保证一定准确率的前提下,具有较快的检测速度。代表算法有YOLO[10](You Only Look Once,YOLO)算法和SSD[11](Single Shot multibox Detector,SSD)算法。

目前行人检测需要面对的问题主要有两个,一个是由于不同环境导致特征量获取困难,另一个是由于行人远近尺度不同而出现的漏检情况[12-14]。基于行人检测要求的准确性与实时性,本文基于YOLOv5-p4模型来实现驾驶辅助系统中的红外行人检测[15],针对图片中存在的小目标图像,在原先的3个检测层的基础上上增加了一个的检测层,加深特征提取的网络深度,强化小目标的检测精度,防止出现误检、漏检的情况。同时,针对远距离行人尺度较小的特点,使用K-means聚类算法重新聚类出针对小目标的先验框,通过改良的特征融合机制(BiFPN[16])进行更深层次的特征融合,获取更多的特征量。考虑预测框与真实框边长的差值修改了损失函数,使用自适应激活函数使模型更易收敛,使用多尺度训练方法进行优化,最终得到YOLOv5-p4模型。

2 改进的YOLOv5网络模型

2.1 YOLOv5特征金字塔结构改进

原版YOLOv5模型的特征金字塔是对输入图片进行特征提取,分别使用输入图片的8、16、32倍下采样的结果输入检测层进行特征检测。在注意力金字塔(Pyramid Attention Network,PAN)结构中,不仅使用了来自上一层所提取的特征,还会与特征金字塔(Feature Pyramid Networks,FPN)结构中相对应的特征层连接,从而获得更多特征。在FPN和PAN结构中,越上层的部分感受野越广,单个特征值所涵盖的像素越大,所对应的大目标的特征也越容易被学习,但是小目标也被同化到背景中甚至被当成噪声,因此该网络结构对于小目标的检测效果会较差。

在本文所使用的数据集中,由于行人在图片中的像素大小均值较小,同时也存在大量远处行人并行的情况,原版的YOLOv5极小目标的检测效果并不好。因此,本文在YOLOv5的特征提取部分多进行了一次上采样,额外生成了一个专用于极小目标检测的特征层并且将其与主干网络对应的特征层相连接,从而提高了极小目标的检出率。

随着网络的层数的增加,每次下采样,有可能会导致图像中的小目标被淹没,本文采用改进的BiFPN特征融合机制,具体原理如图1所示。在主干网络的特征提取过程中出现的不同大小的特征层会分别与FPN以及PAN结构中对应的特征层进行双向结合,最终输出的融合结果将包含高级语义以及低级语义,以达到获得更多的特征的目的。

图1 基于改进BiFPN改进的YOLOv5-p4网络结构

原先网络用于检验的三个特征层分别是通过主干网络与FPN、PAN结构所获得的三个不同下采样倍率的图片,每个特征层分别对应了三个预设定的先验框,针对不同大小的物体有不同的检出效果。本文在添加了一个新的检测层和检测目标较小的基础上,使用K-means算法进行重新聚类,根据分类个数随机选取聚类质心点,然后计算每个点到质心点的距离,最后将点归类到距离类别质心点最近的类[17]。待每个点分类后,再重新计算每个类的质心,获得用于针对小目标检测的先验框,改进后的锚框为如表1所示。

表1 K-means聚类后锚框的宽度与高度

2.2 BottleneckCSP部分激活函数的改进

在主干网络特征的提取过程中,BottleneckCSP结构会将来自上一部分的内容进行三次的Bottleneck堆叠操作,并将其与一条残差边进行相加、标准化、激活一系列操作,最后用一个1×1的卷积核进行卷积并且输出。BottleneckCSP的结构如图2所示。

图2 BottleneckCSP结构

其中,在BottleneckCSP最后一个卷积前的激活函数可以提供网络的非线性建模能力。加入激活函数,深度神经网络才能具备分层的非线性映射学习能力。因此激活函数是神经网络不可或缺的一部分。原先的YOLOv5模型使用的是LeakyReLu激活函数其表达式见公式1:

f(x)=max(0.1x,x)

(1)

LeakyReLu反应的是一种简单的线性关系,有时针对不同的输入无法做出正确的预测,因此本文使用一个自适应激活函数(Meta Activate Or Not C,MetaAcon-C[18]),该函数的通过一个β值来确定激活函数是线性或非线性。MetaAcon-C的表达式见公式2:

Acon-C(x)=(p1-p2)xσ[β(p1-p2)x]+p2·x

(2)

其中,P1和P2使用的是两个可学习参数,可以进行自适应的调整。对该函数求导可得:

(3)

由公式3可知,当x的值趋于正无穷或负无穷时,函数的梯度分别为P1以及P2,这样可以有效防止神经网络出现梯度消失或者梯度爆炸的情况。

通过分别对H,W求平均值,然后通过两个卷积层,使得每一个通道所有像素共享一个权重,最后由sigmoid激活函数求得β。当β接近0时,该激活函数趋近于线性,随着β的增大并趋于正无穷时,激活函数趋于非线性,并取值为max {xn};随着β的减小并趋于负无穷时,激活函数趋于非线性,并取值为min {xn}。

2.3 多尺度训练

输入图片的尺寸对于网络的训练和收敛以及对于检测模型性能有相当明显的影响。多尺度训练是通过设定一个随机的缩放倍数(一般是0.5~1.5倍)对图片进行缩放,然后将其输入网络中进行训练。多尺度训练通过输入较大尺寸的图片可以使图片中的小特征在下采样以及卷积的过程中不容易被忽略,使网络在训练的过程中减少过拟合的情况出现,使得训练出来的模型具有较强的鲁棒性。除此之外,使用多尺度训练后的模型在接受不同尺度的输入图片也会有检测效果。

2.4 损失函数选择

YOLOv5原始模型使用的IoU损失函数为CIoU函数。CIoU损失函数具有惩罚项,并且考虑到了目标与预测框之间的距离,重叠率等,使目标框的回归变得更加稳定。其中ρ2(b,bgt)表示预测框与真实框之间中心点的欧氏距离,c表示包含预测框与真实框的对角线距离,αv表示惩罚因子,CIoU损失函数见公式4:

(4)

对于小目标的行人检测来说,一大难点是预测框是否可以在准确检测到目标的同时与目标的真实大小相一致,如果图片中存在较多小目标,有可能会出现漏检和错检的情况。CIoU无法平衡难易样本,为了解决此问题,选择使用一个更加符合网络回归要求的损失函数LEIoU,见公式5:

LEIoU=LIoU+Ldis+Lasp

(5)

LEIoU主要包含三个部分:重叠损失,中心距离损失以及宽高损失。对比CIoU,它直接将真实框与预测框的宽高进行对比,求出宽高损失,可以加速网络的收敛速度并且提高了回归精度,使得预测的结果更加准确。

3 实验与结果分析

3.1 实验数据集与预处理

本实验使用的数据来自FLIR_ADAS_1_3红外数据集,该数据集由红外相机拍摄,包括10228张图片。其中数据集中共包括行人28151个,汽车46692辆,自行车4457辆,以及其他的物体。本次实验使用数据集中的行人数据共5838张图片。在实验过程中,使用马赛克增强以及拼接的网络训练策略,丰富了检测物体的背景,同时也可以起到增加数据集的作用,使网络具有更好的泛化性。本次实验对数据集按照8:1:1的比例分为训练集、测试集、验证集。

3.2 实验环境

本文使用了开源的PyTorch深度学习框架进行训练和测试,运算平台为64位操作系统,16G内存,6G显存,NVIDIA GeForce RTX 3060 Laptop GPU的笔记本。

3.3 评估指标

目标检测通常使用平均准确率mAP(mean Average Precision)作为模型性能的评价指标。同时,也会参考验证集损失,防止过拟合现象出现导致模型泛化性降低。

准确率(Precision):表示模型正确检出的目标的数量与数据集中的总目标数的比值,计算见公式6:

(6)

召回率(Recall):表示模型已检出的目标的数量与数据集中的总目标数的比值,计算见公式7:

(7)

通过绘制训练过程的P-R曲线,计算P-R曲线与坐标轴围成的面积,该面积代表的就是这一类目标所对应的AP值,计算见公式8。在本文的实验中,用于检测的目标只有一类,因此本实验的AP与mAP相同。

(8)

3.4 结果分析

3.4.1 损失函数分析

使用tensorboard对模型训练过程进行可视化,原版的YOLOv5模型和YOLOv5-p4模型训练损失函数结果如图3、4所示。

图3 YOLOv5的损失函数

图4 YOLOv5-p4的损失函数

通过两个模型的损失函数进行对比和分析可以发现,两个模型在0~150 epoch训练过程中,训练损失和验证损失两者均在不断下降。原版模型的验证集的置信度损失(val Objectness)在150代之后上升,但是该模型的训练损失却仍然在下降,因此判断该模型在150代之后网络进入了过拟合的情况。模型训练进入过拟合的会导致模型的泛化性降低,因此本文在对比原模型过拟合前后的精度结果后,选择使用第160代作为模型的最终结果。对比原版的模型可以发现,YOLOv5-p4模型在150代后均未出现过拟合的情况,且置信度损失的值远低于原模型的置信度损失值。损失函数作为评价模型的优劣的标准之一,对比两个模型的损失值,可以看出优化后的模型优于原模型,特征学习的能力更强。

3.4.2 模型检测性能分析

P-R曲线中的P代表的是precision(准确率),R代表的是recall(召回率)。P-R曲线代表的是精准率与召回率的关系。由本文中准确率和召回率可以求出在0.5的交并比阈值下的平均精度mAP@0.5,在数值上等于PR曲线与坐标轴围成的面积,这是模型性能衡量的主要评价指标。P-R曲线如图5、6所示,通过该曲线可以看出原模型的mAP@0.5为86.9 %,改进后的模型的mAP@0.5为90.3 %。对比两个模型可以看出,YOLOv5-p4模型的平均准确率提升了3.4 %,同时有更低的损失值,因此改进后的模型优于原模型。

图5 YOLOv5的P-R曲线

图6 YOLOv5-p4的P-R曲线

3.4.3 检测效果分析

为验证模型针对不同尺度的行人的检测效果,本文在从数据集中随机抽选出200张图片,通过模型在该200张图片上的检测效果进行比较分析。将行人尺寸基于图像分辨率分为三类,分别是:小于20×20、20×20至50×50以及大于50×50。测试结果如表2、3所示。

表2 不同尺寸目标检验结果表

由表2、3可知,针对尺寸小于20×20的目标,原版YOLOv5模型的检测性能远不如YOLOv5-p4模型,YOLOv5-p4模型的检测精度相较于原YOLOv5模型提升了6.5 %。针对尺寸大于20×20的目标,两个模型的检测性能较为接近。由此看出,YOLOv5-p4模型在针对较小目标的检出效果远好于原模型。

表3 不同尺寸目标的检测精度表

为了更直观地看出YOLOv5-p4模型针对较小行人检测的有效性,本文使用同一张图片进行检测,两个模型的检验效果如图7所示。

图7 检测效果图

由图7对于同一张图片的检测效果对比得出,原版的YOLOv5模型对与远处的行人存在无法检出的情况,YOLOv5-p4模型无论是针对远处或者近处的行人均有良好的检验效果。

3.4.4 与其他算法综合对比

将本算法与SSD算法、YOLOv4算法和YOLOv5算法在相同条件下进行对比测试,结果如表4所示。

表4 与其他算法精度对比表

由此表可以看出,相较于SSD算法和YOLOv4算法,YOLOv5-p4模型在精度上分别提升了7.2 %和5.4 %,对于目标行人具有较好的检出效果。

4 结 语

本文采用改进的YOLOv5网络结构进行基于红外图像的行人检测。首先对YOLOv5网络进行改进,通过增加上采样的次数,增加一个目标检测层,提高了网络对远处较为微小的行人的识别能力;使用BiFPN结构,将相同尺寸的特征层相连接,提高了图片中小目标的检出率;针对小目标难以检测的情况,使用了能考虑到预测框和真实框的差距的损失函数;使用MetaAcon-C激活函数代替原本的激活函数,帮助模型更好的收敛;使用多尺度的模型训练方法,得到效果更好的模型。同时本文也存在一定的局限性,模型针对智能驾驶的目标检测的精度仍然未达到相当高的程度,这也是接下来的改进和研究的目标。

猜你喜欢
行人损失函数
二次函数
第3讲 “函数”复习精讲
胖胖损失了多少元
毒舌出没,行人避让
二次函数
函数备考精讲
路不为寻找者而设
玉米抽穗前倒伏怎么办?怎么减少损失?
我是行人
曝光闯红灯行人值得借鉴