目 录
一、绪论 5
(一)选题背景及意义 5
(二)国内外研究现状 5
(三)本文主要研究内容 7
二、相关技术介绍 7
(一)目标检测 7
(二)YOLO算法 10
三、系统总体设计 15
(一)系统需求分析 15
(二)系统功能设计 15
四、系统实现 16
(一)图像预处理 16
(二)图像识别 18
(三)代码实现 23
五、总结与展望 31
主要参考文献 32
一、绪论
(一)选题背景及意义
随着现代化的发展,人们生活节奏越来越快,可以通过图像进行交流。从用户的角度来看,图像不受当地语言等因素的限制,能够更好地表达和传达人们的情感信息,可以作为快速表达的载体。对我们来说,编辑文本是很容易的,但是图像中传递的内容和信息非常大。因此,如何方便、有效地找到关键信息并利用图像成为图像处理领域的一个关键研究问题。近年来,由于其在场景中的广泛应用,图像识别成为图像研究领域的一个热点。在畜牧业中,我们可以通过监测牲畜的生长状况、活桩的形状和形状来判断,定期定量喂养牲畜,监测其生长发育情况。在工业上,关键问题可以通过图像识别来解决。在医学上,高清图像可以用来扫描身体的各个部位。此外,图像在日常活动中也起着至关重要的作用,如高速列车安检中的人脸识别,以及机上乘客的身份信息;平日停车时,采用车牌识别技术进入停车场;申请身份证时,每个公民都会输入自己的指纹信息,以便将来进行安全验证。总之,图像在我们的日常生活中是不可或缺的。利用传统方法或深度学习方法快速有效地识别图像和提取颜色特征信息具有重要意义。
在机器视觉中,图像识别是一个关键问题。图像识别的精度主要取决于图像关键部位的定位精度。首先,图像处理是图像预处理。经过预处理后的图像特征提取算法有sift、LBP和Haar。通过一系列的步骤,我们可以准确地识别图像的内容。获取图像的方法有很多种,但我们必须利用摄影工具将采集到的图像数据存储在数据库中以备不时之需,而对受损图像的处理就是对图像中我们需要的图像进行切割,以确定其统一的格式和大小。对于图像质量较差的图像,可以对图像进行去噪、增强和一系列的预处理,以方便以后的使用。获取完整的特征信息是反映用户需求、服务于整个行业的关键,因此这一步是图像识别的基础过程,细化来说就是先要提取需要去识别的图像的特征,然后再利用分类器来把相同特征的归为一类,实现分组,从而实现对图像的识别。
人工智能和机器学习的发展也为图像识别提供了极好的资源。机器学习就是让机器拥有与人类相同的大脑,使机器能够独立地学习和分析问题。人类知识的获得是一个漫长而反复的过程。在人类进化的过程中,人们通过学习和理解知识来理解自己需要获得的东西。通过不断的实践,人们可以获得相关的技能,并分析和总结在这个过程中获得的经验。机器学习类似于人脑的学习,使机器学习不再是科幻电影的场景。人类通过眼睛捕捉周围的所有信息,并将视网膜成像传输到大脑,获得相关的图像特征。机器视觉就是通过各种设备获取相关的图像。经过特征提取,机器可以通过学习识别相关对象,并通过计算机或音频设备显示学习的内容。分类器训练是机器学习的关键。通过不断的训练
并对分类器进行调整,得到分类器模型,对误差范围较小的目标进行识别。机器学习包括无监督学习、有监督学习和半监督学习。
目前,图像处理已经成为一个热门话题,人脸识别技术在图像处理中得到了广泛的应用。如何快速有效地识别图像信息并处理相关特征成为人们关注的焦点。将机器学习应用于图像识别可以大大提高识别效率和准确率。在机器学习中,传统的模型是卷积神经网络模型。在ilsvrc-2012比赛中,卷积神经网络算法取得了优异的成绩。该模型具有一系列优点,但在卷积神经网络的前向传播过程中,一些有用的图像信息会被丢弃,不能作为图像特征。因此,在设计过程中对丢弃的图像特征进行回收,采用多层信息融合的方法对传统的卷积神经网络模型进行改进,并利用该模型对人脸图像进行研究。
而我们清楚的是人脸识别无论是数字图像的处理方面还是在于计算机视觉领域的方面,其地位都是很高的,它能利用摄像机采集信息,并对其进行检测,还能快速识别出口罩佩戴情况,所以说该项技术对于当下疫情控制的意义是非常高的,在该方面的投入也是非常有必要的有价值的。面对突如其来的新一轮肺炎疫情,人们的生活秩序被严重扰乱。与普通流感不同,这种流行病可以通过人类唾液传播,并具有很强的感染他人的能力。最近,面对疫情,市面上的口罩越来越少。新型冠状病毒肺炎对该病的流行尤为重要。能有效阻断新型冠状肺炎病毒的传播。它能直接从源头检查,将人体唾液和气流从第一道屏障中隔离出来,有效保护自己和他人,不传播病毒。在中国的公共场所必须戴口罩。然而,在商场、餐厅、地铁等人员密集场所,应对客流高峰期的措施往往让人发自内心。一些人外出时不爱戴口罩,这给病毒提供了可乘之机,给自己和他人的生命带来重大安全隐患。如果有一套系统,通过对数字图像的采集和识别,识别出是否戴口罩的人,并做出相应的预警和报警就显得尤为重要和迫切。随着计算机视觉技术的发展,基于图像的面具识别迅速引起人们的关注。
(二)国内外研究现状
伴随着时代的不断发展,计算机已经走入了平常生活,对于计算机领域的不断发展我们是有目共睹的,特别是计算机视觉原理,被广泛应用,生活生产的许许多多领域都离不开该方面的种种技术,例如在智能交通的建设中,动态实施目标跟踪与定位起到了不可或缺的关键作用,同样的该项技术也被用在智能监控防盗,军事引用,医疗导航外科手术的器械实时定位之中,斌且起到着不可或缺的作用,具有极大的应用价值。
作为当下飞速发展的热门方向,目标检测已经被人们所熟知,走进了大众的视野,其目前被大规模应用在诸多领域,比如机器人导航系统,工业控制,航空航天等当下如火如荼进行的产业之中。因为计算机技术的广泛应用并飞速升级,利用计算机视觉降低人工成本是十分可行的,所以近几年来,对于该方面的研究成为火热的方向,也成为诸多行业迫切需要的项目。以目标检测自身来说,它是计算机图像处理,计算机视觉的重要分支,特别是在智能监控方面起到中心作用,与此同时,值得我们注意的是,目标检测该项技术本身也就是泛身份识别领域的一项基本算法,所以可行性之高众所周知,在当下的人脸识别、步态、计数、实例分割等诸多方面中起着重要的作用,我们需要了解政府的行为措施。也正是随着时代发展,深度学习被大规模运用,目标检测发展是极为迅速的。
进入二十一世纪,特别是在2006年以来,在该方面的大师辛顿、本吉奥、乐坤等人不懈努力与奋斗下,指导发表了大量的相关论文可供参考,在他们发表的诸多深度神经网络论文更是作用非凡。到了2012年,这是个里程碑式的一年,欣顿团队首次参加Imagenet图像识别大赛,并通过CNN网络alexnet获得冠军。从此以后,团队便走进了各大媒体的镜头,大步走进了大众的视野,得到了加大关注,他们的神经网络更是成为了被广泛研究的目标,我们通过深度学习采用多层次计算机模型来对抽象的数据进行学习表示,很明显发现其结构是非常复杂的。就目前来说,该项技术已经被成功引用在许多模式分类问题之中。我们可以这样理解计算机视觉,它对于目标首先捕捉信息,此后分为三个层次:运动分割与目标检测层次、目标跟踪层次、还有就是对目标的动作识别以及行为的描述。在这中间目标检测作为关键的一环,更是整个系统的基本任务,值得一提的不仅在该系统中,只要是有应用的领域,目标检测基本上都是起到关键核心作用的。并且因为监控视频应用范围景深、分辨率还有天气光照的不稳定性与不可预测性由于视频中的物体姿态不同,经常被遮挡,运动不规则,所以目标检测层次的好与坏,直接决定着系统后续工作的进行。时至今日,对于目标检测领域的研究,仍然是个挑战极大的方向,仍然具备着极大的上升空间。
因为存在着许许多多的不同的待测目标,国内国外的诸多学者都提出了多种方案与算法模型。特别是近几年以来,随着深度神经网络的不断发展,目标检测方面也得以更进一步。现有的目标检测技术大致可以分为三个大步骤:首先即是对于候选区域进行推荐分割,然后对于目标的特征进行表示,最后对区域进行分类。如图1所示,第一步先滑动窗口或者分割区域推荐图像之中有可能待选目标的候选区域,之后即可采用合适的特征或模型表示出这些区域,从而得到区域特征向量,在那之后,对于每个区域的特征向量进行分类,并同时确认是否包含到检测的目标,通过非最大值抑制、帧位回归等方式得到所需的最终帧。
图1 目标检测的技术路线图
(三)本文主要研究内容
2020年,新型冠状病毒肺炎在全球传播,戴口罩能有效阻断新型冠状肺炎病毒的传播,是预防感染的有效措施。在中国,公共场所必须戴口罩,然而,在商场、饭店、地铁等人员密集场所,人力资源往往对高峰交通的应对措施往往力不从心。该系统能够自动、准确、快速地识别图片或视频中的人是否戴口罩,具有重要的应用场景和市场前景。
二、相关技术介绍
(一)目标检测
1.目标检测的概念
目标检测又被我们叫做目标提取,这是一种基于目标的几何还有统计特征的图像分割方法。
它的作用在于,将原本需要两步的目标分割还有识别合二为一,所以其以准确以及实时著称,特别是在许多复杂的场景之中,因为我们需要同时对多个目标进行相应的检测处理,它所具备的 自动提取目标以及自动识别格外重要。在对国内外诸多成果的研究中,我们将目标检测的算法通常分为两类,第一种是较为传统的目标检测算法,第二种就是我们要介绍到的基于深度学习的目标检测算法,目前后者的用途十分广泛该算法又分为One-Stage目标检测算法和Two-Stage目标检测算法。
2.传统目标检测算法
对于传统的目标检测方法,一般工作流程分为三个阶段:即首先给定图像选取候选区域,选择过后再提取相应特征,之后再用以及训练好的分类器来对于各个数据进行分类。这三个阶段细化来说如下。
(1)区域选择:即定位,我们在分析处理之前首先应该确定位置,因为目标可能出现于任何位置,且形状比例会相应的产生一些变化,所以我们采用滑动窗口来保证将图像所有位置都有观测到,简单来说,就是穷举法,这种方法可以完成任务,但是这种方法效率不高,且时间浪费的太多,且多了许多不必要的的多于窗口,这对于后续工作的进行产生了影响,也导致了整体系统的效率被拖慢。
(2)特征提取:因为观测目标不会相同,多种多样,并且位置角度都有变化,所以一个完美程序是特别困难的。但是对于目标特征的提取又是至关重要的,它直接决定系统的结果是否准确,所以重要程度不言而喻。其中, SIFT、HOG等是这个阶段常用的特征。
(3)分类:即根据第二步所提取出来具有相似特征的目标归为一类,实现对数据的分类。目前市面上的分类器主要包括 SVM,AdaBoost 等。
3.基于深度学习的目标检测算法
(1)算法概述
目标检测不是简单的检测,它包含目标的定位还有目标的分类。这俩个任务都是至关重要,不可或缺的,首先说目标定位,顾名思义,确定目标的位置,另外为了能进一步检测,我们也需要确定目标的规格,范围确定完成还需要输出目标边界,目标中心以及闭合的边界。因为边界框能起到表示位置信息的作用,所以我们有必要表示出来。而目标分类,它的任务就是将得到的具有相同特征的目标归类,即可以判断出输入图像或者选定的图像区域中是否存在着我们所感兴趣的对象,同时我们还能输出带有分数的一系列标记,来表达期间可能存在感兴趣对象的可能性大小。
我们都知道,当前主流目标检测是基于深度学习的模型,之间可分为两大类(1)One-Stage目标检测算法,这种检测方法没有Region Proposal阶段的必要,因为它可以直接通过Stage来对于物体位置以及分类概率直接产生,这种模式下的经典算法有YOLO、SSD和CornerNet;(2)Two-Stage目标检测算法,很显然,这类方法是通过将检测过程分成两个阶段,首先是候选(Region Proposals),在候选过程中,检测对象包含着大量的信息,随后进入第二个阶段分类与位置精修,进而最终达到预期目标的方法,这种模式下的经典算法有R-CNN,Fast R-CNN,Faster R-CNN等。如果要比较这二者哪一种更为强大,主要需要判断算法的精确度以及速度,而很显然,前者在速度上有优势,但后者在准确度上更胜一筹,只不过,随着不断地更新换代,二者在各自薄弱方面都有了较大提升,所以无需比较二者,二者在该领域上都能保证速度与准确度。
(2)One-Stage目标检测算法
One-Stage目标检测算法在前面就有过叙述,即通过一个过程即可得出结果,直接产生所需要的的分类概率还有位置坐标,相比于后者,它不需要Region Proposal阶段,总流程是清晰简单明了的,如下,在Testing的时候输入图片再通过CNN网络产生输出,之后进行解码操作,解码(后处理)生成对应检测框即可;但是我们在Training的时候则必须需要把Ground Truth编码成CNN输出对应的格式输出,这样才不会造成计算损失,保证质量。
因为目标检测算法主要分为两个任务,也就是物体分类与定位。期间或多或少会存在损失。损失主要包括分类损失(Cls Loss)和定位损失(Loc Loss),也就是在两个任务中不同的损失,而对于损失我们有损失组合,常见的损失组合主要有如下两种Cls Loss + Loc Loss(SSD系列算法)、Cls Loss + Obj Loss + Loc Loss (YOLO系列算法),在这些组合之中,YOLO系列算法相比于SSD系列算法多了Object Loss,也就是判断对应区域是不是损失,在此之外,One-Stage目标检测算法还存在着许多问题,比如正负不均等问题,所以我们对于其的设计研究,还需要更多的针对创新。
Hard Negative Mining:简言之,只挑选适当比例且损失较大的负样本来计算损失,而对于较小的损失采取忽略不计,这样可以有效防止负样本过多而造成对网络学习的干扰。
Focal Loss:因为获得的很多数据都是很简单容易处理的负样本,也就是来自背景的样本,这就直接导致训练过程中无法对于有类别样本信息进行充分学习。其次是因为负样本过多,会在一定程度上掩盖其他有类别样本。Focal Loss则希望那些hard examples可以对于损失带来较大的贡献,因为如此便可以让网络更加倾向于学习有类别的样本。
但我们有必要说明的是,在个人任务中One-Stage检测算法和Two-Stage检测算法的第一个Stage其实本质上变化不大,甚至我们可以将Two-Stage检测算法的第一个Stage看成是One-Stage检测算法,这也就说明设置第二个Stage其实本质上只是对前一个Stage的结果做进一步精化,进而使得所得结果更加精准。得出这样的结论的原因是因为无论上述的何种思路,本人觉得都适用于Two-Stage检测算法的第一个Stage。另外,对于Two-Stage检测框架设计的相关损失函数也同样与One-Stage检测算法所适配,如针对遮挡问题设计的相关loss。
(3)Two-Stage目标检测算法
Two-Stage目标检测算法我们可以将其看作将One-Stage检测进行俩次来使得精确度得到提升,第一次我们首先对物体的位置来进行检测,而到了第二个阶段我们再一次确认来对于结果进行精化,对于每一个候选区域进行One-Stage检测。如下图所示,当我们进行到Testing过程时将输入的图片通过卷积神经网络,来形成第一阶段的输出,同时对于输出结果解码处理,从而捕获对于候选区域特征表示(ROIs),之后对ROIs再次精化,从而实现二次处理,通过如此产生第二阶段的输出,通过解码处理后生成了最终的结果,即相应检测框。进一步精化产生第二阶段的输出,解码后处理生成最终结果,解码生成对应检测框即可;而到了在Training阶段的时候我们则需要将Ground Truth编码成CNN输出对应的格式因为只有这样我们才更方便去计算对应损失loss。
正如上图所示,Two-Stage的两个阶段我们发现其实是相似的,如果我们将其拆开来看,那么无论前后,都与One-Stage检测算法是十分相似的,因此我认为这两种不同的算法其实本质上就是一次和两次的区别,Two-Stage可以看成是两个One-Stage检测算法的组合,但其先后的俩次相似算法功能却不是完全相似的,其中第一个Stage做初步检测,主要目的在于剔除负样本,生成初步位置信息(Region of Interest),而第二个Stage的目的在于再做进一步精化并生成最终检测结果
(二)YOLO算法
1.什么是YOLO
YOLO是继R-CNN、Fast R-CNN、Faster R-CNN之后,rbg(RossGirshick)针对DL目标进行检测其速度问题时产生的另外一种框架,而YOLO算法的核心也就是利用整张图来进行输入,网络中直接接受到整张图,从而对整张图共同计算,核心思想也就是通过直接计算,直接在回归层bounding box的位置输出和bounding box所属的类别。
YOLO算法特殊之处在于讲对于物体的检测作为了一个回归的问题去解决,这种算法是基于一个独立网络end-to-end,从而一次性实现从输入原本图像,再到输出检测物体的位置信息还有所测物体的类别,而比较这几种不同的算法,在网络设计方面YOLO与R-CNN、Fast R-CNN及Faster R-CNN的区别如下:
(1)YOLO算法无论是对算法训练还是对数据的检测,都是在一个单独的网络中进行的,这也正是其强大之处,YOLO比起其它算法,并没有没有显示地求取region proposal这一过程而反观R-CNN/Fast R-CNN,该算法是采用分离的模块进行独立计算,基于单独设立的网络模型selective search方法来求的候选框,也就是选择出可能会包含所需图像信息的矩形区域,另外,即使是训练过程,在该算法中也是分开独立处理的,分成多模块来各自独立,Faster R-CNN使用RPN(region proposal network)这一卷积神经网络来替换掉之前的R-CNN/Fast R-CNN的selective search模块,RPN被集成到了Fast R-CNN检测网络,正因如此,我们便得到了一个同处一个系统下,统一的检测网络,但是虽然RPN与Fast R-CNN共享卷积层,但是到了模型训练的过程之中,我们同样地需要反复地对RPN网络和Fast R-CNN网络两个网络进行训练测试,即使两个网络是在共用同一个卷积层。
(2)总的来说,YOLO算法将物体检测过程巧妙的变成了一个回归问题,进而求的对于不同数据测试的不同结果,总体流程就是,首先输入图像经过一次inference,这样就可以得到所测图像之中所有的物体位置以及所属类别,另外还有相应的置信概率,而R-CNN/Fast R-CNN/Faster R-CNN将检测结果分为两部分求解:分别是物体类型,物体位置问题,也就是分类问题和bounding box(回归问题)。
- 核心思想
(1)网络定义
在YOLO检测网络之中,一共有24个卷积层,另外还有两个全积层。如图所示。
图5 YOLO网络结构图
这里面所内含的卷积层,主要负责对图像的特征捕获采集,而两个全积层则是
2309

被折叠的 条评论
为什么被折叠?



