特别特别水的论文,数据集和权重晚点放到仓库里面

摘要

行人、车辆检测是自动驾驶中的一项重要技术,对于行人、车辆检测往往需要较高的精确度和实时性。YOLOv5是一种通用的目标检测算法,但将其使用到行人、车辆的目标检测时,由于行人、车辆数据集存在着样本不均衡和小目标过多的问题,YOLOv5算法往往难以达到预计效果。

本文提出了一种基于YOLOv5的改进模型。本文的主要工作如下:

(1) 针对数据集样本不均衡问题采用数据增强对输入的图像进行预处理。

(2) 针对YOLOv5对大目标分类效果不理想问题,对YOLOv5的网络骨架进行调整。

(3) 针对数据集中小目标较多的问题,对YOLOv5的特征融合部分进行调整。

研究结果表明,改进后的模型保持实时性(150 FPS)的情况下,均值平均精确度相比原始YOLOv5模型从原来的62%提升到了64.5%,精确率从74.4%上升到了75.8%,召回率从55.4%上升到56.6%。

相较于原先的模型,改进后的YOLOv5模型在小目标检测上优势明显,能在保持YOLOv5检测实时性的同时,提高其小型行人车辆的检测和分辨效果。

关键词: YOLOv5;目标检测;行人车辆检测

Abstract

Pedestrian and vehicle detection is an important technology in automatic driving, which often requires high precision and real-time performance. YOLOV5 is a general object detection algorithm, but when it is applied to pedestrian and vehicle target detection, it is often difficult to achieve the expected results due to the problems of unbalanced samples and too many small targets in pedestrian and vehicle datasets.

This paper proposes an improved model based on YOLOV5. Followings are the main work in this paper:

(1) Data augmentation is used to preprocess the input image for the problem of unbalanced dataset samples.

(2) To solve the problem that YOLOV5’s classification effect on large targets is not ideal, the network skeleton of YOLOV5 is adjusted.

(3) Adjust the feature fusion part of YOLOV5 for the problem that there are many small targets in the data set.

The results show that when the improved model maintains real time (150 FPS), the mean average precision is improved from 62% to 64.5% compared with the original YOLOV5 model, the precision rate is increased from 74.4% to 75.8%, and the recall rate is increased from 55.4% to 56.6%.

Compared with the original model, the improved YOLOV5 model has obvious advantages in small target detection, which can improve the detection and resolution effect of small pedestrians and vehicles while maintaining the real-time detection of YOLOV5.

Key words: yolov5; object detection; Pedestrian and vehicle detection

绪论

近年来,国内外大量厂商宣布要制造自动驾驶汽车,而自动驾驶中一项关乎生命安全的重要技术就是行人和车辆检测。本章将首先介绍行人、车辆检测的研究背景和意义,随后介绍目标检测的国内外发展现状,本章最后部分将会讲述全文结构。

研究背景与意义

目标检测(Object Detection)是计算机视觉和图像处理的一项分支技术,其主要任务是在一幅数字图像中正确识别出目标物体的位置并判断类别。如图1.1所示,目标检测算法需要框选出图片中的物体,并判断出框选出的物体是人还是棒球棒。

图 1.1 目标检测算法实例

随着我国人民生活水平的日渐提高,越来越多的家庭拥有机动车,随之而来的便是城市内的交通环境越来越复杂。尽管现在的车辆配备了日渐完善的安全设备和防撞技术,近两年的交通事故的死亡人数依然很高[1][2]。此外,国内外不少公司也开始陆续推出自动驾驶汽车,如果自动驾驶技术广泛运用车辆系统上,将会避免许多本可以避免的交通事故。

在自动驾驶系统中对行人和车辆的检测极为关键,如果检测速度慢或者检测效果差就容易导致人身安全事故。行人车辆检测难点在于行人在图像中像素较小,难以保持高准确率,同时还难以快速对其进行检测[3]。传统的对行人车辆检测方法往往是使用人工提取特征的目标检测算法,这种方法往往计算量较大且精度较低,无法运用在需要高精度和高实时性要求的自动驾驶领域。得益于近年来GPU加速技术和深度学习技术的发展,使得如今基于深度学习的行人车辆检测能够达到高精度和较好的实时性,有效的改善传统方法的效率低下问题,能够更好的避免交通事故的发生。

国内外研究现状

在过去20多年里,目标检测经历了两个时期,一个是2014年前的传统目标检测探索时期,而另一个是2014年后的基于深度学习的目标检测时期[3:1]

传统目标检测算法

在2014年前,目标检测算法使用的都是传统目标检测算法。传统的目标检测算法大多可以分为以下3步。首先通过滑动窗口等方法穷举可能含有目标物体的图像区域;然后使用方向梯度直方图(Histograms of Oriented Gradients,HOG)[4]和尺度不变特征变换(Scale-invariant feature transform,SIFT)[5]等特征提取算法对图像区域进行特征提取运算,得到目标的特征;最后将提取到的特征送入支持向量机(Support Vector Machine,SVM)[6]、adaboost[7]等分类算法中计算得到分类结果[3:2]

这些传统目标检测方法通常都是需要手工设计特征提取,而且要求调试者有熟练的调试经验,相比于后面出现的基于深度学习的目标检测算法,传统算法特征提取相对复杂,且检测的准确率不如后者。尽管如此,传统目标检测算法中的滑动窗口、困难样本挖掘和边界框回归等思想依然影响了后续的目标检测算法[3:3]

基于深度学习的目标检测算法

在2012年的ImageNet竞赛上,Hinton等人使用基于卷积神经网络(convolutional neural network,CNN)结构的AlexNet[8]获得了冠军,其错误率比第二名低了10.8%,分类效果远超第二名。这使得学者们重新对卷积神经网络产生了兴趣,并考虑将卷积神经网络的分类结果运用到目标检测上面。

在2014年Ross Girshick 提出的R-CNN(Regions with CNN features)[9]是第一个基于卷积神经网络的目标检测算法。其将传统算法中的人工提取特征部分换成了使用CNN提取,提高了检测精度。由于R-CNN中传统候选框搜索算法穷举候选区域较慢,Girshick等人随后便提出了Fast R-CNN[10]和Faster R-CNN[11]。在Faster R-CNN[11:1]中使用候选区域生成网络(Region Proposal Network,RPN)替代了原先的选择性搜索算法,再使用卷积神经网络对生成的候选框中的物体进行分类识别。

这类算法因为将目标检测分为候选框提取和目标分类两个模块,因此也被称为two-stage算法,其代表的网络有R-CNN系列、SPP Net和Pyramid Network等。two-stage方法虽然精度较高,但是检测速度比较慢。以Faster R-CNN为例,虽然其能够在PASCAL VOC 2012上取得70.4%的均值平均精确度,但是其在GPU上推理速度为5 FPS[11:2]。除了two-stage算法,还有一些算法将候选框坐标回归和分类和为一步预测,这种算法也被称为one-stage算法。

在2016年,Redmon提出的YOLO(You Only Look Once)[12]算法是第一种one-stage算法。其特点是将只是用一个网络完成目标检测,在保证检测精度的同时运算速度非常快,在PASCAL VOC 2012检测任务上YOLO的FPS达到45 FPS,而且均值平均精确度达到63.4%,精度略微低于Faster R-CNN[12:1]。其主要思想是将图像分为多个网格,每个网格预测含有边界框坐标信息、置信度和每个类别的条件概率的向量,将目标检测问题转换为回归问题。在2017年,Redmon提出了YOLOv2[13]网络,将Faster R-CNN中的先验锚框机制和网中网(Network in Network,NIN)[14]中的全局平局池化等结构加入YOLOv1网络。使其不再直接预测目标坐标而是预测目标与锚框之间的偏差,降低了训练难度,提高了网络的召回率。在2018年提出的YOLOv3[15]中加入了特征金字塔和残差块结构,增加了对小目标的检测效果。在YOLOv3发布后,YOLO系列一代到三代的原作者Redmon宣布因为无法忽视自己研究带来的负面影响,决定退出计算机视觉领域。幸运的是,在2020年YOLO社区的参与者Alexey Bochkovskiy接手了YOLO项目并发表了YOLOv4[16]。在YOLOv4中作者引入了大量训练技巧和结构改进,如CSP结构、CIoU loss、Mish激活函数等等,极大的提升了网络的性能。YOLOv4诞生后不久,Ultralytics公司发布了自己的YOLO版本并命名为YOLOv5。该版本在社区中有一定的争议,在本文中不会对此进行讨论。YOLOv5相较YOLOv4而言还是有少许改进,其新增了马赛克数据增加、Focus模块、自动锚框计算等。YOLOv5保证了模型精度的同时,运算速度更快,模型权重的大小相对于YOLOv4而言更小。

研究现状小结

根据上述目标检测算法的分析,可以根据使用的方法将目标检测算法大致划分为3类,结果如图1.2所示。

图 1.2 目标检测算法总结

本文研究内容和组织结构

如前文所述,传统方法的精度较差,而R-CNN系列算法虽然有较高精度,但是速度无法满足要求。因此本文将使用YOLOv5算法对行人和车辆数据集进行训练,得到行人车辆检测模型。该模型可以对行人(person)、自行车(bike)、机动车(car)、摩托车(motor)、公交车(bus)和卡车(truck)共六个类别进行检测。

同时针对数据集和模型分析,对YOLOv5的模型提出了改进思路,并对改进思路进行实验,以均值平均精确度为指标评价网络的改进结果。具体改进内容如下:

(1)、基于对YOLOv5网络的理解和实际结果,对YOLOv5的骨架提出改进思路

(2)、基于上述对YOLOv5的理解,对YOLOv5的颈部部分的路径聚合网络提出了改进思路。

本文各章节具体内容安排如下:

第一章 绪论。介绍了行人车辆检测的研究背景和重要性,引出了目标检测的发展。简要的介绍了传统方法和基于深度学习的方法。

第二章 YOLO算法原理简介。主要介绍了卷积神经网络的相关基础知识、YOLOv5网络的结构和算法流程以及对算法的评判指标。

第三章 YOLO算法分析及改进。对行人车辆检测数据集和YOLOv5模型的分析。并针对数据集的特点和YOLOv5在该数据集上的缺陷提出改进措施。

第四章 实验分析。这一部分主要讲述了本次实验的运行结果以及针对行人车辆数据集的改进方案和原本YOLOv5之间的检测效果对比。

第五章 总结与展望。总结了YOLOv5改进模型的优缺点,阐述未来的改进方向。

YOLO算法原理

YOLO是一种卷积神经网络,相较于传统神经网络,卷积神经网络能够更好的提取特征,同时还能减少模型参数。本章首先介绍了卷积神经网络的组成部分和原理。然后对YOLOv5网络结构进行分析,并介绍了其检测流程。最后介绍了模型的评价指标。

卷积神经网络概述

传统全连接神经网络虽然在一些任务上有很好的表现,但是其使用的全连接层会导致参数过大,在图像处理上这项缺点极为明显。以本文后续使用的模型为例,输入的图像尺寸会缩放到640×640×3,如果将其作为全连接神经网络的输入,仅仅输入层中的一个神经元的权重就有640×640×3=1228800个,以float形式保存就有约4.9 MB的大小,这显然是一项巨大的开销。以VGG网络的输入3通道输出96通道,卷积核大小为3×3的卷积层为例,其权重个数为3×3×3×96=2592个,明显少于全连接网络。得益于卷积计算的权重共享和局部感受野的特点,卷积神经网络参数的数量远少于传统全连接网络。

1962年生物学家HuBel和Wiesel基于对猫的视觉皮层神经元的研究提出了感受野的概念[17]。1980年日本学者Fukushima基于HuBel的研究提出了卷积层、池化层结构[18]。随后在1998年LeCun基于前人的研究设计了第一个卷积神经网络LeNet-5并运用在了识别支票上的手写数字[19]。但是受限于当年有限的计算机资源和SVM算法的兴起,卷积神经网络慢慢淡出了人们的视野。直到2012年的ImageNet比赛上AlexNet[8:1]的以极大的优势击败了其他传统算法,卷积神经网络才重新活跃在人们的眼前。

卷积神经网络通常由输入层、卷积层、激活函数、池化层、全连接层和输出层构成[20]。这几个部分会在后续小节中进行讲解。

卷积层

卷积层的名字来源于数字信号处理中的卷积操作,二维卷积的公式如式2.1所示:

y(m,n)=x(m,n)h(m,n)=ijx(i,j)h(mi,nj)(2.1)y(m,n)=x(m,n)*h(m,n)=\sum_{i}^{\infty}\sum_{j}^{\infty}x(i,j)h(m-i,n-j) \tag{2.1}

卷积层是卷积神经网络中的基础模块,主要的功能就是对输入进行特征提取。卷积层是由多个特征图组成的,与全连接不同的是,特征图中的每一个神经元通过卷积核上一层是局部连接的。卷积核就是一个大小为N的权值方阵,其权值在训练过程中自行学习,为了确保卷积核有一个中心点,同时方便对特征图进行填充,N通常取奇数。卷积操作就是使用一个滑动窗口以一定步长在图像上滑动,并对窗口内的特征进行加权求和操作,从而得到一个新的输出。一般认为CNN结构中越接近输出的卷积层输出的是一些更为抽象的高级特征,因此能比人为设计的滤波器有更好的提取特征能力。

图 2.1 卷积的操作过程

图2.1为卷积核的运算过程,Input表示输入的特征图,数字为像素点的值,其中黄色的部分表示卷积核的关注区域。图中的kernel表示了一个尺寸为3×3的卷积核,其中绿色部分表示卷积核的权重。图中右侧的output表示经过卷积运算后的输出,其黄色区域表示的就是卷积的运算结构。图2.1中的卷积的输出如式2.2所示:

output=21+10+01+91+50+41+21+30+41=5(2.2)output = 2*-1+1*0+0*1+9*-1+5*0+4*1+2*-1+3*0+4*1=-5 \tag{2.2}

特征图在通过卷积操作后,输出的尺寸与输入不匹配,如果需要两者匹配,则需要对输入特征图的周围填充零。经过卷积操作后的输入和输出的长宽关系如式2.3所示:

w=wn+2ps+1(2.3)w'=\frac{w-n+2p}{s}+1 \tag{2.3}

ww'为输出特征图的宽度,ww为输入特征图的宽度,nn为卷积核的尺寸,pp为填充padding即对输入进行零填充的大小,ss为卷积窗口滑动的步长。

神经网络中使用了卷积层的优点如下

(1)、减少网络参数。卷积核在对一个输入的不同区域进行卷积运算的时候,卷积核内参数是固定的。因此可以看作是共享了权重和偏置,从而减少了网络的参数量。

(2)、更强的抽象能力。相较于人工设计的卷积滤波器,基于深度学习的卷积滤波器可以在训练中自己学习权重,能够提取到更抽象的特征。

激活函数

卷积层,池化层和全连接层都可以看作是对输入的线性加权求和。当多个卷积层、池化层、全连接层连接时,都可以将其视为对输入的线性组合,这样无论网络有多深,都与单层线性组合没有区别。因此网络中需要加入非线性的激活函数,避免网络只是单纯的线性组合。目前常见的激活函数有sigmoid、ReLU、Mish等,下文将对这几种激活函数进行介绍[20:1]

(1)、sigmoid,其公式如式2.4所示:

f(x)=11+ex(2.4)f(x)=\frac{1}{1+e^{-x}} \tag{2.4}

sigmoid的优点是可以将输出转换为0到1之间的实数,缺点是输出的均值不为0,使得网络收敛速度慢,特定情况下还会有梯度消失和梯度爆炸的问题。

(2)、tanh,其公式如式2.5所示:

f(x)=exexex+ex(2.5)f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} \tag{2.5}

tanh的优点是解决了sigmoid的输出均值偏移的问题,然而存在梯度消失问题[21]

(3)、ReLU,其公式如式2.6所示:

f(x)=max(0,x)(2.6)f(x)=max(0,x) \tag{2.6}

ReLU的优点是正区间内解决了梯度消失问题。但是输出的均值依然不为0。此外ReLU激活函数还存在死区,即当输入在负区间时,神经元输出为0,导致反向传播时上一层的神经元权重参数无法更新[21:1]

(4)、Leaky ReLU,其公式如式2.7所示:

f(x)=max(ax,x)(2.7)f(x)=max(ax,x) \tag{2.7}

式中a可以根据实际数据调整,通常情况下a取0.01。Leaky ReLU的优点是负区间内仍然有少量的输出,使得输入在负区间内时,上一层的神经元权重依然可以更新。

(5)、Mish:其公式如式2.8所示:

f(x)=xtanh(ln(1+ex))(2.8)f(x)=x*tanh(ln(1+e^x)) \tag{2.8}

Mish是新提出的激活函数,Mish优点是比较平滑有较好的泛化能力和总结能力,缺点是计算相对ReLU较为复杂。

池化层

池化层也被称为下采样层,通常跟在卷积层后面,主要功能是降维。卷积输出的特征图中相邻像素是几乎一样的,只有在目标的边缘部分像素变化明显,如果可以去除这些冗余部分,就可以明显的减少网络参数量。池化层的作用就是降低输出特征图的维度从而达到减少网络参数,同时还能够保留特征图中最重要的信息。池化按照计算方式大致可以分为最大池化和均值池化。池化的计算方法与卷积的计算方法比较相似。以最大池化为例,池化层会使用一个滑动窗口以一定步长在特征图上滑动,并对每个窗口中的像素求最大值作为输出。与卷积不同的是,池化层不包含任何参数,因此不会影响模型大小。

图2.2表示了一个最大池化的操作过程,我们定义了一个窗口大小为2×2,步长为2的最大池化层,同时在左侧定义最大池化层的输入,黄色、蓝色、红色和绿色部分表示的是池化窗口覆盖的区域,右侧为最大池化层的输出,不同颜色区域代表不同窗口的输出,可以看到最大池化层选择了不同窗口的最大像素值。

图 2.2 最大池化层的操作过程

神经网络中使用池化层的优点有:

(1)、去除特征图中的冗余信息,保留其中关键信息,减少网络的参数和计算量。

(2)、增加网络的鲁棒性,当相邻像素发生微小的改变的时候并不影响网络的最终输出。

全连接层

在卷积神经网络结构的最后部分,通常连接着一个或者多个全连接层以达到一个"分类器"的效果。全连接层的结构与传统的多层感知器类似,每一个神经元都与上一层的所有神经元连接,因此也可以看作是对卷积层提取到的局部信息进行整合。为了增强全连接层的拟合能力,通常会在每个神经元后面都会添加一个非线性的激活函数,避免网络只是单纯的线性拟合[20:2]

虽然全连接层有着很好的拟合效果,但是在神经网络训练时期,全连接层容易产生过拟合问题,即训练完成的模型无法在其他的场合下泛用化。为了解决这一问题通常需要在训练时期加上dropout层,使其在训练时随机隐藏一些神经元节点,从而达到防止过拟合的效果。此外全连接层因为每个神经元都要与前后两层的神经元完全连接,因此需要的参数较多,也是导致模型大的原因之一。在NIN中为了解决这一问题,提出了全局平均池化层来替代全连接层,即对最后一个卷积层输出的每一个特征图求平均值,得到的向量就是输出,因为池化层没有参数需要优化,所以大大的减少了网络的参数,同时也避免了全连接层容易出现模型过拟合的问题[14:1]

YOLO网络概述

以R-CNN系列算法为代表的two-stage算法将目标检测分多个步骤来实现,先是寻找出可能含有物体的候选框,然后再对候选框进行坐标回归和目标分类。two-stage算法的每个步骤中所使用的模块都需要单独训练,而且寻找可能含有物体的候选框一步因为需要大量寻找而耗费了大量时间。因此,虽然R-CNN系列算法的精度很高,但是其检测速度很慢。YOLO系列算法则是采取了端到端的思路,直接将候选框预测和分类合在一步完成,将目标检测问题转化成了回归问题,这样做虽然使得检测结果的均值平均精确度略微有所下降,但是检测速度有了很大的提升。

YOLOv5网络结构

图2.3为YOLOv5s模型的网络结构,图中左上角的红绿蓝三色方块代表图像输入,在YOLOv5中图像的输入大小为固定的640×640×3。左侧第一列为YOLOv5网络的骨架,其主要作用是对图像进行特征提取,最右侧的三个红色模块为YOLO的输出部分,也被称为YOLO算法的头,其主要作用是计算网络的输出。中间的两列是近几年来目标检测算法添加在网络骨架和头之间的颈部部分,其作用是将不同尺度的特征进行融合,通常由特征金字塔或者路径聚合网络(Path Aggregation Network,PAN)组成,在YOLOv5中使用的是路径聚合网络,即在原本自下向上的特征金字塔上再加上一层自上向下的特征融合路径[22]。在图中,640×640×3表示输入图片长宽为640×640的RGB彩图。四个参数的模块如Focus、CBL、YOLO中,各个参数分别代了输入通道数、输出通道数、内核大小和步长。含有双参数的模块如C3,各个参数分别代表了输入通道数和输出通道数。单个参数的模块如SPP、Concat、Upsample等,其参数则代表了输出的通道数。

图 2.3 YOLOv5s模型结构

图2.3中的粉色模块为YOLOv5中的卷积层基本单元CBL,其结构如图2.4所示。C指代的是卷积层,其计算如上一节所述。B代表批次归一化(Batch Normalization,BN),其作用是将一个批次内的卷积层的输出归一化到均值为零,方差为一的范围内,将网络正则化,这使得网络能够避免过拟合,同时还能帮助网络更快的达到效果最好的点,减少网络训练时间。L代表Leaky ReLU激活函数,作用是引入非线性函数,以增强网络的表征能力。在YOLOv5网络中单独使用CBL模块主要是为了完成对网络的下采样操作。

图 2.4 CBL模块结构

图2.3中的浅绿色的模块为Focus模块,其结构如图2.5所示。Focus层的做法是将输入的图片每隔一个像素取一个值,做到将输入图片切片成四份,然后在通道维度上将四张图拼接起来。这等价于在没有任何信息损失的情况下对图像下采样处理,同时减少了网络的参数量。

图 2.5 Focus模块结构

图2.3中淡蓝色模块为C3模块,其结构如图2.6所示。其中红色的残差单元(Res Unit)结构如图2.7所示。残差块结构是在残差网络中提出的,其结构就是将网络的输入添加到网络的输出部分,解决了传统卷积神经网络随着网络深度的增加网络能力退化的问题,此外使用残差结构也有助于解决深层神经网络中的梯度消失和梯度爆炸等问题。在图2.3中,C3中的参数(128,128)×3,其表示的意思是C3结构的输入通道数为128,输出通道数为128,C3模块中含有3个残差单元,而(64,64)代表输入和输出模块的通道的个数都为64,C3模块中只有1个残差单元。C3模块是YOLOv5对于跨阶级局部连接(Cross-stage partial connections,CSP)结构的一种改进,CSP模块将输入的特征图分为两部分计算,使得梯度能够通过不同的路径传播,从而获得更多的梯度组合。此外,因为CSP结构中只有一半的特征图进入了残差单元进行计算,所以网络的计算量明显减少。C3模块比YOLOv4中的CSP模块少了一个卷积层,使其计算量更小。

图 2.6 C3模块结构

图 2.7 残差块结构

图2.3中的深绿色模块为空间金字塔池化层(Spatial Pyramid Pooling,SPP)。其结构如图2.8所示,其中绿色的为最大池化层。SPP层使用不同尺寸和步长最大池化的层,将图像进行压缩,并拼接通道数,提高了网络的感受野。

图 2.8 SPP结构

图2.3中深蓝色模块为upsample层,上采样使得特征图的维度得以增加。在YOLOv5中上采样使用相邻值填充的方法使特征图的维度放大一倍,使其能够与需要拼接的特征图在维度上匹配。图2.3中的橙色模块为concat层,在YOLOv5其作用是将特征图按照通道数拼接起来,因此需要其输入的特征图的维度要一致。图2.3中的红色模块为YOLO层,其作用是负责对输入的特征图进行预测。在YOLOv5中一共由三张特征图负责输出预测结果,其中大尺度特征图的尺寸为80×80,主要用于预测小目标。中等尺度的特征图尺寸为40×40,主要用于预测中等目标。小尺度特征图尺寸20×20,主要用于预测大目标。

YOLO检测流程

YOLO算法在事先就对数据集标签中的所有边界框进行k-means聚类运算,获取聚类的质心作为锚框(anchor)。其核心思想是将图像划分成S×S个网格,反映到实际中就是输出特征图的大小。每个网格负责预测中心落在其中的物体。每个网格预测B个边界框,每个边界框包含了目标相对于网格中心坐标的偏差以及边界框和锚框长宽之间的偏差和边界框的置信度。置信度的计算公式如式2.8所示:

confidence=Pr(Object)IoUpredtruth(2.8)confidence=P_r(Object)*IoU_{pred}^{truth} \tag{2.8}

其反应了边界框含有物体的概率以及其和真实值之间的重合程度。此外每个边界框还附带了以one-hot形式编码的该物体属于C个类别的条件概率。因此YOLO最后输出的张量形状如式2.9所示:

filters=S×S×(B5+C)(2.9)filters=S\times S\times (B*5+C) \tag{2.9}

以MS COCO数据集的80个类目标检测为例,图2.3中YOLO层输出通道数为255表示:在YOLOv5中B为3个边界框,C为80个类别。因此代入式2.9可以得到255=3×(5+80)。

在YOLOv5模型中为了解决其对小目标的检测性能不佳,便借鉴了特征金字塔结构和路径聚合网络结构,将不同尺度的特征进行融合。相较于YOLO的以往版本只使用一个特征图进行预测,YOLOv5中使用了大中小三个特征图分辨预测小中大尺度的目标,极大的提升了小目标检测性能。

由于YOLOv5输出的坐标部分是关于锚框的偏移量,因此需要对这部分数据进行解码。计算过程如图2.9所示。cxc_xcyc_y指网格的中心坐标,pwp_wphp_h分别指锚框的长宽,txt_xtyt_y表示预测相对网格中心的偏差,twt_wtht_h分别表示预测相对于锚框的偏差。σ\sigmasigmoid函数,bxb_xbyb_ybwb_wbhb_h是指实际预测框的中心坐标和长宽。

图 2.9 锚框解码

YOLO算法的预测结果会有多个冗余的检测框,为此YOLOv5使用非极大值抑制(Non-Maximum Suppression,NMS)选择与实际目标最接近的边接框并去除与其冗余的框。其计算过程如下

(1)、根据置信度对边界框进行排序,并设置一个IoU阈值和NMS阈值。

(2)、删除所有置信度小于NMS阈值的框,置信度越低代表检测错误的可能性越大。

(3)、取置信度最高的预测框,并删除与该预测框的IoU大于阈值的预测框。IoU越大就表明重叠部分越多,在图像中就重叠度较高的预测框可能预测的是同一个物体,所以要删去多余的框。

(4)、对剩下未处理的框重复上述操作,直到所有框都被处理。

图 2.10 YOLO算法的检测流程

YOLO算法的整体检测流程如图2.10所示。图片输入后先预测出偏差,再对锚框进行解码,最后进行NMS处理。其结果就是最后的检测结果。

评判指标概述

评价一个模型检测效果的好坏往往需要使用同一种评价指标。在目标检测算法中,通常使用以下指标:

交并集(Intersection over Union,IoU)。其计算结果如图2.11所示,即预测边界框和实际边界框之间的交集面积和并集面积之比。是一种衡量预测框和标签框重合程度的指标,越接近1代表预测结果越好。

图 2.11 IoU计算过程

混淆矩阵。计算如表2.1所示。其为评估模型性能的一项重要指标,也是后续多项衍生指标的基础。

表2.1神经网络混淆矩阵
预测值
Positive Negative
真实 Positive TP(True Positive) FN(False Negative)
Negative FP(False Positive) TN(True Negative)

精确率(Precision)。其计算公式如式2.10所示:

Precision=TPTP+FP(2.10)Precision=\frac{TP}{TP+FP} \tag{2.10}

对于目标检测算法来说,通常使用一个置信度阈值来判断TP和FP。如果置信度大于阈值就是TP否则就是FP。其表示在所有正样本中被预测正确的比例。

召回率(Recall)。其计算公式如式2.11所示:

Recall=TPTP+FN(2.11)Recall=\frac{TP}{TP+FN} \tag{2.11}

对于目标检测算法来说,FN就是模型没有检测到的标签。其表示在所有分类正确的样本中正样本的比例。

平均精确度(Average Precision,AP)。通常来说我们希望检测结果的精确率和召回率都越高越好,然而两者往往是以相反方向变化的。为了更好的描述算法检测效果,PASCAL VOC比赛方提出了一个新的指标AP[3:4]。AP的计算过程如下,通过设置不同的置信度阈值,我们可以得到不同的精确度和召回率,最后可以绘制成一条横坐标为召回率,纵坐标为精确率的P-R曲线。曲线与坐标轴之间的面积就是AP。AP的计算公式如式2.12所示:

AP=01p(r)dr(2.12)AP=\int_{0}^{1}p(r)dr \tag{2.12}

p(r)p\left( r \right)为召回率r所对应的精确度。由于AP能够很好的描述检测效果,因此在目标检测领域中被广泛使用。

均值平均精确度(mean Average Precision,mAP)。AP是针对某一个特定的类别所计算的,mAP就是将每个类别的AP求和后取一波平均值。mAP的计算公式如2.13所示:

mAP=1NiNAPi(2.13)mAP=\frac{1}{N}\sum_{i}^{N}AP_i \tag{2.13}

式中N为检测类别的个数。mAP还可以根据单独的IoU来计算,通常情况下选择IoU为50%或者75%,记作mAP50mAP_{50}mAP75mAP_{75}mAP50mAP_{50}是指只考虑IoU分数大于0.5的样本的均值平均精确度。

本章小结

本章首先主要讲述了卷积神经网络的主要组成部分的原理和优点。介绍几种常见的激活函数的优点以及各自所存在的问题,还介绍了全连接网络的优缺点以及常见的改进措施。本章随后还重点介绍了YOLOv5网络的结构与检测流程,并对其中的每一个模块都进行了详细讲解。本章最后介绍了目标检测算法的相关评价指标,作为后文YOLOv5改进前后模型的对比指标。

YOLO算法分析及改进

虽然YOLO是一种检测效果较好的通用算法,但是其对于特定数据集需要做一定的调整。本章首先对数据集和YOLOv5模型进行分析,随后针对其中的问题提出几项改进措施。

数据集分析

在正式开始神经网络训练之前,首先需要对数据集进行探索性分析,观察数据集中数据的特点。对数据集有充分的认识之后,才能确定后续对模型的改进方向。

本次行人车辆检测数据集由MS COCO大型目标检测数据集和BDD100K自动驾驶数据集中各自提取的一部分包含行人和车辆的数据集合并而成。COCO和BDD100K数据集的标签格式如图3.1和图3.2所示。COCO标签集边界框为左上角坐标和长宽,BDD100K则为边框的左上角和右下角坐标。因此需要训练之前需要将其转化为YOLO的中心坐标、长宽的格式

图 3.1 COCO标签格式

合并后数据集一共有17524张图片用于训练,2262张图片用于验证。其中检测的类别含有行人、机动车、自行车、摩托车、公交车和卡车六类。每个类别的实例数量如图3.3所示。其中行人类共有51651个,自行车类共有5835个,普通机动车90234个,摩托类6108个,公交车类4957个,卡车类7999个。可以明显发现机动车和行人两类实例较多,而其他类型的车实例较少,明显存在检测样本不均衡的问题,对此有一种改进方法就是在训练之前对其做数据增强处理。此外经过统计,数据集中一共有166784个检测实例,如果将输入图像缩放到640×640的大小计算,标签像素长宽小于8的16560个,而标签像素长宽小于4的有1200个,小目标占比约为9.92%。

图 3.2 BDD100k标签格式

图 3.3 数据集实例分布

对YOLOv5模型的分析

YOLOv5使用路径聚合网络和改进的网络骨架后,相较于以往版本对于小物体的检测效果有了较大的提升,但是YOLOv5对于大尺寸的物体检测性能并不理想,算法难以区分卡车和公交车两类,这可能是因为算法提取的特征不够,难以根据现有特征来区分卡车和公交车。

YOLOv5模型在检测一些密集小物体时,存在定位不精确的问题,即出现一些定位上的失误,还会出现将背景错误的判别为物体或者多个物体被判别成一个物体的问题。

对YOLOv5模型的改进方案

数据增强

针对图3.1中的数据不均衡问题,有两个种改进方法,一是在训练的损失函数中加入一些高级损失函数如Focal loss,另外一种是在训练时期对训练数据使用数据增强。因为修改损失函数较为复杂,因此本文选用使用数据增强的方法。数据增强是指在图片送入网络前的预处理阶段,通过对输入图片进行一些微小的改变操作如随机擦除、调整饱和度等,使得神经网络认为这是一张全新的图片达到增加数据量的效果。在本次实验中将使用马赛克数据增强,其原理是将四张图片随机缩放、翻转、调整色域、随机分布然后拼接起来。这样做不仅可以增大目标检测的数据量,还能够丰富数据集中检测目标的背景,减少背景被误判为检测目标的概率。

针对网络结构改进

YOLOv5对于物体分类以及对大尺寸物体检测性能不理想,可能是因为YOLOv5对于目标的特征提取的不够。对此有一条改进思路,就是对YOLOv5的骨架进行改进,再用一层卷积进行下采样,让卷积层能够提取到更多的特征。这样做的缺点是网络的参数变多,网络的运算速度会有所下降。但是运算速度并不是越快越好,更重要的是较快的速度和较高精确度的权衡。

图 3.4 改进后的YOLOv5模型结构

YOLOv5模型对8倍下采样输出的特征图负责对小目标进行检测,这意味着如果实例的像素大小小于8×8将会很难被检测到[23]。而数据集中小于8×8的实例一共有16560个,而像素尺寸小于4×4的实例只有1200个,显然采用4倍下采样的特征图负责小目标的检测能够包含几乎整个数据集。此外YOLOv5对于密集的小目标物体的定位性能不是很理想。对此提出一种针对特征融合改进方案,调整YOLOv5中的路径聚合网络,取其中4、8、16、32、64倍下采样的五张特征图,经过特征融合人后分别负责检测巨大物体、大物体、中等大小物体、小物体和特别小的物体。这种改进同样是以牺牲速度来换取一定的精度。

总体的改进方法如图3.4所示,其中红色框框起来的部分就是本文新增改进的结构。下方的红色框为新增的下采样部分,输出通道数取256和512的中值。并在特征融合过程中新增了一张特征图负责较大物体的检测。上方的红色框为对特征融合部分的改进,对原先的8倍下采样输出特征图再加一层上采样,与4倍下采样的特征图进行融合,以提高对小目标的检测效果。基于这些改进,负责预测输出的特征图从原先的三张扩展到了五张。

本章小结

在本章首先分析了行人车辆数据集,讲述了数据集的来源和需要检测的类别。介绍了其中样本不均衡的和其中含有一部分小型目标的问题,还介绍了YOLOv5模型在当前数据上的缺陷。本章后续针对本章前面提到的问题,提出了数据预处理和网络结构两方面的改进。第四章将会基于这些改进对其进行实验。

实验与分析

Pytorch是一个facebook研发的开源AI框架,其优点有(1)、与python编程类似,上手容易,可读性高(2)、使用动态计算图,更方便编写和调试,(3)、容易使用GPU进行加速运算。本文将使用pytorch框架来实现YOLOv5改进后的模型。

本章将介绍本次实验的硬件平台,随后对改进前后模型的性能和实际图片效果进行对比分析。

实验硬件平台

本次实验中的所有数据皆在以下硬件平台上运行所得。

(1)、CPU:Intel ® Xeon ® Platinum 8163 CPU @ 2.50GHz

(2)、内存:64GB

(3)、GPU:NVIDIA Tesla P100,16GB显存,浮点计算速度为5.18 TFLOPS

(4)、操作系统:Ubuntu 18.04 LTS

实验结果分析

本次实验基于上节提到的实验硬件设备对改进前后模型训练150轮,使用精确率、召回率和mAP50mAP_{50}作为模型的评价指标,相关评价指标的计算过程可见本文第二章中的评价指标介绍。

训练时期效果对比

图4.1为训练时期IoU阈值为50%的均值平均精确度变化图,纵坐标为只考虑IoU大于50%边界框预测值的均值平均精确度,横坐标为训练的轮数epoch,一个epoch指完成一次数据集里面的全部数据的训练。蓝色的曲线为改进前模型在训练时期的mAP50mAP_{50}的变化曲线,红色的曲线为改进后模型在训练时期的mAP50mAP_{50}的变化曲线。从图中可以明显的看出改进后的模型的mAP50mAP_{50}在训练期间一直比改进前模型高。

图 4.1 改进前后模型在训练时期的mAP50变化曲线

图4.2、图4.3和图4.4为训练时期改进前模型和改进后模型在验证集上的loss对比图,横坐标都为训练时的轮次,纵坐标为loss的大小。蓝色的曲线为改进前的模型,红色的曲线为改进后的模型。图4.2为验证集cls_loss变化图,表示的是模型分辨类别的误差,越低表示模型分类越精准,在YOLOv5中使用二元交叉熵来计算分类损失。可以看到训练后期改进后模型的cls_loss要比改进前的低,因此改进后模型的分类效果要更好。图4.3为box_loss变化图,表示的是模型的边界框坐标定位方面的误差,越低表示模型的边界框定位越准。在YOLOv5中使用了C-IoU loss来计算box_loss,C-IoU loss比原本的损失函数多考虑了边界框的中心点距离和长宽比,能更好的反应预测框和真实框的接近程度,可以看到训练时期改进后模型比改进前的box_loss低,这表明改进后的模型在定位方面更精确。图4.4为obj_loss变化图,表示的是边界框是物体的置信度方面误差,越低表示模型对边界框内是否存在物体的判别能力越强。改进后模型的obj_loss一直比改进前低,这表明改进后模型判别是否存在物体的能力更强,能够减少风景被误判概率。还可以发现随着训练批次的上升,验证集的loss出现了先下降后上升的趋势,这是因为出现了过拟合的现象。为了选取泛化能力最强的模型权重,应该选择loss曲线中最低的点所对应的模型权重作为最佳的模型权重。

图 4.2 改进前后模型的验证集分类误差在训练时期的变化曲线

图 4.3 改进前后模型的验证集边界框误差在训练时期的变化曲线

图 4.4 改进前后模型的验证集物体性误差在训练时期的变化曲线

训练完成效果对比

图4.5为YOLOv5模型改进前后的mAP50mAP_{50}的效果对比,图中蓝色代表的是改进前的模型表现效果,红色的是改进后的模型表现效果。横坐标表示各个类别,一共有行人、自行车、摩托车、公交车和卡车共六类,此外图中还有一个所有类的汇总。纵坐标表示的是只考虑IoU大于50%的边界框的均值平均精确率,以百分比的形式表示。表格第一列为全部类别的均值平均精确率,改进之前为62%,改进之后为64.5%,总体提升了2.5%的均值平均精确度。行人类从66.2%提升到了68.3%,自行车类从47.3%上升到了50%,机动车类从71%上升到了75.1%,摩托车类从65.7%上升到68.6%,公交车类从69.3%上升到了70.4,卡车类从52.3%上升到了54.2%。

图 4.5 改进前后模型的mAP50对比

图4.6是YOLOv5模型改进前和改进后的精确度对比。蓝色柱形图表示的是改进前模型的表现,红色的是改进后的模型表现。横坐标代表检测的类别,纵坐标代表了各个类别的精确度。可以看到全部类的精确度在改进之前是74.4%,在改进之后为75.8%,整体提高了1.4%。行人类提升了2.3%,自行车类提升了2%,机动车类提升了1.5%,摩托车类下降了2.9%,较难分类的公交车类和卡车类分别提升了2.8%和1.8%。

图 4.6 改进前后模型的精确度对比

图4.7为YOLOv5模型改进前后的召回率对比,横坐标是分类的各个类别,纵坐标为模型的召回率,以百分比的形式显示,蓝色柱形图表示的是改进前的模型召回率,红色柱形图表示的是改进后的模型召回率。可以看到所有类别的召回率从原来的55.4%上升到了56.6%,但是行人类从58.6%下降到了57.4%,自行车类从44.9%上升到了45.4,机动车类从63%上升到了64.9%,摩托车类从58.8%上升到了60.8%,公交车类从61.8%上升到了63.7%,卡车类从45.4%上升到了47.5%。

图 4.7 改进前后模型的召回率对比

图4.8和图4.9为模型改进前后对一辆黄色卡车的检测效果对比图,图4.8为改进前的卡车检测效果图,图中棕色框表示的是卡车类,0.49表示模型认为该棕色框有49%的可能性为卡车,紫色框表示的是公交车类,0.45表示模型认为该框有45%的可能性为公交车。图4.9为改进后的模型对同一张图片的检测效果图,图中棕色框表示卡车类,0.91表示改进后的模型有高达91%的置信度认为该框为一辆卡车。比较改进前后的检测效果图可以明显的看出改进后的模型相较于改进前模型在卡车的分类上有了很大的提升。

图 4.8 改进前模型对卡车的预测结果

图 4.9 改进后模型对卡车的预测结果

图4.10为含有小目标带有标签的原始图片图,绿色框代表的车辆类,通过计数可以发现图片中一共有8个车辆框。图4.11为改进前的模型对该图片的检测效果,绿色框代表车辆,数字代表着置信度的大小,数字越高代表越可信,仔细观察可以发现一共预测了9个车辆框,在中间偏左一点的位置多以较高的概率多预测了一个框。图4.12为改进后的模型对于小目标的检测效果,仔细观察可以发现改进后的模型对图片预测了8个车辆框,虽然图中改进后的模型的置信度相对于改进前模型下降了1%,但是改进后的模型对于目标的定位更为精准。

图 4.10 小目标检测测试图片

图 4.11 改进前模型对小目标的检测效果

图 4.12 改进后模型对小目标的检测效果

图4.13为改进后模型的各个模块的计算速度图,横坐标为各个模块,纵坐标为消耗的时间。可以看到改进后的模型在推理部分耗时为1.8
ms,而对推理结果做非极大值抑制耗时4.5 ms,总体耗时6.3
ms。可以估算得到改进后模型的速度约为159 FPS,可以满足实时性的要求。

图 4.13改进后模型的计算速度

本章小结

本章针对YOLOv5改进前后的模型进行了实验对比,对比了训练时期的loss变化和完成训练后的精确度、召回率和均值平均精确度等。此外还对比了两个模型对于实际图片的检测效果。

总结与展望

总结

本文首先讲述了车辆行人检测的研究背景及其意义,简要的阐述了目标检测算法的研究现状。随后在第二章中介绍了卷积神经网络的卷积的原理和结构,分析了其中的优缺点。重点讲述了YOLOv5的模型结构和其中各个模块的作用和YOLOv5的检测流程。

对于行人车辆检测优化方面,本文分析了行人车辆数据集中数据不均衡和小目标较多的问题,此外还分析了YOLOv5模型在当前数据集上存在的一些小问题。针对这些问题本文三点改进方案:

(1)、提出了使用马赛克数据增强来解决数据集中各个类别样本分布不均衡的问题。

(2)、针对YOLOv5对大型车辆的检测效果不理想的问题,本文提出了新增一层下采样层以获取更多的特征。

(3)、针对数据集中小目标较多的问题和小目标定位不理想的问题,本文提出了对YOLOv5模型的特征融合部分进行调整。使用4倍下采样的特征图检测小目标。

本文最后对改进方案进行了实验验证,结果表明相较于原本的YOLOv5模型,改进后的模型在卡车和公交车等大物体分辨的效果上有了很大的提升。此外改进后模型对小物体的定位效果也比原来的更好了。虽然模型仍然保持着实时检测的效果,但是模型的大小有变大了。

展望

经过改进后的YOLOv5模型还可以做出更多的改善,首先改进后的YOLOv5模型虽然在均值平均精确率、精确率和召回率等指标上有所提升,但是因为其新增加了一个下采样层,同时还与大尺寸的特征图进行特征融合,模型的参数量也因此增大,不利于嵌入式等资源紧缺的设备部署。因此希望能够在保持现有精度的情况下降低模型的大小。其次改进后的YOLOv5模型对于大量物体和远处的小目标识别效果依然不佳。

后续的工作有三个方向,第一个是对行人车辆数据集做处理,对其中比较少的实例类做上采样处理或者是人为的增加这部分数据,使得类别的分布比较均衡。第二个是可以参考MobileNet中的深度可分离卷积,尝试将深度可分离卷积运用到改进后YOLOv5的网络结构中,将网络模型轻量化。第三个是尝试将最近比较火的视觉Transformer应用到YOLOv5网络结构中改善网络的检测效果。

参考文献


  1. 中国统计年鉴[Z]. 中国统计出版社. 2019. ↩︎

  2. 中国统计年鉴[Z]. 中国统计出版社. 2020. ↩︎

  3. Zou Z, Shi Z, Guo Y, et al. Object detection in 20 years: A survey[J]. arXiv preprint arXiv:1905.05055, 2019. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  4. Dalal N, Triggs B. Histograms of oriented gradients for human detection[C]//2005 IEEE computer society conference on computer vision and pattern recognition (CVPR’05). Ieee, 2005, 1: 886-893. ↩︎

  5. Lowe D G. Object recognition from local scale-invariant features[C]//Proceedings of the seventh IEEE international conference on computer vision. Ieee, 1999, 2: 1150-1157. ↩︎

  6. Cortes C, Vapnik V. Support-vector networks[J]. Machine learning, 1995, 20(3): 273-297. ↩︎

  7. Freund Y, Schapire R E. A decision-theoretic generalization of on-line learning and an application to boosting[J]. Journal of computer and system sciences, 1997, 55(1): 119-139. ↩︎

  8. Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[J]. Advances in neural information processing systems, 2012, 25: 1097-1105. ↩︎ ↩︎

  9. Girshick R, Donahue J, Darrell T, et al. Rich feature hierarchies for accurate object detection and semantic segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2014: 580-587. ↩︎

  10. Girshick R. Fast r-cnn[C]//Proceedings of the IEEE international conference on computer vision. 2015: 1440-1448. ↩︎

  11. Ren S, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detection with region proposal networks[J]. arXiv preprint arXiv:1506.01497, 2015. ↩︎ ↩︎ ↩︎

  12. Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 779-788. ↩︎ ↩︎

  13. Redmon J, Farhadi A. YOLO9000: better, faster, stronger[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 7263-7271. ↩︎

  14. Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013. ↩︎ ↩︎

  15. Redmon J, Farhadi A. Yolov3: An incremental improvement[J]. arXiv preprint arXiv:1804.02767, 2018. ↩︎

  16. Bochkovskiy A, Wang C Y, Liao H Y M. Yolov4: Optimal speed and accuracy of object detection[J]. arXiv preprint arXiv:2004.10934, 2020. ↩︎

  17. Hubel D H, Wiesel T N. Receptive fields of single neurones in the cat’s striate cortex[J]. The Journal of physiology, 1959, 148(3): 574-591. ↩︎

  18. Fukushima K, Miyake S. Neocognitron: A self-organizing neural network model for a mechanism of visual pattern recognition[M]//Competition and cooperation in neural nets. Springer, Berlin, Heidelberg, 1982: 267-285. ↩︎

  19. LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324. ↩︎

  20. 周飞燕,金林鹏,董军.卷积神经网络研究综述[J].计算机学报,2017,40(06):1229-1251. ↩︎ ↩︎ ↩︎

  21. 蒋昂波,王维维.ReLU激活函数优化研究[J].传感器与微系统,2018,37(02):50-52. ↩︎ ↩︎

  22. Liu S, Qi L, Qin H, et al. Path aggregation network for instance segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 8759-8768. ↩︎

  23. 鞠默然,罗海波,王仲博,何淼,常铮,惠斌.改进的YOLO V3算法及其在小目标检测中的应用[J].光学学报,2019,39(07):253-260. ↩︎