【《基于YOLO的目标检测系统设计》13000字】_第1页
【《基于YOLO的目标检测系统设计》13000字】_第2页
【《基于YOLO的目标检测系统设计》13000字】_第3页
【《基于YOLO的目标检测系统设计》13000字】_第4页
【《基于YOLO的目标检测系统设计》13000字】_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章绪论1.1研究背景及意义近些年来深度学习飞速发展,带动了各类产业的发展。我们可能或多或少都知道这件曾占领头条的一件事。在2016年,著名的Google旗下的DeepMind公司开发的人工智能机器人AlphaGo以4比1的大比分战胜了前围棋世界冠军李世石。AlphaGo是DemisHassabis领衔团队开发,它创造了多个历史上的第一。究其本质,我们了解到原来看起来这么厉害的AlphaGo的主要工作原理就是深度学习。AlphaGo的出现引起了大众对人工智能领域发展的关注,带动了越来越多的人投入到人工智能相关领域的研究当中,随之带来的是越来越多的人学习深度学习,如今我们生活各方各面都充满了深度学习的影子。深度学习在机器学习领域并不是一个才有的新概念,它已经存在了好几年的时间。听到“深度学习”一词时,我们只需联想到一个大型的深度神经网络。“深度”通常指的是神经网络的层数,是新闻界采用的这种流行术语。我通常将它们视为深度神经网络。一层神经网络会把大量矩阵数字作为输入,通过非线性激活方法取权重,再产生另一个数据集合作为输出。与传统机器学习相比,深度学习对数据更为依赖,深度学习的性能随着数据规模的增长而增长,深度学习算法需要规模很大的数据来理解它,当数据很少时深度学习算法的性能相较于传统机器学习更差。这种特点使得我们能够根据数据规模的不同来选择算法。由于深度学习算法在运行过程当中需要进行大量的矩阵运算,所以相较于传统机器学习算法而言,深度学习算法的运行更依赖带有高端GPU的设备,这就无形中使得深度学习的门槛增加了。在许多领域深度学习的应用都取得了成功,自然语言处理和计算机视觉就是其中较为典型的两个领域。其中计算机视觉有五大研究方向,图像分类、目标跟踪、语义分割、实例分割以及目标检测。目标检测技术的使用广泛存在于人们的生产生活当中,例如自动驾驶、人脸识别、安全系统、道路车辆检测以及医疗影像的领域。虽然目标检测技术很早就开始应用,但是由于技术长期无法突破,导致了其应用场景十分狭小,大多仅用于科学研究当中。近些年来深度学习飞速发展,带动了计算机视觉领域的发展,许多以前无法突破的领域也开始了大爆发。目标检测技术也随着近些年深度学习的发展相较从前产生了质的飞跃。目标检测是计算机视觉一个十分热门的研究领域,几十年来有大量学者对其进行研究。目标检测输入一张待检测的图像或者一段视频,给定一个或多个具体的目标类别(如人、车辆、飞机和狗等),计算机需要找出图中是否存在目标实例。如果待检测图片或样张存在该目标,计算机就输出存在的每个目标实例的坐标值和存在范围区域,例如返回一个带有目标可能概率的矩形预测框。这个过程计算机主要包含有目标定位和物体分类两个子任务。传统的目标检测算法一般用三个不步骤来完成检测:首先在给定图像上选择几个候选的区域,然后计算机将提取候选区域的特征,最后使用分类器对其进行分类。作为计算机视觉领域最炙手可热方向之一,我们可以通过目标检测技术来减少对人力资本的消耗,因此研究目标检测技术具有十分重要的现实意义。1.2国内外研究现状1.2.1目标检测算法的发展区域选择的作用是为了对目标位置进行定位。但由于目标的位置是随机的,且不同的目标存在大小、长宽比例不相同等情况,所以在最初学术界采用一种类似穷举的滑动窗口遍历算法来定位目标的位置。这种算法具有很多明显的缺点,例如时间复杂度高,会产生很多冗余的窗口,这严重的影响了目标检测的性能。直到后来SelectiveSearch,EdgeBoxes等区域选择算法的出现,目标检测性能低下的问题才得到一定程度的解决。特征提取的效果如何将直接影响之后进行分类的准确性。但由于目标形态具有多样性以及背景复杂性等原因,导致我们想要设计一个健壮的特征提取方法显得不是那么轻松。传统的目标检测算法一般采取的都是手工特征作为输入,常见的手工特征处理算法有SIFT,HOG和SURF等。提取到候选区域的内部参数后,利用分类器将目标进行分类,常用到的分类算法主要有SVM,AdaBoost等。可变型部件(DPM)目标检测算法出现于2008年,是由于Felzenszwalb提出的一个传统目标检测算法。DPM可以说是传统目标检测算法中最为经典的算法之一。DPM是一种基于部件的检测方法,有很强的健壮性来应对物体的形变影响。DPM算法采用了改进的HOG特征、SVM分类器和滑动窗口检测思想。分别针对目标的多视角问题和形变问题,采用了不同策略用于应对。另外,将样本的模型类别和构件模型的位置作为潜变量,利用了多示例学习自动确定。目前,传统目标检测算法的精度已经被深度学习神经网络目标检测算法所超越,但后者的发展也是在传统目标检测算法的基础上发展起来的,因此传统的目标检测算法仍然值得大众研究和学习。1.2.2深度学习目标检测算法的研究现状深度学习在各个研究领域飞速发展,伴随着卷积神经网络的不断改进,计算机视觉的发展也到达了新的层次。目前主要的基于卷积神经网络的目标检测方法为主要分为两大类别。第一种跳过区域选择阶段的算法被称为One-Stage的目标检测算法,顾名思义,该类算法直接一步生成目标对象概率和空间位置坐标,代表性的算法有SSD,CornerNet以及YOLO。另一种则是较为传统的Two-Stage目标检测算法,分为两个步骤,首先产生包含了目标物体大概坐标信息的候选区域,然后再对候选区域进行具体的物体分类以及校准详细空间坐标信息。R-CNN,FastR-CNN,FasterR-CNN等是Two-Stage目标检测算法代表算法。我们评价一个模型的好坏必然要求一定的标准来衡量。对于目标检测模型而言,我们往往关心模型运行的快慢,也就是检测速度。另一方面,我们还要关心检测的具体结果如何,这就是目标检测的准确度。考虑目标检测的准确度而言,我们要考察的不仅仅是物体的具体类别,还有物体定位的准确性如何。One-Stage算法正如其名所示,因为少了一个步骤,所以该类算法在大多数情况下较Two-Stage算法有检测速度上的更有优势。同理,在大多数情况下Two-Stage目标算法因为多了一个步骤,所以其在目标检测的准确程度上更为表现出色。2014年RossGirshick提出了R-CNN算法,这是一种基于区域的卷积神经网络算法,相对于同期的YannLecun提出的端到端方法OverFeat算法,R-CNN实现了更好的精度。由于其算法结构的合理性,也让该算法赢得了后续大多数Two-Stage算法的争相效仿。卷积神经网络重复运算浪费大量运算资源,针对这一现象,SPP-Net算法出现了。该算法不仅解决了R-CNN算法诸多短板,而且顺利解决了卷积神经网络的图像特征提取这一步骤不断无意义的循环浪费大量运算资源的问题,肉眼可见地加快了候选框的出现速度。虽然解决了上述问题,但是R-CNN同样拥有一些待解决的问题存在。例如训练数据集时由于输入图片尺寸的不一致,由此导致了候选框的感兴趣区域的感受野较大,不能利用置信度传播算法带来的权重高效更新。针对上述问题,继续改进之后的FastR-CNN算法诞生了。FastR-CNN的出现有效地解决了上述SPP-Net存在的问题。并且优化了其训练速度,使之相比R-CNN快了9倍,另外一方面,也将测试速度提高接近213倍。与SPP-Net相比,其进步也十分明显。但是更新后的FastR-CNN算法依旧没有解决一些之前存在的问题,例如选择搜索算法还是会继续生成一些正负样本候选框。为了解决这些问题,使得算法有着更为出色的准确度,FasterR-CNN算法应运而生。该算法由两个部分组成,首先,利用区域候选网络判断现有候选框,如果该候选框是正确的目标选择,就根据多任务损失进行分类定位以确定目标类型。但是一些问题仍然存在,例如区域l候选网络可以在卷积特征图中生成多个大小候选框,这样就使得可变目标的大小与固定感受野有了差别。巴黎科技大学KaimingHe等人在2018年提出了MaskR-CNN算法,通过扩展FasterR-CNN算法,在后者的基础上增加预测对象进行识别。相较于FasterR-CNN算法,MR-CNN算法更易于训练,且运行速度可以达到5FPS。前面提到的都是Two-Stage目标检测算法,该类算法经过不断的发展,虽然检测精度不断提高,但是检测速度长期难以突破。在许多实时的场景这些算法难以胜任。同样是为了解决前者的缺陷,One-Stage目标检测算法诞生了。该算法有一大特点就是它是基于回归方法进行预测的。该算法可以通过完整单次训练完成特征的共享,在不损失其精度的同时也实现了检测速度的大幅度提高。YannLecun的团队在2013年提出了OverFeat算法。OverFeat利用滑动窗口和规则块生成候选框,随后利用多尺度滑动窗口提高检测结果,解决图像目标形状复杂、大小不一的问题。最后利用卷积神经网络和回归模型对目标进行分类和定位。2015年,来自华盛顿大学的RedmonJoseph等人提出了YOLO算法,YOLO算法继承了OverFeat基于回归的One-Stage方法,并且其速度能够达到每秒45帧。YOLO算法的检测框架将目标检测问题视为了一个回归问题,YOLO将图片进行了7×7的网格划分,然后通过卷积神经网络产生相同的7×7的输出,然后每个输出都去预测中心点落在网格上的目标,预测的目标参数包含目标类别和目标框的位置。1.3本课题主要工作本次课题工作安排,首先通过对深度学习和目标检测算法发展及现状的学习,并且参考国内外研究成果,学习并掌握Pytorch机器学习框架的使用。最后经过实践实现基于YOLOv4算法的目标检测系统。本文采用的Pytorch深度学习框架实现YOLOv4主干特征提取网络(CSPDarkNet-53+SPP+PANet)。使用VOC数据集加载与预训练权重来对模型进行训练,最终实现基于YOLOv4的目标检测系统。1.4本论文的结构安排第一章绪论介绍了深度学习以及目标检测技术国内外的发展现状。第二章介绍了深度学习的相关基本知识以及YOLO算法几个版本的发展状况。第三章介绍了YOLOv4算法的基本构造和一些特色之处,并详细阐述了YOLOv4是怎样提取图片特征并进行预测的。第四章实现了目标检测系统并进行了结构分析和性能评估第五章对论文和项目本身进行了总结。

第二章目标检测相关技术2.1人工神经网络人工神经网络(ArtificialNeuralNetwork,ANN)是机器学习算法的一个重要分支,它模仿人类大脑的工作原理,从处理信息的角度对人脑进行解构,对人脑组织以及神经元网络的结构进行了抽象。这种模型具有单层次和多层次的区别。每层结构包含许多的神经元节点,它模仿人类通过对信息的大量重复的学习训练,达到处理信息的功能。相邻两层的两个神经元节点之间的连接代表一个通过该连接信号的加权值,即为权重。神经元是人工神经网络的基本组成单元。2.1.1神经元从一定角度来看,可以将每个神经元看作图上的点,神经网络就是通过有向加权的边连接各个点组成的有向图。图2-1神经元如图2-1所示,每个神经元通过n个不同的输入,x=(x1,y=f(ωx+b)(2-1)其中ω=(ω1,ω22.1.2激活函数激活函数(Activationfunctions)是工作在神经元上的函数,它将输入神经元的信号映射到下一个神经元的输入或者直接进行输出。人工神经网络的激活函数对于学习和理解一些非线性函数是非常重要的,它使我们的模型更加非线性化。倘若取消激活函数,那么人工神经网络的层数无论有多深,但究其本质始终是输入的线性组合,这样的多层神经网络与单层并无区别。激活函数使得我们的神经网络能够适用于大量的非线性模型。常见的激活函数主要有如下四种:Sigmoid函数,其表达式如下所示:y=σ(2-2)因为Sigmoid函数的输出范围为[0,1],正好二分类问题常常要求输出结果为[0,1],所以二分类任务常常会用到这个函数。Tanh函数,其表达式如下所示:y=tanh(2-3)Tanh函数即双曲正切函数,我们在一定程度上可以将其看成经过放大变形处理后的sigmoid函数,它的函数值域是[0,1]。Tanh和Sigmoid有一个同样的缺点,当z趋于无穷的时候,它们斜率就趋向于0,从而使得梯度几乎为0,这使得梯度下降的学习速率很低。ReLU函数,其表达式如下所示:f(2-4)ReLU函数是我们在学习深度学习的时候极为常见的激活函数,在大多数情况下前馈神经网络默认ReLU为激活函数。相较于前两个激活函数,它的有点是收敛速度快,在x>0的时候不会出现斜率趋近于0的情况。LeakyReLU函数,其表达式子如下:f(2-5)ReLu函数在x小于0的时候导数为0,因此有学者针对这一不足提出了LeakyReLU函数。有效改变了ReLU函数在x<0的时候出现神经元坏死的情况。2.2.3神经网络模型大量人工神经元像有向图的节点一样连接在一起形成神经网络,不同的神经网络当中的神经元连接方式是不一样的。我们可以根据这个特点将神经网络分为如下几类。前馈神经网络前馈神经网络是最简单且最易理解的一类神经网络模型。在前馈神经网络中,每层的神经元只和前面一层的神经元连接。每一层的神经元接收上一层的输出作为输入并传播到下一层。前馈神经网络的结构分为输入层、隐藏层和输出层,输入层为第一层网络,输出层为最后一层网络,中间其余各层即为隐藏层。其网络结构模型如下图2-2所示。图2-2多层前馈神经网络模型反馈神经网络反馈神经网络与前馈神经网络不同之处在于其各层神经元之间有反馈,我们可以将该模型用一个无向完备图来表示。状态的改变是该类模型信息处理的方式。每个神经元进行输出信号,同时也将其输出作为输入反馈到其他的神经元,它需要一段时间的工作才能稳定。反馈神经网络模型如下图2-3所示。图2-3反馈神经网络模型自组织神经网络自组织神经网络是一种无监督学习的网络,自组织神经网络只包含两层网络:输入层和输出层。这种网络的优点是自适应权值,极大方便寻找最优解。其在输出层引入网络拓扑结构可以更好地模拟生物学中的侧抑制现象。自组织神经网络模型如下图2-4所示。图2-4自组织神经网络模型2.2.4卷积神经网络 (CNN)卷积神经网络(CNN)是一种为了处理二维输入数据而特殊设计的多层人工神经网络,网络中的每层都由多个二维平面组成,而每个平面由多个独立的神经元组成,相邻两层的神经元之间互相连接,而处于同一层的神经元之间没有连接。卷积神经网络是一种具有卷积计算和深度结构的前馈神经网络。其在多层感知器(MLP)的基础上增加了卷积层和池化层,前者是CNN的核心构成。卷积神经网络的主要组成部分之一是过滤器,它们由nk×nk的方阵组成,其中nk是整数,通常是一个较小的数,例如3或5。有时过滤器也被称为核。卷积神经网络具有三个特性:局部感知、权值共享以及下采样。局部感知(LocalConnectivity)如果神经网络中每一个神经元都要对所有输入信号进行处理,那么我们需要的参数就太多了,为了减少参数,卷积神经网络中采用了局部感知的方法。我们只让每一个人工神经元对图像中的一部分信息进行处理,最后通过在高层重组信息达到获取全局信息的目的。权值共享权值共享指的是当卷积神经网络需要提取某一类特征的时候,所有输入卷积层的神经元信号将共用一组权值,并用相同的一组卷积核对输入图像张量或特征图张量做卷积运算。下采样图像在局部范围内存在冗余信息,这些信息一方面会影响神经网络对图像特征的判断,另一方面又增加了神经网络的计算量,使系统负荷增加。在提取图像特征的过程中,我们需要采用下采样技术去除这些冗余信息。2.2.5反向传播反向传播神经网络(BackPropagationNeuralNetwork,BPNN)是一种前馈神经网络。反向传播是神经网络训练必备的重要方法。它是一种基于前一次迭代中获得的误差来对神经网络权重进行微调的方法。通过适当调整权重,可以降低错误率,并通过提高模型的泛化程度使其变得可靠。我们训练神经网络常常会用到该方法,它有助于计算损失函数相对于网络中所有权重值的梯度。2.3Pytorch介绍Pytorch是用于Python语言的一个库,它可以帮助我们快速地构建深度学习项目。在进行深度学习算法编程的时候我们喜欢使用Python语言,因为它的语法便于阅读和理解。Pytorch是一个强调灵活性基于Python语言的深度学习框架。PyTorch具有两个主要功能,它具有强大GPU加速功能的Tensor计算(如NumPy),以及它能够自动区分以构建和训练神经网络,自从开源以来迅速得到了学术界的认可。Torch是一个与Numpy类似的张量(Tensor)库,我们可以使用它进行多维矩阵数据进行操作。它与在机器学习和其他数学密集型应用有广泛应用。与Tensorflow的静态计算图不同,Pytorch的计算图是动态的,可以根据计算需要实时改变计算图。由于Pytorch的前身Torch机器学习框架采用了较为小众的Lua语言,导致在国内一直很小众,使用人数较少,随着越来越多的机器学习爱好者使用Python进行编程,Pytorch便随之诞生了。作为经典机器学习库Torch的端口,Pytorch为Python语言使用者提供了舒适的写代码选择。2.4YOLO(YouOnlyLookOnce)算法之前第一章曾提到YOLO算法将目标检测视为一个回归问题,一次计算出预测目标的边界框和分类类别概率。YOLO算法的核心思想是将整张图片作为网络的输入,并直接在输出层对BoundingBox的位置和类别进行回归。YOLO算法的网络结构是在GoogleNet模型的基础上建立的,YOLO检测框架通过划分网格来进行回归目标位置的检测及分类。YOLO算法会将图片进行划分为N×N的网格,随后卷积神经网络产生同样的输出,N×N个输出都进行预测,算出目标中心点落在这个网格上的目标。每个格子在进行预测时需要预测多个BoundingBox,以及给予的所有类别的目标的概率。每次预测都会得到一个五维的值(x,y,w,h,confidence)以及能够进行分类的各个目标类别的概率,confidence的值是预测目标的置信度值。在最后,采用非极大值抑制算法提取出输出结果可靠性相对较高的预测框,并去除冗余窗口。并且YOLO算法将误差平方和损失函数作为损失函数。YOLO网络结构如下图2-5所示。2-5YOLO网络结构模型YOLOv2相对于YOLO的第一个版本,在保持快速检测速度的基础上,从准确率、继续提高检测速度和增加识别对象三个方面对YOLO算法进行改进,其中识别对象扩展到了9000种之多,所以YOLOv2又名YOLO9000。YOLOv2采用了Darknet-19,该网络结构包含了19个聚氨基从和5个maxpooling层。YOLOv2预测过程依旧采用YOLOv1中的预测方法,最后将网格预测结构输入sigmoid函数,使最终结构范围保持在[0,1]。YOLOv3算法相较于YOLOv2继续进行了改进,其中网络结构从Darknet-19改变为Darknet-53,而且FPN的引入,使之能够进行更多尺度的预测,并且采用Logistic回归进行预测,采用了二值交叉熵损失函数用以计算分类损失。这一系列改动使得YOLOv3实现了检测速度和精度的均衡。YOLOv4继续对YOLOv3进行改进,作者宣称YOLOv4的检测速度在已经达到了世界最先进的水准的情况下,同时实现了极高的准确度,实现高帧率检测。YOLOv4采用了近些年CNN领域中最优秀的优化策略,从数据处理、主干网络、网络训练、激活函数、损失函数等各个方面都有着不同程度的优化。主要改变有主干特征提取网络由Darknet-53改变为CSPDarknet-53,采用了Mish激活函数等。YOLOv4结合了现阶段较为出色的多种优化策略,使之在TeslaV100上的检测速率达到了65帧。2.5目标检测的评价指标目标检测算法需要一些用于评价性能的指标,下面将会介绍几个常用的评价指标。IOU(IntersectionOverUnion)是一个用来计算目标检测算法准确度的单位量,它的值是计算模型中预测框和真实框的交并比。我们可以用于IOU来测量预测值和真实值之间的相关程度,用通俗的话来讲就是真实框和预测框的重合度越高,IOU的值就越大,反之则越小。IOU的计算公式如下2-6所示。IOU=(2-6)精准率(Precision)被用来评价目标检测算法分类器的预测的准确程度的,召回率(Recall)被用来评价分类器寻找正样本的能力,它们的计算公式分别如下公式2-7,2-8所示:precision=(2-7)recall=(2-8)TP(TruePositive)代表样本实际是正样本,经过目标检测预测后被判定为正样本的目标数量。TN(TrueNegative)代表样本实际是负样本,预测为正样本的目标数量,FP(FalsePositive)代表样本实际是负样本,预测为正样本的数量。FN(FalseNegative)代表样本实际是正样本,预测为负样本的数量。PR曲线一条描述精确率和召回率关系的曲线。它的横坐标为召回率,纵坐标为精确率。对PR曲线求准确率的平均值就是平均精度(AveragePrecision,AP),平均精度用以评价一个模型对于某个具体目标类别的准确率。mAP(AveragePrecision)则是所有平均值的平均值,顾名思义要求得mAP我们需要对所有类别目标的AP再求平均值,AP以及mAP公式如下2-9,2-10所示:AP=(2-9)mAP=(2-10)2.6本章小结本章着重介绍了学习目标检测算法必备的一些基础知识,包括人工神经网络的概念,Pytorch机器学习框架以及目标检测算法的一些基本评价指标。为后文正式介绍YOLOv4算法奠定了基础。

第三章YOLOV4目标检测模型YOLOv4是基于YOLOv3提出的,可以视为YOLOv3的加强版本。原作者在v3版本的基础上对模型进行了大幅度优化,其初衷是加快目标检测模型的运行速度。作者对神经网络模型进行了并行优化,使得模型能够使用一些较为常规的GPU进行训练,极大方便了许多因为没有好设备而无法训练自己YOLO模型的深度学习爱好者。YOLOv4相较于YOLOv3仅在Backbone上做了改动,具体预测过程仍然与YOLOv3保持一致。YOLOv4的主干特征提取网络如下图3-1所示。图3-1YOLOv4网络结构图3.1CSPDarknet-53YOLOv3算法采用了DarkNet-53网络结构,能够实现三种不同尺度的预测框,融合了多层的特征信息。DarkNet-53网络加入了残差结构,通过残差结构将整个网络结构分为了几个浅层的结构,便于控制梯度传播,有效地防止了在网络层数加深的基础上梯度消失或爆炸,从而获得语义更为丰富的信息特征图。YOLOv4在继承DarkNet-53网络结构的基础上引入了CSPNet网络结构,CSPDarkNet-53网络首先在输入处将输入图像的尺寸调整为合适的分辨率,并将其输入到网络中进行训练和检测。CSPDarkNet-53的基本卷积块是一个批量标准化的卷积层(BN),并使用Mish作为其激活函数。在每次残差块进行堆叠进行了拆分,一部分继续进行残差块堆叠,另一部分经过少量的处理直接连接到最后将输入和输出进行连接,这样做的意义是保留输入的原始特征信息。最后我们保留最后三个有效特征层进行下一步的处理。CSPDarkNet-53网络结构主要由卷积层和残差层构成,其意义是提取图片的主干特征便于后续YOLO层进行处理。CSPDarkNet-53网络首先在输入处将输入图像的尺寸调整为合适的分辨率,并将其输入到网络中进行训练和检测CSPDarkNet-53的结构如下图3-2所示。图3-2CSPDarkNet-53网络结构图CSPDarkNet-53主要由三部分组成:一个用于特征提取的前端网络、一个特征融合模块和一个用于分类和回归操作的检测模块。在输入时将输入图像的尺寸调整为416×416,并将其输入到卷积网络中进行训练和检测,我们的基本卷积块是一个包含了批量标准化的卷积层,并使用Mish激活函数。该模型的前端使用由CSPDarknet-53组成的骨干网通过卷积层和残差模块的叠加,并在骨干网中通过对卷积层进行下采样,然后用PANet+SPP模型结构实现了浅层的融合,语义特征和多尺度接受域的融合,充分利用了浅层网络,改善了小目标的特征丢失问题。我们使用回归+分类的思想对输入图像分别进行分割,输出52×52,26×26和13×13三种不同尺寸的图像,分别实现了对小目标、中目标和大型目标的检测。3.2SPP(空间金字塔池化层)结构在特征金字塔部分,YOLOv4结合了SPP结构和PANet结构。SPP结构有如下几个特点,可以针对输入尺寸不一的图片产生相同尺寸的输出,得到长度相同的池化特征。在YOLOv4里我们在CSPDarknet-53网络结构输出的最后一个特征层的卷积操作里我们使用了SPP结构。YOLOv4中的SPP经过修改,以保留输出空间的尺寸大小。当我们在对CSPDarknet-53的输出的最后一个特征层进行三次卷积后,我们对此时得到有效特征层再进行最大池化处理,这个过程中我们使用了四个尺度的池化核,池化核大小分别为13×13、9×9、5×5和1×1(即无处理)。这样做可以极大地增加候选框的感受野,有效分离图片的特征。池化后将来自不同核大小的特征图连接起来作为输出。再将输出结果进行三次卷积后输出到PANet。3.3PANet(路径聚合网络)PANet是2018年的一种实例分割算法,通过增加从最下层至最上层的信息传输路径,增强了特征金字塔,通过自适应池化将不同层次的特征图融合在一起,进行统一预测。YOLOv4算法当中我们的PANet结构主要涉及了三个有效特征层。在YOLOv4中PANet首先对SPP输出的结果特征层进行一次卷积上采样,再对CSPDarkNet-53中第二个输出特征层进行一次卷积操作,将输出的两个特征层进行一次堆叠操作,再进行五次卷积,这样做可以减少参数量,并提取更为有效的特征,这是第一步。然后再将第一步的输出结果继续进行上采样,再将CSPDarkNet-53中第一个输出特征层进行一次卷积操作,再一次把输出的两个特征层进行一次堆叠五次卷积的操作,这是第二步。之后再分别进行两步操作,首先将第二步结果输出一个YOLOHead,同时进行一次下采样同第一步输出的结果进行堆叠,之后再次进行五次卷积操作,这是第三步。最后再将第三步的特征层输出第二个YOLOHead,同时进行一次下采样,与SPP输出的结果特征层最后进行一次堆叠和五次卷积,将最终结果输出第三个YOLOHead。最后得到输出层的三个YOLOHead输出shape分别为(13,13,75),(26,26,75),(52,52,75),因为我们的图片是基于VOC数据集的,所以我们得到的输出维度中的最后一位为75,它的目标种类一共有20种。3.4进行预测YOLOv4的预测过程和YOLOv3基本一致,首先通过卷积神经网络输出层的输出的三个YOLOHead,我们可以获得三个特征层的预测结果。每个图片将会用三个不同尺度大小的网格进行分割,同时我们将获得不同尺度网格上的三个预测框位置。如图4-3:如图所示三个蓝色的框分别对应三个预先设定的先验框,YOLOv4网络的预测过程只会去判断这些先验框内部是否包含目标以及判断目标的种类,并进行调整获得预测框,如图黄色框所示。在获得最终预测结构后,我们的目标检测模型将进行得分等级排序以及非极大抑制筛选,紧接着我们就能够获得图像上的预测框具体位置,我们得到的预测框都是经过了筛选的。经过筛选后的框可以直接绘制在图片上,最后我们就可以获得输出结果。图4-3YOLO预测示意图3.5YOLOv4其它方面的优化3.5.1CIOU回归优化损失函数IOU表示预测框与实际框的重叠比,并不涉及目标的尺寸大小。我们常用的BBox回归损失进行优化和使用IOU进行优化并不能够实现等价。通常的IOU并不能够直接优化没有重叠的地方,所以我们有了将IOU直接用作回归优化的损失函数的构想。因此诞生了许许多多的改进方案,CIOU就是其中非常出色的一种。CIOU和IOU一样都可以用来衡量两个框的重合程度。CIOU相较于IOU考虑了更多因素,例如预测框和真实框的中心距离,还有两个框的长宽比等。在这里我们采用CIOU作为YOLOv4回归损失函数来对模型进行优化。CIOU的公式如下3-2所示:CIOU=IOU−(3-2)其中ρ2α和v的公式如下所示:α=(3-3)v=(3-4)最后我们得到LOSSCIOU公式如下:LOSS(3-5)3.5.2Mish激活函数YOLOv4相较于YOLOv3,原论文作者将DarknetConv2D的激活函数由LeakyReLU修改为了Mish,Mish函数的公式如下3-1所示:Mish=x×tanh((3-1)图3-4Mish函数图像Mish函数的图像如上图3-4所示,从图中我们可以看出Mish函数并非单调函数,这种性质有助于稳定网络梯度流。Mish函数相较于LeakyReLU的虽然计算量更大了,但YOLOv4通过Mish函数+CSPDarknet换来了目标检测准确率的大幅度提高。3.5.3Mosaic数据增强YOLOv4中采用了Mosaic数据增强混合四张图片拼成一张图片来训练,这样做等效于增大了mini-batch,显著地减少了对增大batch_size的需要。同时四张拼接的图片带来的还有一个极大的优点就是丰富了检测物体的背景,在对数据集进行批归一化计算的时候相对于一次性进行了四张图片数据的计算。我们的实现思路如下,首先我们每次读取四张图片,读取完成后我们再分别对四张图片进行翻转、缩放以及色域调整,再将四张原始图片按照四个方向的位置进行摆放,随后我们进行图片的组合和框的组合。如图3-5所示。图3-5Mosaic数据增强3.6VOC数据集PASCALVOC挑战赛(ThePASCALVisualObjectClasses)是一个在2007年到2012年间举报的世界级计算机视觉挑战赛。PascalVOC2012作为基准数据之一,在对象检测、图像分割网络对比实验与模型效果评估中被频频使用,该数据集主要是针对视觉任务中监督学习提供标签数据,VOC数据集主要有一万多张图片,其中分为四个大类别,包含有人、城市里常见的动物、路上车辆、一些常见的家具物品。它主要为图像分类、对象检测识别、图像分割三类任务提供服务。细分之下有二十个类别:Person:personAnimal:bird,cat,cow,dog,horse,sheepVehicle:aeroplane,bicycle,boat,bus,car,motorbike,trainIndoor:bottle,chair,diningtable,pottedplant,sofa,tv/monitor3.7本章小结本章通过介绍YOLOv4主要结构,了解到了YOLOv4主干特征提取网络的基本工作原理以及其具体工作网络的详细流程。同时通过对YOLOv4另外一些小的改进,例如CIOU回归优化损失函数和Mosaic数据增强等,我们对YOLOv4有了较为深刻的理解,方便开展进行下一步的具体实现。

第四章项目具体分析与实现4.1所需环境及硬件配置表4-1实验环境实验环境GPUNvidia2080ti操作系统Windows10编程语言Python3.7机器学习框架Pytorch1.2集成开发环境Pycharm4.2系统主要功能目标检测系统需要实现的功能是通过输入图片或视频,然后系统完成对于目标的识别标注,并将识别后的结果返回给用户。使用时需要运行程序,然后选择自己需要系统识别标注的图片或者视频输入系统当中,系统将对传入的视频或者图片进行标注并计算目标的概率,最后输出一个标注好目标的类别和概率的图片和视频。由于采用VOC数据集进行训练,系统能够识别的物体共有二十种。4.3数据集的获取训练所需的VOC数据集由网络下载,共有16000多张图片,大小约1.7GB。VOC数据集的采用xml格式文件进行标注,其标注样例如下所示:<object>

<name>chair</name>

<pose>Rear</pose>

<truncated>0</truncated>

<difficult>0</difficult>

<bndbox>

<xmin>263</xmin>

<ymin>211</ymin>

<xmax>324</xmax>

<ymax>339</ymax>

</bndbox></object>图4-1VOC数据集原始图片4.4数据集的训练数据集的训练首先我们载入预训练权重,划分训练集和测试集分别为9:1。然后我们将训练分为两次,第一次训练冻结部分网络,设置学习率为0.001。在训练的同时我们将对测试集进行验证,便于判断训练的进度。在第一次训练完成后,随之进入第二次训练,第二次训练我们将学习率调低为0.0001,并解冻所有网络进行训练,4.5系统工作流程图4-2系统工作流程图系统工作流程图如上图4-2所示。我们首先运行程序,输入一张图片,系统首先将计算输入图片的高和宽。然后我们将图片进行不失真的修改,当输入图片长宽不相等的时候,我们将往图片边缘填充黑条,将其调整为416×416的大小。然后我们将图片输入主干特征提取网络进行预测获得预测结果进行输出。4.6系统功能展示经过选取两张室外场景图片以及一张室内场景图片用于测试程序预测效果,我们分别得到如下图4-3,4-4,4-5所示运行结果:图4-3YOLOv4室外场景识别示意图1图4-4YOLOv4室外场景识别示意图2图4-5YOLOv4室内场景识别示意图经过测试,程序最终达到了预期效果。4.7结果分析通过训练VOC数据集,我们最终得到总体损失Total_Loss=2.9393。在训练完成得到权重文件后,我通过在VOC数据集运行测试程序得到如下表结果。表4-2模型评估结果wAPF1RecallPrecisionaeroplane98.15%0.9895.45%100.00%bicycle93.30%0.9392.71%92.71%bird96.31%0.9692.35%100.00%boat96.29%0.9190.76%90.76%bottle93.86%0.9289.29%94.34%bus98.62%0.9796.39%97.56%car96.55%0.9592.35%96.85%cat95.75%0.9794.01%99.37%chair92.87%0.8992.16%85.20%cow99.75%0.9798.61%95.95%diningtable92.51%0.8689.33%82.72%dog98.48%0.9897.18%98.10%horse94.05%0.9591.95%98.77%motorbike98.22%0.9593.62%95.65%person96.74%0.9492.39%96.12%pottedplant96.64%0.9290.60%93.75%sheep95.98%0.9493.16%94.78%sofa93.36%0.8789.16%85.06%train99.92%0.9998.57%98.57%tvmonitor97.45%0.9496.19%91.82%从实验结果中我们可以发现,本次实现的YOLOv4模型在VOC数据集训练得到了较好的结果。在对VOC数据集所提供的二十种类别目标的进行训练后过,我们的YOLOv4模型在识别室外场景中的列车以及牛时的平均识别率分别达到了99.92%和99.75%。即使是在对背景环境极为复杂的室内场景,平均识别率最低的餐桌和椅子也分别达到了92.51%和92.87%,这证明本次项目的结果是较为成功的。经过计算我们最终得到整个模型的mAP为96.24%。我们再对评估结果进行可视化如下图4-6所示:图4-6YOLOv4mAP计算结果可视化

第五章总结与未来工作展望5.1毕设总结通过本次课题,我经过几个月的学习理解了YOLOv4算法。一开始我对深度学习领域并不了解,通过几个月以来的学习,我对深度学习有了进一步的认识,并渐渐了解学习到了计算机视觉领域的一些东西。通过一些了解我采用了Python中的Pytorch深度学习框架来进行YOLOv4代码的编写,采用深度学习框架让我少写了很多代码,并且提高了代码运行效率。在进行课题课题的过程中我遇到了很多困难,一开始并没有想过深度学习对计算机硬件的门槛如此之高。在第一次进行数据集训练的时候,我自己的笔记本直接爆了显存,最终将batch_size调到了1才解决问题。但是这样换来的训练时间高达几百个小时导致我不得不放弃,最终借到了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论