版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
·基于PyTorch卷积神经网络的图像识别算法分析摘要自神经网络的快速发展和大规模应用以来,人工智能的构想和优势开始深入人心。人工智能也越来越智能化,应用领域越来越广阔,许多以往需要由人来判断的事情都可以交由计算机来执行。对于港口设备检测的课题就基于此背景下提出。而以往的检测方法在准确度和效率等方面仍存在一定的问题,而且需要由人工设计结构和参数提取图片中的目标特征,工作比较复杂,受背景变化影响大,泛用性也不高。近些年来,深度学习理论的持续发展和各种优秀的框架的出现,在多个人工智能领域表现突出,相较于以往的检测算法,深度学习神经网络框架有着更高的性能、更快的速度和更广泛的通用性。在深度学习目标检测框架中,YOLOv3(YouOnlyLookOncev3)是由YOLO和YOLOv2的卷积神经网络结构进行改进更新后发展而来的,如今已经成为深度学习目标检测框架中广泛使用的算法。此系统采用以YOLOv3网络作为检测的核心算法。此外,考虑到港口环境的复杂性,本文运用爬虫技术搜集互联网上公开的港口全景图以及部分设备特写图作为训练的数据集;数据集中图片分辨率、环境不同,包含了各种场景,使得结果具有较好的普遍性。YOLOv3相较于其他的深度学习目标检测方法,有着更高的检测速度,同时检测准确率也有较好的结果,系统在背景复杂、检测目标分布密集、分辨率较低的图片中也有着尚可的检测能力。系统实现了图片目标检测,实现了在图像质量良好情况下比较准确的目标检测,且具有一定的实时性。关键词:目标检测;图像识别;PyTorch;YOLOv3;深度学习Keywords:Targetdetection;imagerecognition;PyTorch;YOLOv3;deeplearning目录1.引言 页共25页1.引言1.1研究背景及其意义自图像识别技术从上世纪60年代出现以来,由于泛化能力弱,可移植性差,准确度较差等问题,传统图像识别技术开始被淘汰。直到2006年,杰弗里·辛顿等人提出了深度学习这一概念并给出其概念定义,其主要涉及三类方法:卷积神经网络、基于多层神经元的自编码神经网络、深度置信网络[1]。深度学习,是在如今时代与科技大环境下逐渐兴起的一种机器学习算法,其主要目标是构建一个仿人类大脑思考方式,具有观察总结自我学习性质的神经网络。简单剖析其根本,就是把获得的数据的基本特点作分层处理,从而把观察所得的简单特征抽象化为更为高阶的,神经网络正是在这方面的功能实现上发挥了其巨大的作用。关于神经网络方面的探索已有了相当长一段时间,初期的神经网络的灵感来源于早先的感知器模型,这也构成了其原型。但是感知器模型的功能尚未全面,所能完成的工作局限于容易的线性分类,即使是并不困难的异或问题也不能完成。但随着不断尝试探索,人们发现如果可以在原有基础上新增一层计算层,那么它将取得巨大突破,无论是先前提到的异或问题,又或者是相对复杂的非线性分类,它都可以完成并取得不错的效果。大约35年前,为了实现当神经网络从一层变为两层时对于复杂计算量的过度,鲁姆哈特和杰弗里·辛顿等一批学者率先提出了反向传播算法这一概念,也就是现在俗称的BP算法。经过20年左右,杰弗里·辛顿第一次提出了深度信念网络的概念,并于世界最权威之一的学术期刊《科学》上做出了相关发表。深度信念网络中有一个过程名为“预训练”,其目的在于能够找到最接近理想的值作为神经网络中的权值的最优解,与传统的训练方法的区别还在于需要再使用微调这一手段对网络整体进行优化训练。正是通过使用BP算法和预训练两个过程,极大程度地提高了多层神经网络的训练速度,节约了大量时间成本。PyTorch是由Torch7团队开发的。作为一个开源科学计算框架,Torch其起源和发展可以追溯到纽约大学约20年前的研究项目。Torch的核心在于在构建深度神经网络及其优化和训练方面,为图像,语音,视频处理以及大规模的机器学习问题提供更加快速且高效的计算方案。而为了追求更高的灵活性,可拓展性以及计算速度,Torch团队一开始采用Lua作为它的开发语言,但Lua语言的受众相对比较局限。为了满足当今业界里Python先行的原则,Torch团队将其重新更新为了PyTorch,并于2017年由Facebook人工智能研究员在GitHub上公开源代码。正如其名,PyTorch使用python作为开发语言,并且近年来和tensorflow,keras,caffe等热门框架一起,成为深度学习开发的主流平台之一。本毕业设计基于Pytorch框架,运用yolov3,结合自动化港口技术需求,对自动化港口器械或人物(如集装箱,集装箱运输工具,码头工作人员等)图像进行练习与识别。国内外研究现状在机器学习的发展过程中,深度学习的出现极大地促进了其发展速度,并使其受到了世界各国相关研究人员和互联网公司的重视。如今,深度学习在语音识别,图像识别和自然语言处理三个领域拥有较广泛的应用[2],而本次毕业设计正主要体现在图像识别方面。深度学习算法涉及范围极广,其中对于图像的识别处理更是最先尝试应用的领域。在2012年的ImageNet竞赛中,克里泽夫斯基等人便训练了一个包含了有5个卷积层和3个全连接层的大型深度卷积神经网络AlexNet[3]。以ImageNet数据集为基础,运用GPU强大的算力,以及层数足够的卷积神经网络,通过加入随机梯度下降算法和Dropout等优化手段以及训练数据扩充策略,成功将错误率控制在了15.3%,帮助克里泽夫斯基等人最后拿下了2012年的ILSVRC。微软亚洲研究院的何恺明等人则在随后的2015年设计了一个多达152层的ResNet架构,它在当年是层数最高的的深度神经网络,虽然层数很高,但因为相应的降低了复杂程度,反而使得训练变得更为简易轻松,最后其错误率更是只有3.6%,即使是真人的平均水平一般也只是5%-10%左右,这充分展示了其优异性。随着科技的发展,目前,深度学习框架主要可以分为Google、Facebook、Microsoft和AmazonAWS四个阵营。而在这四个阵营中,最流行的两个框架莫过于Google的TensorFlow和Facebook的PyTorch。与TensorFlow相比,一方面,PyTorch的设计依照三个由低到高的抽象层次,由张量,变量,神经网络模块层层递进,结构清晰,另一方面,这三个抽象层次之间联系密切,可以同时进行修改和操作。对新手相比更加直观简洁,更容易深入理解代码,这也是本人最后选用PyTorch框架的原因之一。1.3论文主要研究内容在图像处理这一领域,如今相对成熟的深度学习网络已经具有了不逊于人类的优秀辨识能力。而随着深度学习网络中神经网络层数的不断增加,它的各种问题开始涌现,比如:目前为止,已构建完成的可用的优秀数据集相对较少,这便限制了深度学习的进一步发展[4];网络的复杂度上升,这导致了对神经网络的训练需要计算机有更强的计算能力以及其可解释性降低;而当训练误差减少到一定程度后,网络的预测误差反而会增大,泛化能力降低,从而导致过拟合现象的出现。在对大量论文和资料进行查阅和对比之后,针对图像识别的研究,本文基于现有技术,训练了一种基于PyTorch卷积神经网络的图像识别算法,在典型的卷积神经网络的体系结构的基础上,根据图像的特点,使用PyTorch以及yolov3框架构造一个相对简单的卷积神经网络模型[5],对自动化码头的特定器械进行图像识别。通过网络爬虫技术搜寻图片后运用labelimg制作标签,来自己构建数据集,并将数据集分为训练(train),验证(valid),测试(test)三类导入yolov3对其进行训练和检测。神经网络算法概述2.1Pytorch概述为了图形处理器的加速,一款名为Pytorch的深度神经网络编程应运而生。Torch设计的领域很广,由于其特点,无论是机器学习,还是其它需要大量数理计算的领域都能发挥巨大作用,并且在计算图上的应用上,相较于传统的静态计算图,它依靠其动态优势独占鳌头,根据要求实时更改计算图,有很强的适应性。作为Python的开发语言,最近几年已逐渐成为深度学习研究创新的不可或缺的成员之一。在设计上,PyTorch的设计追求最少的封装,不像TensorFlow中充斥着许多全新的概念,PyTorch的设计遵循高维数组(张量)→自动求导(变量)→神经网络(层/模块)三个由低到高的抽象层次,这三个抽象层次之间联系非常紧密,可以同时进行修改和操作[6]。而且,拜其相对简洁的设计所致,其代码与其他框架相比更易于理解。与TensorFlow相比,PyTorch的源码只有约TensorFlow的十分之一左右。同时,PyTorch的灵活性不以速度为代价。Torch的接口设计就以灵活易用而著称,而PyTorch的面向对象的接口设计便是来源于Torch。PyTorch的设计最符合人们的思维,它让用户尽可能地被框架本身所束缚,只需专注于实现自己的想法[7]。2.2卷积神经网络(CNN)概述卷积神经网络,是深度学习算法应用最成功的领域之一,卷积神经网络包括一维,二维以及三维卷积神经网络。序列类问题的数据处理通常使用一维CNN,而图像类文本的识别则一般使用二维CNN,在医学图像以及视频类数据识别方面,则更普遍使用三维CNN[8]。卷积神经网络(CNN)基于动物视觉感受野和生物学大脑神经网络理论,可以实现自主学习。CNN的基本结构包括输入层、卷积层、池化层、输出层,在卷积神经网络的发展中,人们加入了许多其他处理层,如BN(BatcthNormal),而深度学习就是一种卷积层有十几甚至几十层的卷积神经网络。输入层 在卷积神经网络中,一般是将图片经过处理后转换为一个固定的大小。图像处理的过程包括灰度化以及resize(重新定义图片尺寸)。卷积层 使用一个卷积核,按照步长与图片对应元素进行加权求和,其作用是获取图片的局部特征。通过自定义卷积核可以实现增强原始信号的某些特征,可以降低图片噪点。而卷积运算的基本操作便是将卷积核与图像的对应区域进行卷积,通过在图像上不断移动卷积核来计算卷积值来完成对整幅图像的卷积运算。池化层 池化层位于连续的卷积层之间。为了减小过拟合发生的概率,它通常将相近的部分数据取最小值或取最大值以压制成一个数据。而这个过程,相当于对图片进行尺寸的重新定义,即resize。这一过程不仅不会使处理对象的特征值产生变化,同时也能够减少重复和冗余的信息。经过卷积层处理后得到的特征集合,理论上可直接用于训练分类器,然而事实上,直接运用会带来巨额的计算量。面临千万级别的特征分类问题时,直接运用往往会导致计算困难并且容易出现过拟合现象。在对此类问题的实际处理过程中,可通过对不同位置的特征进行聚合统计等处理来降低数据规模,提高运行速度。而特征收集合拢的技术手段便被称为池化,此外由于方法要求的区别,又可划分为平均池化或最大池化。输出层 输出层是经过卷积神经网络后提取的图像特征。深度学习的目标检测方法,可以分为two-stage和one-stage。two-stage方法,是使用卷积神经网络提取目标的特征,然后通过RPN网络完成传统目标检测算法中滑动窗口所完成的任务(也就是产生候选区域)[9],同时将候选区域分为目标和背景两类,再用一个ROI_pooling层将等待选择区域进行进一步位置的准确回归以及修正,随后通过使用全连接层对等待选择区域的特征进行更详细的表达,最后进行回归和分类。其中的代表有R-CNN、SPPNet、FastR-CNN等。one-stage算法则是对输入图片经过一次检测就能得到最后的检测结果,相较于two-stage有着更高的检测速度,而采用one-stage算法的代表系统就是YOLOv3。与深度学习检测方法相比,传统的检测方法依赖于人工设计的提取器,工作量大,每个步骤和方法都是独立的,全局优化能力差,泛化能力差,仅适用于特征明显、背景简单的目标检测。深度学习检测方法通过庞大的数据训练,自主学习和提取特征,泛化能力强,检测速度和精度更高。2.3YOLO和YOLOv2算法简介 2015年,约瑟夫·雷蒙等人发表了论文YouOnlyLookOnce:Unified,Real-TimeObjectDetection,标志YOLO的诞生。YOLO创造性的将目标检测视为回归问题(regressionproblem),将候选框提取和检测放入到一个神经网络中。YOLO核心思想是将整个图片当作输入层,经过网络结构生成特征图,特征图内会包含边界框信息,然后将边界框的位置、大小和种类分别在输出层展示。在输入图片之前要先将不同尺寸的图片处理成固定大小,即resize,随后YOLO便会将图像分成S*S的网格(gridcell),每个网格的大小相同,对于一个object,它有一个中心坐标,这个中心落入某个网格,那么这个网格负责预测它;每个网格预测B个边界框和其含有目标的置信度[10],还有每个边界框的分别可能为C个类别的概率(conditionalclassprobabilities)。在边界框中包括有(x,y,w,h)和置信度Confidence,这5个元素是边界框的基本信息,x、y确定边界框中心坐标的位置,w、h则分别代表边界框的宽和高的值,每个Confidence对应一个边界框,Confidence计算公式:Confidence=Pr(Object)∗IOUpredtruth Pr(Object)是边界框存在object的概率,只能为1和0,IOU表示truth框和pred框的IOU(IntersectionoverUnion)。主体网络结构是经GoogleNet改进的DarkNet。YOLO的缺陷则在于对于小目标的检测效果不理想,虽然每个grid可以预测B个boundingbox,但是每个grid只能够预测一个object。YOLOv2在YOLOv1的基础上进行了许多改进,参考采用单个深度神经网络即SSD使用多维尺度的特征图片做出相应检测,提出passthrough层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。加入BN(BatchNormal)提升收敛速度,加入高分辨率分类器HRC(HighResolutionClassifier)以适用高分辨率输入,加入AnchorBoxes提高了召回率(recall)[11],使用k-means获取anchors,采用改进的主体网络DarkNet19等。2.4本章小结本章简要介绍了基于python的pytorch框架结构,其优势和特点。此外,还简要介绍了CNN卷积神经网络的结构组成以及其与往常的传统神经网络的区别和优势,对YOLO和YOLOv2进行了介绍,分析了它们的思想和方法。为之后理解以及运用YOLO框架并导入自建数据集进行训练奠定了基础。3.神经网络目标检测算法的设计与构建3.1数据集的构建3.1.1爬虫技术概述网络爬虫简单介绍来说就是一种根据需求制定规则,从而实现在网络上自动搜素后收取相关信息的程序。随着网络的迅速发展,我们已经进入了一个信息爆炸的时代,而如何对这些信息有效地进行提取并利用便成为一个巨大的挑战。搜索引擎在网络环境的普及下已经走入千家万户,成为辅佐人们进行信息获取的不可或缺的重要工具之一。然而,常见的搜索引擎并不能满足广大背景下的用户需求,用户的实际需求千变万化大不相同,然而常用的这些普通搜索引擎为了尽可能多的提供信息,会覆含有很多与用户内容不匹配,无法使用的无关信息页面,无限的网络数据资源与有限的搜索引擎服务器资源之间的矛盾将进一步加深;由于万维网数据形式的多样化,同时伴随网络技术层面的突破,包括但不仅限于图像、声音、录像等等不一样的流量集不断涌现,常用的普通搜索引擎在处理这些含有大量数据集的复杂信息方面的能力非常不理想,难以准确地进行搜索和收集;常见的普通搜索引擎能给予用户的服务基本都局限停留于关键字的检索,对于更加详细复杂的信息的搜索尚不支持。基于上述原因,为了能准确收集获取用户所需的目标信息,对所需的网页进行筛选,一项名为聚集爬虫的新技术顺势产生。它自动下载网页,有选择性的在各个网页上抓取用户搜索的有关信息,它与普通的搜索引擎的区别在于,不追求量而重在质,过滤了许多无关的垃圾网页,而是把重点放在了抓取用户真正需要的精准的目标。本人基于聚焦爬虫技术以及Python,编写程序爬取百度图片输入标签后搜集到的图片,以此来构建自己的数据集用于训练。3.1.2数据集图片搜集以及筛选针对本文提出的课题,本人并没有找到现有的可用数据集来直接使用,因此决定自己构筑数据集。使用基于python的网络爬虫技术,以AGV小车无人搬运车,集装箱,港口集装箱吊机,港口集装箱卡车,港口工人作为搜索标签分别从百度上爬取了1000张图片,合计共5000张图片。进过人工手动筛选后保留了约2000张相对优质的图片来构建数据集。图3-1爬虫图片预览3.1.3LabelImg概述以及使用LabelImg是一个图形图像注释工具。它源码python编写,并用PYQT作为图形界面。注释被按照ImageNet所使用的PASCALVOC格式存成XML文件[12]。通过LabelImg,对图片中出现的特定目标进行划分并打上标签,本文的数据集共使用了五个标签,分别是对应GV小车无人搬运车的AGV,对应集装箱的C(container缩写),对应港口集装箱吊机的MA(mechanicalarm),对应港口集装箱卡车的TRUCK,对应港口工人的worker。图3-2Labelimg画面预览因本人精力有限,最终从五个分类中各选取了200张图片制作数据集,合计一千张,用于训练以及验证。并从剩余图片中选取了约100张图片用于预测。图3-3数据集图片预览3.2YOLOv3神经网络框架3.2.1新的网络结构DarkNet53 YOLOv3的核心网络是DarkNet53框架。该框架的内容如下:对于初始图片进行尺寸的重定义处理成416*416*3的图片,处理后统一大小的图片便作为核心网络的输入数据。DBL(Darknetconv2D_BN_Leaky)为网络的基础构成,卷积、BN(BatchNorm)和LeakyReLU依次构成一个DBL。根据ResNet的残差网络结构,构造基本残差结构Res_unit,再由Res_unit组合成Res1、Res2、Res4和Res8,DarkNet53结构由Resn和DBL结合而成。在DarkNet53中共有53个conv2D,除去最后一层FC(FullConnection),有52个卷积用于主体网络中。图3-4Darknet-53框架3.2.2BatchNormal(BN) 在神经网络的训练中,由于每一轮输入的图片通常具有不同分布形式,在网络的训练过程中,相关数据会不断迭代,因此输出数据的分布有可能会发生变化,这种情况称为内部协变量滑动(InternalCovariateShift)。训练数据和测试数据的分布变化会对网络的泛化能力和收敛速度带来影响,这种情况是协变量滑动(CovariateShift)。实验表明,对数据进行归一化处理能够有效解决以上两种情况。批标准化(BN)便是一种数据归一化的方法,它在神经网络的训练中通常被用于使其收敛速度加快,在数据输入每一层网络之前对数据进行归一化处理,这种方法能够弱化不同图像之间数据特征的绝对差异,加强突出它们之间的相对差异。 BN处理的是一个批(batch)数据,输入是一批数据的值。获取平均值公式如下:uβ=1mi=1mxi求出该batch数据的方差:αβ2=1mi=1m(x对数据进行归一化处理:x=xi−uβ∕σβ引入缩放和平移变量:yi=γxi+β β和γ分别被称作平移参数和缩放参数,对这两个参数的调整以及控制,可以使得归一化后特征保留的程度发生波动。3.2.3Relu 在神经网络中的激活函数中,最普遍使用的通常是修正线性单元(Rectifiedlinearunit,ReLU),函数f=x,x>03.2.4上采样 上采样(upsample)方法又称为图像插值,通常采用内插值的方法,用于放大原始图像。上采样会选择相对合理的算法在原有的图像基础上插入新的像素于像素点之间[13]。这种图像处理方法通常应用于YOLOv3的后段的网络中。3.2.5mixup mixup是一种对数据样本特征增强的算法,它简单而且非常规,它会构建虚拟的数据样本,以防止训练的模型与训练样本产生过拟合的现象。mixup的核心是线性插值。计算公式:x=λxi+1+λy=λyi+1+λ3.3boundingbox 交并比IOU是目标检测中的常用在训练中表示预测框和真实框之间距离的算法,计算的是两者交集面积和并集面积的比值,这能够有效表示两者的距离。图3-5IOU计算 YOLOv3首先对原始图像进行了处理,将图像尺寸重新定义为416*416的图像,然后输入网络中。边界框的预测延续了YOLO&YOLOv2的方法,将416*416图像划分为S*S的网格,最后经过网络得到S*S*(3*(4+1+classes))的特征图,S*S表示将图像分成的网格grid,每个grid负责3个边界框的预测,每个边界框包含box的中心位置、大小及置信度,classes表示训练和测试的类别数,每个边界框的信息中含有各个类别的概率。两个边界框的距离使用IOU距离,预测每个边界框是否有目标使用逻辑回归方法,找到预测框与真实框的IOU的数值定义为最大边界框,将其逻辑值置为1,这表示该boundingbox有目标,若预测框的置信度不是最好,但IOU超过设定的阈值,则忽略这次预测。在训练过程中,网络只为每个真实目标分配一个边界框,如果预测的边界框与真实目标的边界框不相符,就不会产生坐标和类别预测损失值,只会产生物体预测损失。3.4残差网络组件 通常在层次更多、更深的网络中,如果只是增加网络层数,会存在数据的梯度爆炸和梯度消失现象。而随着网络深度的增加,网络的精度开始会增加,逐渐达到饱和,最后会迅速降低,即使降低过拟合也无法解决这个问题。由于数据处理不等式(DataProcessingInequality,DPI)的存在,数据在网络的前向传播过程中,随着层数的加深,featuremap包含的数据特征会逐层减少。而在网络中引入深度残差网络可以有效防止这些问题,在ResNet中,数据直接映射能够保证深层神经元比浅层包含有更多的图像特征信息。 残差是指预测值和观测值之间的差值,一个残差块xl+1=xl+F(xl,Wl),其中xl表示上一级未卷积的输出,F表示卷积值。网络的一层可以看做y=H(x),而残差网络的一个残差块可以表示为Hx=Fx+x图3-6残差块3.5多尺度检测多尺度检测在检测领域中很受重视,在目标检测中,多尺度检测的引入很大程度上提升了检测性能。 在卷积神经网络中,经过多层卷积,在深层的特征中,分辨率和输出的数据量降低,会导致损失许多特征。这往往会使得检测较大物体或较小物体效果差。在图像中存在不同大小的目标,这些目标具有不同的特征,利用浅层的网络提取到的特征可以区分特征简单的目标,利用深层的网络提取的特征可以区分特征复杂的目标。YOLOv3继承了YOLOv2的多尺度检测方法,并在此之上对输出特征图的规模进行了优化。经过YOLOv3设计的网络得到3个特征图,分别为:13*13*(3*(4+1+classes))、26*26*(3*(4+1+classes))和52*52*(3*(4+1+classes)),这3个特征图分别负责检测大目标、中等目标和小型目标。这种依照尺寸对检测目标进行的细化和区分化使得检测的精度更高,对于大目标和小目标都有良好的检测结果。 生成3个特征图的YOLOv3框架如下:图3-7YOLOv3网络框架3.6k-means聚类先验框 分类的目标是事先已知类别而对目标判断为哪一类,聚类是事先不知道类别而通过算法本身找出数据的相似性而将相似的归为一类。k-means就是一种聚类算法,该算法运算速度快,在聚类前需要指定类别数。 在YOLOv2中就采用k-means算法得到先验框,YOLOv3延续了这种方法。每个得到的特征图设定了3种先验框,在三个尺度特征图下共聚合了9种大小的先验框[14]。算法取训练数据集图片标注的边界框的大小作为聚类集合,对该集合使用k-means算法。 具体步骤:计算训练集的所有目标框的大小,将其加入聚类的数据集合中设定聚类的类别数,在这里设定为9随机选取9个数据作为聚类中心计算所有框到各个聚类中心的距离,将数据归为距离最近的聚类中心类别中,形成了9个类簇,距离公式:Distance=1−IOU(box,center) (3-8)在类簇中计算所有box到类簇中心的平均距离,与该簇其他box的平均距离比较,选取平均距离最小的box作为该类簇新的聚类中心。计算所有类簇中box到聚类中心的距离平方和,若该值趋于平稳不变,则聚类结束,否则转4)。 最小的13*13规模的特征图上有最大的感受视野,适合检测较大的目标,因此适用于最大的3个anchors。中等的26*26特征图上有中能的感受视野,适合检测中等大小目标,因此适用于中等大小的3个anchors。而最大的52*52特征图上感受视野是最小的,适合检测小目标,因此适用最小的3个anchors。3.7YOLOv3的loss函数 在YOLO中,激活函数使用softmax,使用该激活函数在网络的最后获取边界框的每个类别分数,并用分数最大的标签来表示边界框的目标。但softmax分类有一个亲体要求,就是目标类别是相互独立的,即一个目标只能属于一种类别,这种情况下如果是男人和女人的分类,该分类函数就不适用了。因此YOLOv3使用逻辑回归(logisticregression)来预测每个类别的得分并使用一个阈值来对目标进行多标签预测,高于阈值的就是这个边界框的类别[15]。 本系统在设计loss函数时,以三种特征图的尺度进行分别计算。每个特征图分别计算了坐标损失值xy_loss,框大小损失值wh_loss,这两种损失值使用均方误差计算;置信度损失conf_loss,类别概率损失class_loss,这两种损失值使用交叉熵;最后将这些损失值求和得到该特征图的总体损失值total_loss。在计算类别概率损失值的时候,引入了标签平滑(labelsmoothing),标签平滑是正则化方法的一种,用来防止过拟合。 xy_loss计算公式:λcoordi=0S∗Sj=0 wh_loss计算公式:λcoordk=0S∗S conf_loss计算公式:−k=0S∗Sj=0MCilogC class_loss计算公式:k=0S∗S total_loss为上述的loss值之和:total_loss=xy_loss+wh 其中,λcoord、λnoobj表示设定的常量,S∗S表示图片分成的网格,M表示每个网格负责检测的边界框数,在本系统中设定为3;object_maski表示边界框的是否存在目标(存在为1,不存在为0),noobj_maski表示边界框是否不存在目标(不存在为1,存在为0);xi和yi表示坐标,wi 这样的loss函数设计很好的平衡了位置损失、置信度损失、类别预测损失之间的关系,实验表明该loss函数具有尚可的收敛速度。3.8本章小结本章介绍了神经网络构建的过程。首先通过网络爬虫技术爬取图片,运用LabelImg软件给图片制作标签,制作数据集。其次,介绍了YOLOv3框架的整体流程,分析了核心架构DarkNet-53的组成,对算法的ResNet思想进行了解析;对卷积神经网络中的组件BatchNorm、LeakyReLU进行内容和作用的分析;介绍了YOLOv3算法预测边界框的方法,对算法多尺度的方法进行不同尺寸目标检测的思想进行了分析;对适用于YOLOv3的loss函数进行了介绍。4.神经网络训练及结果分析4.1系统开发环境搭建使用开源库OpenCV对图像进行处理,如图像的resize和画框。PyTorch是Torch7开发的深度学习开源框架,至今已非常成熟,使用简单,达成的效果也很优秀,使用该框架构建深度学习模型。 实验的平台是台式电脑,相关配置如下:表4-1系统相关配置设备与主要软件名称版本型号DELLXPS8930系统Windows10家庭中文版64-bit处理器Intel(R)Core(TM)i7-9700RAM8192MB显卡NVIDIAGeForceGTX1660TiPython3.7.10cudatoolkit10.2.89importlib-metadata3.10.0matplotlib3.3.4numpy1.19.2opencv-python4.5.2pandas1.2.4pyqt5.9.2pytorch1.8.1torchvision0.9.1wandb0.10.274.2训练过程精确率(precision)和召回率(recall)是分类问题中衡量模型参数的常用评价指标,相关混淆矩阵:表4-2相关混淆矩阵Positive预测结果为正类Negative预测结果为负类True预测正确TPTNFalse预测错误FPFN precision计算:P=TPTP+FP TP+FP是全体positive,也就是预测中是正类的数量,TP就是正类也被预测正确的数量。结果表示预测为正样本中实际为正样本的比例,又被称为查准系数。 recall计算:P=TPTP+FN TP+FN表示实际正类数。结果表示在实际为正样本中预测为正样本的比例,又被称为查全系数。 precision和recall的值均在一定程度表征了模型的好坏,两者往往不可兼得,两者需要取平衡。 平均精确率(AveragePrecision,AP),在衡量一个模型的性能上,precision和recall都有缺陷,因此将P-R(Precision-Recall)曲线下的面积作为衡量尺度,对precision取平均值。 mAP(MeanAveragePrecision),即平均AP值,是对多个验证集样本求取平均AP值。 系统使用GPU训练,在训练指定step个batch后,计算训练集一批的预测值(precision)和召回率(recall)值,loss值,以及验证集的mAP值。训练中precision和recall变化如图4-1所示。图4-1训练过程汇中的precision和recall 从图4-1中可以看出,训练集的precision和recall总体上呈现上升趋势,然后稳定于1。 训练中mAP值变化如图4-2所示。图4-2训练过程中验证集的mAP变化 训练过程中,验证集的mAP波动较大在99epoch左右达到最大值,约为0.966。 训练集的loss值如图4-3所示。图4-3训练过程中训练数据集的loss值变化 训练集的loss随训练在逐步下降,先是快速下降,在训练后半段,下降速度变缓,99epoch取得最小值。 验证集的loss变化如图4-4所示。图4-4训练过程中验证数据集的loss值变化 验证集的loss随训练在逐步下降,与训练集相似,先是快速下降,在训练后半段,下降速度变缓,99epoch取得最小值。 综合上述的多种参数指标,模型的最佳参数在99epoch左右得到,模型参数的优异程度持续上升。4.3代码调整与操作4.3.1构建.yaml文件基于coco128,将数据集下载下来后删去文件夹中所有内容替换为自己的数据集,更改相应的nc与names。nc对应的是数据集的class数,names则是class相对的名字。依照先前的设置,nc改为5,names分别为"AGV","CONTAINER","MA","TRUCKS","WORKER",保存命名为coco_port.yaml。4.3.2训练设置更改weights选定为yolov3.pt;data选择为先前构建的coco_port.yaml;epochs设为100,即进行100次训练;因计算机性能限制,batch-size设为4。4.4测试结果选定了76张未标记的图片用于测试最终网络的预测准确度。为验证系统检测的有效性,选取了多种场景的多个图片进行检测速度和检测精度的比较,统计实际目标数量、检测到的目标数量、正确率、漏检率。实际框数是检测的图片中实际的目标的标注数量,检测到框数是指系统检测到的目标框的数量,多余的检测框是指系统错检的框数,正确率是检测正确框数与实际框数的比值,漏检率是指没有检测到的框数与实际框数的比值。表4-3全场景检测结果分类实际框数检测到框数多余检测框正确率漏检率AGV小车3723256%43%机械臂2424291%8%集装箱11966650%49%卡车3127280%19%工人3428956%44%总和2451682160%40%表4-4清晰目标场景下检测结果分类实际框数检测到框数多余检测框正确率漏检率AGV小车2019095%5%机械臂1815083%16%集装箱5033066%34%卡车2118085%15%工人1921584%16%总和128106578%22%图片检测结果示例如下:图4-5示例1图4-6示例24.5本章小结简要介绍了系统开发环境以及硬件平台和软件;分析了图片处理方法,将初始图片变换为640*640的输入图片;分析了整个训练流程中的loss值、mAP、P,R随训练次数的变化过程,找出最优的模型;列举了一些检测的测试结果,分析了不同情况下的检测效果。 5.总结与展望5.1工作总结近年来,人工智能快速发展,人工神经网络作为人工智能机器学习领域的重要分支,借鉴了生物大脑神经元系统。深度学习是多层的神经网络,有着非常强的计算能力,本系统实现的是一种深度学习框架YOLOv3来进行港口器械检测,系统的研究总结如下:1)为了建立适合于港口特定目标检测的数据集,自定义数据集PORT,该数据集由互联网搜索引擎、图片网站搜集的图片组成。数据集中包含很多场景的行人图片,使得训练的参数具有泛化性。2)构建了完整的YOLOv3框架,从图片输入到获取3个尺度的特征图,再对特征图处理获取预测的框的位置和大小。设定好了合适的loss函数优化器。训练的初始参数为COCO数据集。3)本系统能够实现图片的检测,检测速度满足一定的实时性,对于重点清晰、明显的图片有着优异的检测速度和测试结果,对于背景复杂、模糊的图片也有尚可的检测效果。5.2不足之处和展望本系统是在有GPU的计算机PC上检测的,虽然在该设备上具有一定实时性,但是对于嵌入式设备,如摄像头等,硬件性能较弱的设备上效果不佳。考虑到大规模的部署在智能交通、智能驾驶等领域上,需要提升检测速度,降低对算力、内存、磁盘等的要求,需要在神经网络中加入多线程优化和模型参数压缩,以保证实时性的要求同时降低设备成本。系统实现的港口设备检测对于检测目标遮挡严重、分辨率低的图片,有着一定的漏检和重复检测。如果图片的目标过小、和背景颜色过于吻合也会漏检。对于集装箱的检测,对于大量堆叠集装箱的图片检验效果只能检验出部分特征较明显,大小相对较大的目标,检验效果不是最理想。对于港口工人的检测,目前神经网络对于普通人与工人的特征分辨还不够清晰。下一步可以考虑对图片进行背景颜色减弱、H通道分离等方法以消除背景颜色对检测的影响,可以对特征图的输出形状进行修改、优化网络等适应对远处目标以及低像素状态下的检测。参考文献《深度学习(DeepLearning)综述及其延伸,入门必看!_RickieLim的博客-CSDN博客》陈铮,彭盛亮,李焕焕,秦雄飞.基于深度学习与软件无线电的盲解调系统研究[J].信号处理,2019,35(04):649-655.《深度学习研究综述》《深度学习研究综述-CSDN博客》盖荣丽,蔡建荣,王诗宇,仓艳,陈娜.卷积神经网络在图像识别中的应用研究综述[J/OL].小型微型计算机系统:1-6[2021-05-10].《PyTorch零基础入门(一)_qq_41896151的博客-CSDN博客》《如此多的深度学习框架,为什么我选择PyTorch?-博文视点(北京)官方博客-CSDN博客》《深入学习卷积神经网络(CNN)的原理知识_weixin_42730667的博客-CSDN博客》姜文瀚.基于YOLOv3的自动驾驶视觉识别方法研究[D].青岛大学,2020.JosephRedmon,AliFarhadi.YOLOv3:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车检测站试题及答案
- 安全生产法律法规知识试题及答案
- 卫生资格考试题附答案
- 色彩评估考试题及答案
- 注册会计师测试题《经济法》习题附答案
- 保护动物考试题库及答案
- 心胸外科护理试题及答案
- 医院信息科计算机考试试题大全资源附答案
- 高频临沂第十七中学面试试题及答案
- 患者跌倒坠床的应急预案试题(附答案)
- DBJ50T-100-2022 建筑边坡工程施工质量验收标准
- 制造部年终总结
- DB51-T 192-2024 公园城市绿色景观围墙营建指南
- 《食品标准与法规》课件全套 第1-6章 绪论-食品生产经营许可和认证管理
- JBT 7562-2016 YEZX系列起重用锥形转子制动三相异步电动机 技术条件
- 建筑工地安全形势分析
- 【拼多多公司盈利能力探析11000字(论文)】
- 区域地质调查及填图方法
- (完整版)四年级上册数学竖式计算题100题直接打印版
- 新生儿疫苗接种的注意事项与应对措施
- 脓毒症休克患者的麻醉管理
评论
0/150
提交评论