版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章前言部分1.1 课程项目背景与意义1.1.1 课程项目背景视觉是各个应用领域,如制造业、检验、文档分析、医疗诊断,和军事等领 域中各种智能/自主系统中不可分割的一部分。由于它的重要性,一些先进国家, 例如美国把对计算机视觉的研究列为对经济和科学有广泛影响的科学和工程中 的重大基本问题,即所谓的重大挑战。计算机视觉的挑战是要为计算机和机器人 开发具有与人类水平相当的视觉能力。机器视觉需要图象信号,纹理和颜色建模, 几何处理和推理,以及物体建模。一个有能力的视觉系统应该把所有这些处理都 紧密地集成在一起。作为一门学科,计算机视觉开始于60年代初,但在计算机视觉的基本研究中的许多重要进展是在
2、80年代取得的。计算机视觉与人类视觉 密切相关,对人类视觉有一个正确的认识将对计算机视觉的研究非常有益。计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指 用摄影机和电脑代替人眼对目标进行识别、 跟踪和测量等机器视觉,并进一步做 图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数 据中获取信息的人工智能系统。这里所 指的信息指Shannon定义的,可以 用来帮助做一个“决定”的信息。因为感知可以看作是从感官信号中提 取信息, 所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“
3、感知” 的科学。科学技术的发展是推动人类社会进步的主要原因之一,未来社会进一步地朝着科技化、信息化、智能化的方向前进。在信息大爆炸的今天,充分利用这些信息将有助于社会的现代化建设,这其中图像信息是目前人们生活中最常见的信 息。利用这些图像信息的一种重要方法就是图像目标定位识别技术。不管是视频监控领域还是虚拟现实技术等都对图像的识别有着极大的需求。一般的图像目标定位识别系统包括图像分割、目标关键特征提取、目标类别分类三个步骤。深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种 深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或 特征,以发现数据的分布式特征表示
4、。深度学习的概念由Hinton等人于2006年提出。基于深度置信网络提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。 此外Lecun等人提出 的卷积神经网络是第一个真正多层结构学习算法,它利用空间相对关系减少参数 数目以提高训练性能。深度学习是机器学习中的一个新的研究领域, 通过深度学习的方法构建深度网络来抽取特征是目前目标和行为识别中得到关注的研究方向,引起更多计算机视觉领域研究者对深度学习进行探索和讨论,并推动了目标和行为识别的研究, 推动了深度学习及其在目标和行为识别中的新进展。基于这个发展趋势,我们小组选择了基于回归方法的深度学习目标识
5、别算法 YOLO勺研究。1.1.2 课程项目研究的意义众所周知,当前是信息时代,信息的获得、加工、处理以及应用都有了飞跃 发展。人们认识世界的重要知识来源就是图像信息, 在很多场合,图像所传送的 信息比其他形式的信息更丰富、真切和具体。人眼与大脑的协作使得人们可以获 取、处理以及理解视觉信息,人类利用视觉感知外界环境信息的效率很高。事实 上,据一些国外学者所做的统计,人类所获得外界信息有80流右是来自眼睛摄取的图像。由此可见,视觉作为人类获取外界信息的主要载体,计算机要实现智 能化,就必须能够处理图像信息。尤其是近年来,以图形、图像、视频等大容量 为特征的图像数据处理广泛应用于医学、交通、工业
6、自动化等领域。深度学习是机器学习中一种基于对数据进行表征学习的方法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地 表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例 中学习任务(例如,人脸识别或面部表情识别)。深度学习的好处是用非监督式 或半监督式的特征学习和分层特征提取高效算法来替代手工获取特征。深度学习是机器学习研究中的一个新的领域, 其动机在于建立、模拟人脑进行分析学习的 神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。目标检测对于人来说是再简单不过的任务, 但是对于计算机来说,它看到的 是一些值为0255的数组,因而
7、很难直接得到图像中有人或者猫这种高层语义概 念,也不清楚目标出现在图像中哪个区域。图像中的目标可能出现在任何位置, 目标的形态可能存在各种各样的变化,图像的背景千差万别,这些因素导致目标检测并不是一个容易解决的任务。这次课程项目,正是基于视觉、深度学习、目标识别而进行的,是一个热度 很高的话题。基于深度学习的目标识别研究具有重大的意义, 深度学习的目标识 别算法对于未来能够使用目标检测和图像识别的手段运用于物联网、智能设备、 生物制药经济调控等多领域有很大的作用。1.2 国外研究现状机器学习是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改
8、善自身的性能的学科。机器能否像人类一样能具有学习能力呢?1959年美国的塞缪尔(Samuel)设计了一个下棋程序,这个程序具有学习能力,它可以在不断的对弈中改善自己的棋艺。4年后,这个程序战胜了设计者本人。又过了 3年,这个程序战胜了美国一个保持 8年之久的常胜不败的冠军。这个程序向人们展示了机器学习的能力,提出了许 多令人深思的社会问题与哲学问题。 深度学习最近几年发展速度十分快,因此同 时也推动了目标识别技术的发展,技术的革新总是相互影响的。目标检测是图像处理和计算机视觉的一个重要分支, 在理论和实践上都有重 大意义。近年来,随着物联网的高速发展与智能终端的广泛普及, 目标检测技术 成了机
9、器视觉领域的研究热点,被国外学者广泛关注。目标检测的研究主要包括了基于视频图像的目标检测和基于静态图片的目 标检测。本文主要讨论基于静态图片的目标检测算法,即在静态图片中检测并定位所设定种类的目标。基于静态图片的目标检测的难点主要在于图片中的目标会 因光照、视角以及目标部等变化而产生变化。针对以上的难点,国外学者进行了很多尝试。目前提出的方法主要分为基于形状轮廓的目标检测算法和基于目标特 征的检测方法。计算机视觉是指用计算机实现人的视觉功能, 它的研究目标就是使计算机具 有用过一幅或多幅图像认知周围环境的能力(包括对客观世界三维环境的感知、 识别与理解)。运动目标检测作为计算机视觉技术的一个分
10、支,就是对视场的运动目标,如人或交通工具,进行实时的观测,并将其分类,然后分析他们的行为。 目前,国际上许多高校和研究所,如麻省理工学学院、牛津大学等都专门设立了 针对运动目标检测的研究组或者研究实验室。 美英等国家已经研究了大量的相关 项目。一些著名公司和研究机构,如 旧M、Microsoft、麻省理工学院等近几年来 投入了大量的人力物力来进行智能监控系统的研究,部分成果已经转化为产品投入了市场。目前在国的研究机构中,中国科学院自动化研究所下属的模式识别国家重点 实验室视觉监控研究处于领先地位。他们在交通场景视觉监控、人的运动视觉监 控和行为模式识别方面进行了深入研究。另外他们也总结了英国雷
11、丁大学VIEWS的车辆交通监控原型系统的研究经验, 在之前的理论研究的基础上,自行设计并 初步实现了一个拥有完全自主知识产权的交通监控原型系统vstart(Visualsurveillance star)。国其他高校如交通大学、航空航天大学也对这方面进行了 研究。尽管这样,目前在运动目标检测和视觉监控这方面仍然存在着许多不足:目前国市场上所见到的大部分智能监控产品来源于国外,性能和可靠性不够,并且维护和安装问题需要外方全方位参加,给国家安全带来了巨大的隐患。目标之间 互遮挡和人体自遮挡问题,尤其是在拥挤状态下,多人的检测更是难处理。1.3 本论文结构本文是基于回归方法的深度学习目标识别算法 Y
12、OLO勺研究。第一章:前言。主要介绍课程项目背景与意义、国外研究的现状,以及本论文的 结构。第二章:使用工具介绍及安装。包括CentOS系统、OpenCV:具、CUDAF发环境、 环境的搭建。第三章:YOLOJ法简介。包括YOLOJ法特点、核心思想和实现方法、以及 YOLO 的创新。第四章:训练数据采集与制作。包括训练数据的采集、训练数据的制作。第五章:训练配置、训练及测试训练效果。包括具体的训练配置、训练过程和测 试训练效果。第六章:总结。包含对本次课程项目实践过程的感想与收获,以及对未来的展望。第二章使用工具介绍及安装2.1 CentOS 系统CentOS (Community ENTer
13、prise Operating System)是 Linux 发行版之一, 它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于 CentOS并不 包含封闭源代码软件。CentOS我们有很多人叫它社区企业操作系统,不管怎么叫它,它都是linux 的一个发行版本。CentOS并不是全新的linux发行版,在RedHat家族中有企业 版的产品,它是 Red Hat Enterprise Linux , C
14、entOS是 RHEL勺克隆版本,RHEL 是很多企业采用的linux发行版本,需要向RedHat付费才可以使用,并能得到 付过费用的服务和技术支持和版本升级。这个CentOS可以像REHL一样的构筑linux系统环境,但不需要向 RedHat付任何的费用,同样也得不到任何有偿技 术支持和升级服务。CentOS很多特点:CentOS就是对RedHat AS进行改进后发布的,各种操 作、使用和RED HA股有区别;CentOS完全免费,不存在 RED HAT AS镭要序 列号的问题;CentOS独有的yum命令支持在线升级,可以即时更新系统,不像 RED HATJB样需要花钱购买支持服务;Cen
15、tOS修正了许多RED HAT AS勺BUG基于开源的特性,Linux环境被很多技术人员和公司使用。Linux以它的高 效性和灵活性著称,Linux模块化的设计结构,使得它既能在价格昂贵的工作站 上运行,也能够在廉价的PC机上实现全部的Unix特性,具有多任务、多用户的 能力。我们这次的课程项目“基于深度学习的目标识别研究” 也是在Linux环境 下完成的,因此本次项目实现使用的是 CentOS 7.0系统。2.2 OpenCV 工具OpenCV勺全称是:Open Source Computer Vision Library 。 OpenCV!一个 基于(开源)发行的跨平台计算机视觉库,可以运
16、行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效,由一系列C函数和少量C+类构成,同时提 供了 Python、Ruby MATLA繇语言的接口,实现了图像处理和计算机视觉方面 的很多通用算法。OpenCVt力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库得到 更快的处理速度。OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库。无论是 做科学研究,还是商业应用,OpenCV都是一个理想的工具库。因为,对于这两 者,它完全是免费的。该库采用C及C+邮言编写,该库的所有代码都经过优化,
17、 计算效率很高,因为,它更专注于设计成为一种用于实时系统的开源库。OpenCV采用C语言进行优化,而且,在多核机器上面,具运行速度会更快。它的一个目 标是提供友好的机器视觉接口函数,从而使得复杂的机器视觉产品可以加速面 世。该库包含了横跨工业产品检测、医学图像处理、安防、用户界面、摄像头标 定、三维成像、机器视觉等领域的超过 500个接口函数。同时,由于计算机视觉与机器学习密不可分,该库也包含了比较常用的一些机器学习算法。图像识别、机器视觉在安防领域有所应用。并且在航拍图片、街道图片中,也要依 赖于机器视觉的摄像头标定、图像融合等技术。近年来,在入侵检测、特定目标 跟踪、目标检测、人脸检测、人
18、脸识别、人脸跟踪等领域,OpenCV的应用及其广泛,而这些,仅仅是其应用的冰山一角。一个典型的计算机视觉算法,应该包含以下一些步骤:(1)数据获取(对OpenC原说,就是图片);(2)预处理;(3)特征提取;(4)特征选择;(5)分类器设计与训练;(6)分类判别;而OpenCVT具对这六个部分,分别提供了 API。2.3 CUDA开发环境随着显卡的发展,GPU®来越强大,而且GPM显示图像做了优化。在计算 上已经超越了通用的CPU如此强大的芯片如果只是作为显卡就太浪费了,因此 NVidia 推出 CUDA!算平台,CUD/®P Compute Unified Device
19、Architecture , 是NVidia利用GPU¥台进行通用并行计算的一种架构,该架构使GPUfg够解决复杂的计算问题,它包含了 CUDA旨令集架构(ISA)以及GPU?的并行计算引擎。 开发人员可以利用C语言、OpenCL Fortran、C+等为CUDA构编写程序。(1) CUDM系架构CUDA体系架构由两部分组成,分别是流处理器阵列(SPA和存储器系统。流处理阵列(SPA的结构又分为两层:TPC (线程处理器群)和 SM (流多处 理器)。GPU勺巨大计算能力来自于SPA中的大量计算单元。存储器系统由几个部分组成:存储器控制器(MMC、固定功能的光栅操作单 元(ROP以及
20、二级纹理操作。(2) CUD软行模型将CPU作为主机(Host),而GPU作为协处理器(Coprocessor)或者设备 (Device),从而让GPU运行一些能够被高度线程化的程序。在这个模型中,CPlUf GPLB同工作,CPU5责进行逻辑性强的事务处理和审 行计算,GPU®专注于执行高度线程化的并行处理任务。一个完整的CUD雁序是由一系列的设备端kernel函数并行步骤和主机端的用 行处理步骤共同组成的。CUDA执行模型如下图:Grid (网格)运行在SPA±Block (线程块)运行在 SM±Thread (线程)运行在 SP上。GPUCPUCrid 1(
21、0刈Sr>rMl C。*Bl e-en建0)B18 匕 (0.判BlgK n,11 i 12 UKzfmI2BFock (1, 1)TL”中 晚,由演 ,电-lhiu4触】1皿HrLtrail 心身露:Kernel不是一个完整的程序,而只是其中的一个关键并行计算步骤。Kernel以一个网格(Grid)的形式执行,每个网格由若干个线程块(block )组成,每一 个线程块又由若干个线程(thread )组成。在CUDA的架构下,一个程序分为两个部份:Host端和Device端。Host端 是指在CPU上执行的部份,而Device端则是在显示芯片(GPU上执行的部份。 Device端的程序又
22、称为"kernel"。通常Host端程序会将数据准备好后,复制 到显卡的存中,再由显示芯片执行Device端程序,完成后再由Host端程序将 结果从显卡的存中取回。由于 CPU存取显卡存时只能透过PCI Express接口, 因此速度较慢,因此不能经常进行这类动作,以免降低效率。由于显示芯片大量并行计算的特性,它处理一些问题的方式和一般CPU是不同的。主要的特点包括:(1)存存取latency (等待时间)的问题:CPU通常使用cache来减少存取主 存的次数,以避免存latency 影响到执行效率。显示芯片则多半没有cache (或 很小),而利用并行化执行的方式来隐藏存
23、的latency (即当第一个thread需 要等待存读取结果时,则开始执行第二个 thread ,依此类推)。(2)分支指令的问题:CPU通常利用分支预测等方式来减少分支指令造成的流 水线。显示芯片则多半使用类似处理存latency 的方式。不过,通常显示芯片处理分支的效率会比较差。因此,最适合利用CUDA处理的问题,是可以大量并行化的问题,才能有效 隐藏存的latency ,并有效利用显示芯片上的大量执行单元。使用CUDA时,同时有上千个thread 在执行是很正常的。因此,如果不能大量并行化的问题,使 用CUDA就没办法达到最好的效率了。在这个过程中,CPU担任的工作为控制GPIB行,调
24、度分配任务,并能做一些简单的计算,而大量需要并行计算的工作 都交给 GPU实现。另外需 要注 意的是,由于CPU存取显存时只能 通过 PCI-Express接口,速度较慢,因此不能经常进行,以免降低效率。通常可以在 程序开始时将数据复制进 GPU显存,然后在GPU进行计算,直到获得需要的数 据,冉将其复制到系统存中。2.4环境的搭建一、项目源代码下载与安装1 .使用git把项目源代码下载到本地git clone https:github./pjreddie/darknet2 .进入项目目录,编译cd darknetmake二、项目目录结构编译完成后,项目主要文件如下:darknet项 目目录I
25、cfg配置文件存放目录Idata数据存放目录I-examplesC语言测试用例Iincludedarknet头文件I-pythonPython测试用例I-scripts训练中用到的辅助脚本I-src项目源代码I-darknet编译后产生的darknet可执行文件II-config.php模块配置文件IIcommon.php模块函数文件三、测试对象识别1 .下载官方提供的训练好的权重数据wget https:pjreddie./media/files/yolo.weights2 .测试识别对象:在上述命令中,detect表示调用darknet的对象识别功能,cfg/yolo.cfg 是配置文件,
26、包含各层网络的参数、要识别的物体种类数等,yolo.weights是上一步下载的权重数据,data/dog.jpg是要进行对象识别的照片,照片容如下图:执行命令:layerfilterssizeinputoutput0 cony323x3/1608 x 608 x 注->60S x 608 X 321 nax2x2/2608 x 608 x 32->304 x 304 x 322 conv643i3/l304 x 304 Jt 32* a 304 K 304 x 643 max2 x4conv1263x5conv641x6conv12S3x7 max2 x0canv2563x9co
27、nv1281x10conv2563x11 max2 x21112111223 13231324 2 2 2 2 o 5 5 5 _5 3 1111 xxxx X4 2 2 2 24 4S4BR-6 6 2 6 2 21 1128484836866&262252 5 5 1 112 12 2 x-xxxxx-xxx12conv5123 X3 /138X33 x 256->33X38X 51213c-onv2561 X1 /138K38 X 512->38X38x 25614conv5123 x3 /13aX33 x 256->38X38X 51215conw2561 X
28、1 /138X38 X 512 >38X38X 25616canv5123 x3 /138X39 x 256 >38X38x 51217max2 x2 /238X38 X 512->19X19m 51218canv10243 x3 /119X19 工 512->19X19X102419conv5121 X1 /119X19 X1024-A19K19X 51220c-onv10243 x3 /119XL9 X 512->19X19X1Q2421conv5121 X1 /119X工9 X1024->19X19X 51222conw10243 x3 /119X19
29、 X 512->19X19X102423conv10243工3 /119X19 X1024 >19X19X102424conv10243 x3 /119X19 X1024->19X19K102425routeie26conv641 X1 /136X38 x 512->38K38X 6同27reo rg/236X38 X 64->19X19x 25628route27 2429conv10243 x3 /119X19 ¥1380->19X19X102430canv4251工1 /119X19 X1024 >19X19x 42531 detect
30、ionLoading weights from yolo. weights. , . Dorie!datadog. jpg; Predicted in 0. 350000 seconds.dog: 82% t ruck: 65% bicyel*: 85%上图显示检测过程在0.35秒完成,这是安装完显卡驱动后运行的结果,在安装显卡驱动前,使用CPU!行图像检测,花费时间大约为 8秒。命令执行完成后, 将会把识别结果生成到predictions.jpg, 打开图片如下图所示:四、训练环境安装1 .使用 YUMK装 OpenCVsudo yum install opencv2 .安装显卡驱动及其开发
31、工具包 CUDA安装CUDM、须要有一个Nvidia的显卡,本机的显卡是GTX 860M CUDAF载网址为:https:developer.nvidia./cuda-down10ads官方还提供了 CUD取装过程所需的pdf文档,仔细阅读并按照其步骤安装即可。此次安装使用runfile 安装。首先检测本机是否有Nvidia显卡,执行以下命令:Ispci | grep -i nvidia有任何输出说明本机有 Nvidia显卡,本机输出结果如下:01:00.0 3D controller: NVIDIA Corporation GM107M GeForce GTX 860M (rev a2)接下
32、来查看系统核版本:uname -m && cat /etc/*release该命令会显示系统架构以及核版本信息,本机主要的输出信息如下:x86_64CentOS Linux release 7.3.1611 (Core)确认编译器gcc已经安装,该命令会打印gcc的版本,如果提示找不到命令则说 明没有安装gcc:gcc -version安装Kernel-header和kernel-devel ,这两个包的版本需要和本机的核版本一 致,安装命令如下:sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -
33、r)开始安装cuda,本次实验使用的是runfile 安装。Nouveau是一个开源的3D驱 动,安装Nvidia驱动之前需要先将其关闭。首先要把 Nouveau加入黑,创建 /etc/modprobe.d/blacklist-nouveau.conf文件并写入以下容:blacklist nouveauoptions nouveau modeset=0重新生成核initramfs :sudo dracut -force重新启动计算机,在进入登录界面时,不要登录,按下ALT+F2进入命令提示符模式,使用root用户登录,然后使用init 3命令进入多用户模式开始安装Naidia驱动。执行以下命令
34、开始安装 CUDA./cuda_8.0.61_375.26_linux-run安装过程会提示是否安装CUDA:具箱、CUD刷子等,此次试验中选择安装。最后将cuda加入到环境变量中、重启,即完成安装。将cude加入到环境变量:export PATH=/usr/local/cuda-8.0/bin$PATH:+:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64$LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH3 .安装完成OpenCq口 CUDAf,需要修改YOLO勺Makefile文件并重新编译。打 开 Makefi
35、le 文件,将 OPENCV=0fc为 OPENCV=1 将 GPU=0fc为 GPU=1 并执行 make命令重新编译。第三章YOLO算法原理3.1 YOLO算法简介基于深度学习方法的一个特点就是实现端到端的检测。相对于其它目标检测 与识别方法(比如Fast R-CNN)将目标识别任务分类目标区域预测和类别预测 等多个流程,YOLO等目标区域预测和目标类别预测整合于单个神经网络模型中, 实现在准确率较高的情况下快速目标检测与识别,更加适合现场应用环境。YOLO为一种新的目标检测方法,该方法的特点是实现快速检测的同时还达 到较高的准确率。作者将目标检测任务看作目标区域预测和类别预测的回归问 题
36、。该方法采用单个神经网络直接预测物品边界和类别概率,实现端到端的物品检测。同时,该方法检测速非常快,基础版可以达到45帧/s的实时检测;FastYOLO 可以达到155帧/s。与当前最好系统相比,YOLO目标区域定位误差更大,但是背景预测的假阳性优于当前最好的方法。人类视觉系统快速且精准,只需看一眼即可识别图像中物品及其位置。传统目标检测系统采用 deformable parts models (DPM) 方法,通过滑动框 方法提出目标区域,然后采用分类器来实现识别。近期的 R-CNN类方法采用 region proposal methods , 首先生成潜在的 bounding boxes
37、, 然后采用分类器 识另U这些 bounding boxes区域。最后通过 post-processing 来去除重复 bounding boxes来进行优化。这类方法流程复杂,存在速度慢和训练困难的问题。而YOLOJ法将目标检测问题转换为直接从图像中提取bounding boxes和类别概率的单个回归问题,只需一眼即可检测目标类别和位置。3.2 YOLO方法特点YOLOR用单个卷积神经网络来预测多个 bounding boxes和类别概率,如图所 示:本方法相对于传统方法有如下优点:(1) 速度非常快。YOLOW测流程简单,速度很快。基础版在 Titan X GPU 上可以达到45帧/s ;
38、快速版可以达到150帧/s。因此,YOLOT以实现实时检测。(2) YOLO采用全图信息来进行预测。与滑动窗口方法和region proposal-based方法不同,YOLOS训练和预测过程中可以利用全图信息。 Fast R-CNN佥测方法会错误的将背景中的斑块检测为目标,原因在于 Fast R-CNN在 检测中无法看到全局图像。相对于 Fast R-CNN, YOLOT景预测错误率低一半。(3) YOLOT以学习到目标的概括信息,具有一定普适性。采用自然图片训 练YOLO采用艺术图像来预测。YOLQ匕其它目标才测方法(DPMf口 R-CNN准确 率高很多。本方法有如下缺点:(1) YOLO
39、对相互靠的很近的物体,还有很小的群体 检测效果不好,这是 因为一个网格中只预测了两个框,并且只属于一类。(2)对测试图像中,同一类物体出现的新的不常见的长宽比和其他情况是。 泛化能力偏弱。(3)由于损失函数的问题,定位误差是影响检测效果的主要原因。尤其是 大小物体的处理上,还有待加强。3.3 YOLO的核心思想和实现方法1 .YOLO的核心思想YOLO的核心思想就是利用整图作为网络的输入,直接在输出层回归boundingbox的位置和bounding box所属的类别。2 .YOLO的实现方法YOLO勺实现过程图解和方法如下:Th* ImageAnd附 9 n 44S(1)将一幅图像分成SxS
40、个网格(grid cell),如果某个目标的中心落在这个网格中,则这个网格就负责预测这个目标。(2)每个网格要预测 B个bounding box ,每个bounding box 除了要回归自身的位置之外,还要附带预测一个confidence值,这个confidence代表了所预测的box中含有目标的置信度和这个box预测的有多准两重信息,其值是这样计算的:Pr (目标)lOUptd (其中如果有目标落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth之间的IOU值)。(3)每个 bounding box格还要预测一个类别信息,
41、bounding box ,还要预测tensor。(注意:class要预测(x, y, w, h) 和confidence 共5个值,每个网 记为 C类。则SxS个网格,每个网格要预测 B个 C 个 categories。输出就是 S x S x (5*B+C) 的一个信息是针对每个网格的,confidence信息是针对每个bounding box 的)举例说明:在PASCAL VOC,图像输入为448x448,取S=7, B=2, 一共有 20个类别(C=20)。则输出就是7x7x30的一个tensor。整个网络结构如下图所示:Con*. Loyw7舄7>64卜2 Ma寓pool La
42、yirMMCenv. Layeri Che layers UI 745123x1x10243x3k10243s3kI0243x3x1024 3<3MlCK?4ir2Cm*- Loy«r Cmw. Loyw附3 心 n偿Ulxl20Manp»l Laer3x3k25<52m221x1*25,1x3x512Coft¥. LflieriI * 1 <55)4 IX4 3m3x5U i 1x1x512 3x3x1024Mgpxl l勺w 2曲2Cmh. Laer Cmh. LayerLasrsf2m2(4)在测试的时候,每个网格预测的class信息和bo
43、unding box 预测的confidence 信息相乘,就得至U每个 bounding box 的 class-specific confidence score:Pr(class| object) Pr(object) IOU ;瞿Pr(class) IOU :瞿等式左边第一项就是每个网格预测的类别信息,第二三项就是每个 bounding box预测的confidence 。这个乘积即encode 了预测的box属于某一类 的概率,也有该box准确度的信息。(5)彳马至U每个 box的class-specific confidence score 以后,设置阈值,滤 掉得分低的boxes
44、,对保留的boxes进行NMSt理,就得到最终的检测结果。3.4 YOLO的实现细节1 .预训练:使用imageNet预训练,网络结构是前20层网络加上一个平均池化层和一个 全连接层。2 .预测:由于预测需要更加精细的像素,所以把输入扩展成 448*448,并且增加了四 个卷积层和两个全连接层。在最后一层预测中,需要预测概率和 bounding box, 这里把bounding box的预测归一化成0到1。3 .激活函数:最后一层的激活函数使用线性激活函数,而其他层使用leaky ReLU的激活函数:if £ > 0.01/ otherwise4 .误差传播:误差的计算采用简单
45、的平方和误差函数。但是,从网络结构可以知道,预测 概率的维数比预测bounding box的维数要高,而且,在图片多的格子是没有物 体的,这会使得它们的confidence趋于0。它们的贡献过大,会使得网络无法 收敛。我们采用的一个办法就是加权,赋予不同的权值,对于预测bounding box的,而对于没有目标物体的格子的误差赋予权值。 同时,对于大的box的小误差 肯定要比小box的小误差影响更小,于是,采用对w,h,x,y取平方根的做法,因 为平方根函数的图像随着x的增大会变得平缓。此外,一个网格可能会预测多个 box,希望每个box负责专门的目标物体的 预测。方法是,对于一个物体的 tr
46、uth box ,看哪个bounding box的IOU更大, 就让它负责这个box。公式为:S2 BLord汇£ 1兽环一以产+ (切 i0j=O+ 入3(1 £ 5Z 兽(A7 -+ ( /A -i=Qj=0 L+ £丈唠(")1 =O j =IJS 6+ Af £ £ 喏垣(c - gj =(j=g+ £ i* £ (内一色产1=0白毛。1/£既其中 "对应格子i如果有物体,那相应的bounding box j负责这个物体则的预测。行表示格子i中是否有物体。5 .训练方法:使用随机梯度下降
47、法,以及dropout的方法。6 .4 YOLO的仓I新YOLO#物体检测作为回归问题求解。基于一个单独的端到端网络,完成从原始图像的输入到物体位置和类别的输出。从网络设计上,YOL0tt RCNN FastRCNNi Faster RCNN 的区别如下:(1) YOLO训练和检测均是在一个单独网络中进行。YOLOS有显示地求取region proposal的过程。而 RCNN/Fast RCNNR用分离的模块(独立于网络之外的selective search 方法)求取候选框(可能会包含物体的矩形区域),训 练过程因此也是分成多个模块进行。Faster RCNN使用 RPN(region p
48、roposalnetwork )卷积网络替代 RCNN/FastRNN勺 selective search 模块,将 RPN®成 到Fast RCNN检测网络中,得到一个统一的检测网络。尽管RPN与Fast RCNN共享卷积层,但是在模型训练过程中,需要反复训练RPNW络和Fast RCNN络。(2) YOLO将物体检测作为一个回归问题进行求解,输入图像经过一次 inference ,便能得到图像中所有物体的位置和其所属类别及相应的置信概率。 而RCNN/FastRCNN/Faster RCNNA检测结果分为两部分求解:物体类别(分类 问题),物体位置即bounding box (回
49、归问题)。RCNNFast RCNNFaster RCNNYOLOregion proposal module region proposal moduleRPNfeature extractionnetworkclssifer locatordetection networkfeature extractionc lassficationregres 5 ionYOLO networkFast RCNNI第四章 训练数据采集与制作4.1 训练数据的采集准备需要训练的图片:本次实验训练的是水果的识别,种类一共 5种,分别是 WaterMelon、StrawBerry、Orange、Pineap
50、ple、Apple,每种水果图片约 30-40,总共有 171 图片。图片全部从百度图片中下载,图片分辨率一般在400*300像素左右。将 图片按照按照5位数字从00000递增开始命名,并将其全部放到一个文件夹中% OOM 打 pg MOOjpgGOOD 3 jpgGOOMjpg%OOOM.jpg00007JagOOOOSjpg MOCgjpg OQOlQJpgOOOll.jpg OOONjpgOLOU.jpg00014Jpg(KX)15jdc00016.jpg tKXJ17,jpgOOOl 8 jpgV 40001 <1 jpg)0020 加 gftOOKj 因Or-O?1 jpg00
51、024jpg00)/%pgOOO mjpgOOO27.jpg IKXJJU.jpgUL:'Jc:l.j3c00029 jpg00032,jpgOOT3 3,jpg 00034jpgOQC35,jpg 50036.jpgOGO27,jpg0Q03Sjp900fl33,jpg4.2 训练数据的制作1 .下载并编译安装Labellmg ,使用这个软件给171水果图片标记对象位置和名 称。xml文件,每2 .标记完成后,Labellmg将会生成一个记录了对象名称和位置的图片对应一个xml文件,xml文件容如下。OOOfiSxmlpanriQtstjjDn verified= "noB
52、>r t I.二e=d 5t linage/ 1c de i >小二 L 修1, he 9 B9 TfM -a-p /ll- /hone /m yd Zdl l/Dst I. j pg</ pa 111source*<d 1 1 jh e;Tnlknc师 d1 - iDii c*c/5ource><5LZ&> d+n>409< 闻idth ig,t 00 </he igh t n<dcpt喧 depth>c/size>Hse grrenl©s agmen 10dA<obj©ct>
53、;nflW9rmglgn</n>二p; 浦 UnspgcifisKl" - '<t rune 寻 t 日 dl>0</1 rune at<difficylt>0</dif<bndbDJc><xmin >5 c/xm _ji><ylnih Ml、ynii3< zu 台工 L48 jKin© ;< yirax 107- /ymao</bnaocix></cbj ect><obj®ct>ricM vata rrielorK/n=
54、187;e>< pc>Unspqcifi&d pnnn< t rur 匚日 t 白 d:>Bu Ji rune at ed>< ditricult>0<Zditticult<bndbD)(><xirin -05< xniin>由人Annitations|OOOOO.xml|-00001.xml|-00171.xmlImageSetsIMaintrain.txt保存了全部图片位置的文件JPEGImagesI-OOOOO.jpgI00001.jpgI-00171.jpg labels labelsI-OOO
55、OO.txtI-00001.txt00170.txt需要训练的图片水果图片水果图片水果图片文件labels文件labels文件labels文件3,按照V0O据集的格式创建一下文件夹结构。darknet项目目录cfg配置文件存放目录src项目源代码VOCdevkit VOC数据集目录VOC2017数据标记年份存放xml标记文件xml 标记文件xml标记文件xml标记文件图片相关信息文件位置信息4.YOLO不能识别xml文件,需要将其转化成其识别的格式。使用项目自带的 voc_label.py 脚本可以将xml格式转换成 YOLO所需的label文件。打开 voc_label.py,修改数据集年份,要识别的对象种类名称,以及xml文件存放位 置等信息。文件容如下图所示。该脚本同时会生成上面目录结构中的 train.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年庆阳市直属机关遴选公务员考试真题汇编及答案解析(夺冠)
- 2026年交管12123学法减分复习考试题库及答案(新)
- 2026年煤炭地质化验室主任面试技巧与题库含答案
- 2023年唐山市直属机关遴选公务员笔试真题汇编附答案解析(夺冠)
- 2025年省直辖行政单位直机关遴选公务员考试真题汇编及答案解析(夺冠)
- 2023年南昌市直机关遴选公务员考试真题汇编附答案解析
- 2026年劳务员考试题库及参考答案一套
- 2026年水处理机械设备维护与修理的面试题集
- 2023年日照市直机关遴选公务员考试真题汇编及答案解析(夺冠)
- 2026年容器性能测试常见问题解析
- 2025版离婚协议书样本:婚姻关系解除与子女抚养安排
- GJB827B--2020军事设施建设费用定额
- 香蕉糖度实时检测-洞察及研究
- 元器件基础知识培训课件
- 【MOOC期末】《大学物理(力学、电磁学)》(东北大学)期末考试慕课答案
- 测绘测量设备保密制度范文
- 麻醉机检查流程
- 婴儿背带人体工学要点深度解析
- 十五五学校五年发展规划(2026-2030)
- T/CCS 032-2023矿井智能化通风系统建设技术规范
- 2025CSCO子宫内膜癌新进展及指南更新要点
评论
0/150
提交评论