图像处理算法及其Python实践 课件 第5-9章 图像分割-图像描述_第1页
图像处理算法及其Python实践 课件 第5-9章 图像分割-图像描述_第2页
图像处理算法及其Python实践 课件 第5-9章 图像分割-图像描述_第3页
图像处理算法及其Python实践 课件 第5-9章 图像分割-图像描述_第4页
图像处理算法及其Python实践 课件 第5-9章 图像分割-图像描述_第5页
已阅读5页,还剩174页未读 继续免费阅读

下载本文档

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

文档简介

第5章图像分割5.1概述5.2图像分割常用数据集5.3图像分割的常用方法5.4图像分割实战5.1概述5.1概述随着通信技术和硬件设备发展,图像在生活和生产中愈发重要,图像处理需求增加。人工智能兴起让机器拥有人类感知、理解和决断能力成研究热点,计算机视觉就是对生物视觉进行模拟。计算机视觉有三大分类任务:包括图像分类、目标检测和图像分割。图像分类为图像分配类别标签;目标检测需更强理解能力,识别类别并标记对象位置;图像分割主要有语义分割、实例分割和全景分割。图像语义分割将目标分类并标记像素,形成不同区域;实例分割更复杂,完成分割和目标检测,对同类不同目标分配不同语义标签;全景分割在实例分割基础上还对背景分割。图5-1计算机视觉三大分类5.1概述图5-23种分割的效果5.1概述由于语义分割能够对像素级别的信息进行理解分析,使得计算机不仅能够预测出图像中存在的物体类别,而且还能够预测到每个类别的具体位置,这就为计算机的决策提供了重要的先决条件。语义分割在现实生活中对需要用到图像理解的领域有着重要作用,例如在无人驾驶汽车、地理信息系统、医疗图像分析、农业等领域有很多实用价值,如图5-3所示。图5-3语义分割在不同场景中的应用5.1概述图像分割方法计算机视觉领域中,图像分割方法经过长时间的发展后可以归纳为两大类:一类是基于人工提取特征的传统图像分割方法;一类是基于深度卷积神经网络提取特征的图像语义分割方法。5.1概述传统的图像分割方法:基于阈值、边缘检测、区域和图论等四类方法。基于阈值的图像分割方法:选取一个或多个合适的阈值,通过比较阈值和像素灰度值将图像分类,常用方法有基于均衡直方图方法、基于最大熵方法、自适应阈值法。基于边缘检测的图像分割方法:利用图像中不同区域边缘像素灰度值突变分割图像,常用方法有基于梯度算子和Hough变换的方法。基于区域的图像分割方法:一种是相似相邻像素逐步合并为一个区域,代表方法是区域生长法;另一种是将大区域或整张图像逐步切割至所需分割区域,代表方法是区域分裂法。5.1概述基于图论的图像分割方法:为图像建立有权重的无向图,根据边的权值切割为若干子集,同一子集中的点相似度高,不同子集的点相似度低。

传统方法有什么缺点和局限?对图像要求高,只能针对特定要求的图像,对复杂场景的图像处理效果差,存在一定局限性。5.1概述卷积神经网络:随着深度学习的兴起,卷积神经网络(CNN)的出现极大地改变了图像分割的方法。2014年JonathanLong等人在VGG(VisualGeometryGroupNet)网络的基础上提出了全卷积神经网络(FullyConvolutionalNetwork,FCN),FCN将VGG网络的全连接层替换为卷积层,使得FCN能够处理任意分辨率的输入图像,然后采用反卷积将低分辨率的特征图恢复为输入图像大小,实现了端到端的语义分割,同时为了解决下采样过程中分辨率由高到低这个过程中空间信息的丢失,在上采样时使用跳跃连接恢复在下采样过程中丢失的空间特征信息。FCN作为首个使用卷积神经网络实现图像语义分割的方法,在图像语义分割方法研究上占有极其重要的地位。5.1概述FCN的缺点:没有利用全局上下文信息,小卷积核在复杂场景下提取局部特征易造成对全局理解偏差;随着不断卷积和池化,空间信息丢失严重,虽有长跳跃连接在上采样阶段恢复空间特征信息,但上采样跨度大且对下采样路径中的高分辨率特征利用不够,导致恢复的空间信息不充分。5.1概述感受野:感受野是卷积神经网络每一层输出的特征图上的像素点在原始输入图像上的映射的区域大小。感受野大小粗略地表明使用上下文信息的程度,大卷积核虽感受野大但有缺点。Google团队提出DeepLab系列模型,其中DeepLab--v1采用膨胀卷积扩大感受野,提升计算速度和准确率;DeepLab--v2提出ASPP模型,用不同膨胀率卷积核捕获多感受野信息并融合特征,还更换了特征提取网络;DeepLabV3++对ASPP进行改进,应用深度可分离卷积降低计算量。此外,为提高分割效果,PSPNet按金字塔结构融合多尺度特征图获取全局信息,RefineNet用级联反卷积网络获得多尺度上下文信息。5.1概述注意力机制计算机视觉中使用注意力机制来分配计算资源,以获得更有价值的上下文信息。SENet和CBAM是使用注意力机制的代表网络。SENet采用挤压激励模块计算通道权重增强网络表达能力CBAM在通道和空间维度设计注意力模块推断像素信息。

存在的问题?卷积运算存在局限,不能获得远距离像素关系且会增加计算量、降低效率,还会弱化与远距离像素建立的关系。下面提出一种优化网络:5.1概述NLNet是可捕获远距离依赖的自注意力模型,能得到更多全局信息提升计算机视觉任务效果。GCNet能获得与NLNet相近效果且减少大量计算。NLNet的优势:NLNet是自注意力模型,通过计算特定查询位置与其他所有位置依赖关系获得全局信息,提升图像分类、目标识别和语义分割等任务效果。GCNet的特点:GCNet能获得与NLNet相近效果同时减少大量计算。5.1概述编码器-解码器结构在深度学习图像分割中,编码器部分逐步提取和压缩图像特征,解码器部分恢复图像空间分辨率以获得精细分割结果。早期的网络结构:2015年,DeconvNet、SegNet和U-Net都是基于编码器解码器结构恢复特征图分辨率。DeconvNet由卷积和反卷积组成,使用VGG16网络和反池化上采样;SegNet与DeconvNet相似,用池化索引恢复特征值。但两者因未用长跳跃连接,分割效率不高。5.1概述U-Net及其优势:U-Net将解码器端低分辨率特征图上采样后与编码器端高分辨率特征图结合恢复空间信息,在医学图像上性能优异,被广泛应用。U-Net的改进:有学者堆叠多个U-Net成StackedU-Nets;MichalDrozdzal研究长跳跃连接和短连接,证明其有利于融合网络和加快收敛;U-Net++用嵌套密集跳跃连接,可恢复细粒度细节但计算复杂度大;MCAU-Net简化连接,用多尺度跳跃连接提高分割效果;PANet在解码器端提出GAU模块,利用高级语义特征指导低层特征。5.1概述U-Nets:有学者以U-Net堆叠的方式将多个U-Net堆叠成新的结构StackedU-Nets。U-Net++:它使用嵌套的、密集的跳跃连接取代U-Net中单一的跳跃连接,使解码器端相对丰富的语义特征能够融合来自编码器端的多个高分辨率特征中的细粒度信息特征。虽然嵌套的密集跳跃连接增强了网络的表达能力,但计算复杂度也增大了很多。MCAU-Net:简化了U-Net++中嵌套的、密集跳跃连接并使用了一种多尺度跳跃连接,在能充分利用编码器端不同分辨率的细粒度信息的同时,还能够利用解码器端高层、粗粒度的语义信息,在减少计算量的同时提高分割效果。PANet:在解码器端提出了全局注意力上采样模块(GlobalAttentionUpsampling,GAU),GAU提取高级语义特征的全局上下文的通道权重指导来低层特征。

5.2图像分割的常用数据集5.2图像分割常用数据集图像分割的常用数据集: PascalVOC系列数据集 MSCOCO数据集 Cityscapes数据集 SUN-RGB-D数据集5.2图像分割常用数据集1.PascalVOC系列数据集PascalVOC系列数据集中目前比较流行的是VOC2012和PascalContext。VOC2012数据集总计有21个类别(包括背景)。VOC2012分割数据集被分为训练和测试两个子集,分别有1464与1449张图像;PascalContext是PascalVOC2010数据集的扩展,包含10103张基于像素级别标注的训练图像,包含540个类别,其中59个类别是常见类别。2.MSCOCO数据集MSCOCO数据集是微软发布的包括图像分类、目标检测、实例分割、图像语义分割的大规模数据集。其中图像语义分割部分由80个类组成,包括训练集82783张图像、验证集40504张图像,测试集80000张图像。5.2图像分割常用数据集3.Cityscapes数据集Cityscapes数据集是一个大规模的城市道路和交通语义分割数据集,包含50个欧洲城市的不同场景、不同背景、不同季节的街景的33类标注物体。4.SUN-RGBD数据集SUN-RGBD数据集由四个RGB-D传感器得来,包含10000张RGB-D图像,图像尺寸与PascalVOC中的一致。5.3图像分割常用方法介绍5.3图像分割的常用方法介绍5.3.1传统的图像分割方法5.3.2基于深度学习的图像分割方法5.3图像分割的常用方法介绍图像分割常用方法可分为基于传统方法和基于深度学习方法。基于阈值的图像分割方法基于阈值的图像分割方法实质是通过设定不同的灰度阈值,对图像灰度直方图进行分类,灰度值在同一个灰度范围内的像素认为属于同一类并具有一定相似性,该类方法是一种常用的灰度图像分割方法。基于阈值的图像分割方法的关键是选取合适的灰度阈值,以准确地将图像分割开。5.3.1传统的图像分割方法

阈值T越大,分为目标类别的像素点就越多,图像逐渐由浅变深。图5-4不同阈值情况下的图像分割效果5.3.1传统的图像分割方法对于基于阈值的图像分割方法,根据不同的准则有不同的分类,常见的分类为:基于点的全局阈值分割方法、基于区域的全局阈值分割方法、局部阈值分割方法等。基于阈值的图像分割方法适用于目标灰度分布均匀、变化小,目标和背景灰度差异较明显的图像,简单易实现且效率高。然而该类法通常只考虑像素自身的灰度值,未考虑图像的语义、空间等特征信息,且易受噪声影响。对于复杂的图像,阈值分割的效果并不理想。因此,在实际的分割操作中,基于阈值的分割方法通常作为预处理方法或与其他分割方法结合使用。

5.3.1传统的图像分割方法基于边缘的图像分割方法在图像中若某个像素点与相邻像素点的灰度值差异较大,则认为该像素点可能处于边界处。若能检测出这些边界处的像素点,并将它们连接起来,就可形成边缘轮廓,从而将图像划分成不同的区域。根据处理策略的不同,基于边缘的图像分割方法,可分为串行边缘检测法和并行边缘检测法。串行边缘检测法:串行边缘检测法需先检测出边缘起始点,从起始点出发通过相似性准则搜索并连接相邻边缘点,完成图像边缘的检测。并行边缘检测法:并行边缘检测法则借助空域微分算子,用其模板与图像进行卷积,实现分割。5.3.1传统的图像分割方法在实际应用中,并行边缘检测法直接借助微分算子进行卷积实现分割,过程简单快捷,性能相对优良,是最常用的边缘检测法。根据任务的不同,可灵活选择边缘检测算子,实现边缘检测完成分割。常用的边缘检测微分算子有:Roberts、Sobel、Prewitt、LoG、Canny等。如图5-5所示,分别使用不同的微分算子对相同的图像进行处理,从图5-5可看出,相较于图像背景,经边缘检测算子处理后,水果的边缘轮廓相对清晰,实现了图像分割的目的。

5.3.1传统的图像分割方法图5-5采用不同微分算子时并行边缘检测法的图像分割效果5.3.1传统的图像分割方法基于区域的图像分割方法(1)基于区域的图像分割方法是:

根据图像的空间信息进行分割,通过像素的相似性特征对像素点进行分类并构成区域。根据区域思想进行分割的方法有很多,其中较常用的有区域生长法和分裂合并法。(2)区域生长法:

指的是通过将具有相似性质的像素点集合起来,构成独立的区域,以实现分割。具体过程:先选择一组种子点(单个像素或小区域)作为生长起点,然后根据生长准则,将种子点附近与其具有相似特征的像素点归并到种子点所在的像素区域内,再将新像素作为种子点,反复迭代至所有区域停止生长。区域生长法中种子点和生长准则的选取至关重要,直接影响分割效果。种子点的选取除了人工选取法外,还可以用算法自动选取;生长准则可根据图像的颜色、纹理、空间等特征信息设定。分裂合并法的实质是通过不断地分裂合并,得到图像各子区域。5.3.1传统的图像分割方法具体步骤为:先将图像划分为规则的区域然后根据相似性准则,分裂特性不同的区域,合并特性相同的邻近区域,直至没有分裂合并发生。该方法的难点在于初始划分和分裂合并相似性准则的设定。5.3.1传统的图像分割方法图5-6基于区域的图像分割方法分割效果5.3.1传统的图像分割方法基于聚类的图像分割方法基于聚类的图像分割方法原理:将具有特征相似性的像素点聚集到同一区域,反复迭代至收敛,划分图像区域实现分割。SLIC算法步骤:(1)将RGB图像转化到Lab颜色空间;(2)将像素点颜色特征和坐标组合成向量进行距离度量;(3)根据距离度量公式计算像素点之间的距离;(4)依据相似性准则对像素点进行聚类实现超像素分割。SLIC算法优势:基于聚类思想划分为超像素块,适用于多种计算机视觉应用,是经典图像处理手段;利用图像特征信息作为聚类准则,性能稳定且鲁棒性好。5.3.1传统的图像分割方法图5-7超像素SLIC算法图像分割效果5.3.1传统的图像分割方法基于图论的图像分割方法

基于图论的图像分割方法将分割问题转换成图的划分,通过对目标函数的最优化求解,完成分割过程,包括:GraphCut、GrabCut、OneCut等常用算法。其中,GraphCut算法基于图论的思想,将最小割(mincut)问题应用到图像分割问题中,可以将图像分割为前景和背景,是经典的基于图论的图像分割方法。下面以GraphCut算法为例:图5-8S-T图5.3.1传统的图像分割方法GraphCut算法的原理:寻找MinCut过程中不断迭代,求得能量损失函数的最小值,就可以实现目标与背景的分离,从而实现图像分割。其中:将图像映射为带有权重的无向图G=(V,E)(V是顶点集合,E是边集合)每个节点与终端节点S(Rp(1))和T进行连接形成边(Rp(0)),无向图就会形成两种顶点和边。Cut:边集合E中的所有边都断开;MinCut:Cut过程中其对应的边权值之和最小;5.3.1传统的图像分割方法GraphCut算法的图像分割效果:图5-9

GraphCut算法的图像分割效果5.3.2基于深度学习的图像分割方法本小节将重点介绍四种基于深度学习的经典分割方法:FCN、PSPNet、DeepLab和MaskR-CNN。FCN全卷积神经网络(FCN)是深度学习用于语义分割的开山之作,确立了图像语义分割(即对目标进行像素级的分类)通用网络模型框架。通常,卷积神经网络(CNN)经过多层卷积之后接入若干个全连接层,将卷积层产生的特征图映射成固定长度的特征向量进行分类。但FCN和CNN不同,如图5-10所示,FCN采用“全卷积”方式,在经过8层卷积处理后,对特征图进行上采样实现反卷积操作,然后通过SoftMax层进行分类,最后输出分割结果。图5-10语义分割模型FCN5.3.2基于深度学习的图像分割方法经过多次卷积、池化得到不同层级的特征图:图5-11FCN结构图5.3.2基于深度学习的图像分割方法通过把深层数据与浅层信息相结合,再恢复到原图的输出,得到更准确的分割结果,根据所利用的池化层的不同,分为FCN-32s、FCN-16s、FCN-8s。图5-12不同FCN模型分割效果FCN-8s

模型由于整合了更多层的特征信息,相比于FCN-32s和FCN-16s可以分割得到更加清晰的轮廓信息,分割效果相对较好。

5.3.2基于深度学习的图像分割方法

FCN模型存在哪些问题?FCN模型在图像分割中存在因多次卷积操作导致特征图尺寸远小于输入图且丢失底层图像信息从而影响分割精度的问题。为此采用Skip策略,将不同层级的特征图进行融合后上采样分类,得到FCN--32s、FCN--16s、FCN--8s模型。通过深层数据与浅层信息结合恢复原图输出可得到更准确分割结果,其中FCN--8s整合更多层特征信息分割效果相对较好。FCN能进行像素级分类,是首个端到端分割网络模型,在分割领域有重要意义,但也存在网络较大对图像细节不敏感、像素点关联性低导致目标边界模糊等问题。

FCN-8s模型图像分割效果5.3.2基于深度学习的图像分割方法图5-13FCN-8s模型图像分割效果5.3.2基于深度学习的图像分割方法PSPNet金字塔场景解析网络(PSPNet)整合上下文信息,充分利用全局特征先验知识,对不同场景进行解析,实现对场景目标的语义分割。如图5-14所示,给定输入图像,首先使用CNN得到最后一个卷积层的特征图,再用金字塔池化模块(pyramidpoolingmodule)收集不同的子区域特征,并进行上采样,然后串联(concat)融合各子区域特征以形成包含局部和全局上下文信息的特征表征,最后将得到的特征表征进行卷积和SoftMax分类,获得最终的对每个像素的预测结果。(a)原始图像

(b)标注图

(c)PSPNet模块5.3.2基于深度学习的图像分割方法PSPNet针对场景解析和语义分割任务,能够提取合适的全局特征,利用金字塔池化模块将局部和全局信息融合在一起,并提出了一个适度监督损失的优化策略,在多个数据集上的分割精度都超越了FCN、DeepLab-v2、DPN、CRF-RNN等模型,性能良好。图为PSPNet模型对不同目标(牛、飞机、人等)的分割效果。前景目标分割精细,但对目标间有遮挡的情况处理得不够理想,如图中(第3行)桌子受遮挡影响,边缘分割得不够精准。图5-15PSPNet模型图像分割效果5.3.2基于深度学习的图像分割方法DeepLab系列模型DeepLab系列模型是LiweiWang、ChenLiang、ChenxiLiu和AlanYuille等提出的深度卷积神经网络(deepconvolutionalneuralnetwork,DCNN)模型,其核心是使用空洞卷积,即采用在卷积核里插孔的方式,不仅能在计算特征响应时明确地控制响应的分辨率,而且还能扩大卷积核的感受野,在不增加参数量和计算量的同时,能够整合更多的特征信息。最早的DeepLab模型如图所示,输入图像经过带有空洞卷积层的DCNN处理后,得到粗略的评分图,双线性内插值(Bi-linear)上采样后引入全连接条件随机场(conditionalrandomfields,CRF)作为后处理,充分考虑全局信息,对目标边缘像素点进行更准确地分类,排除噪声干扰,从而提升分割精度。5.3.2基于深度学习的图像分割方法图5-16原始DeepLab模型5.3.2基于深度学习的图像分割方法DeepLab-v2在DeepLab模型基础上将空洞卷积层扩展为空洞空间金字塔池化(atrousspatialpyramidpooling,ASPP)模块,级联多尺度空洞卷积层并进行特征图融合,保留全连接CRF作为后处理。图5-17DeepLab-v2模型结构5.3.2基于深度学习的图像分割方法DeepLab-v3+模型采取编解码结构:图5-19DeepLab-v3+模型结构图5.3.2基于深度学习的图像分割方法DeepLab-v3+模型对不同目标(人、马、狗等)的分割效果如图:图5-20DeepLab-v3+模型分割效果图5.3.2基于深度学习的图像分割方法从图中观察,分割后的图像中能够明显区分出前景目标和背景,目标边缘轮廓清晰,说明该模型能够实现细粒度的分割。5.3.2基于深度学习的图像分割方法

5.3.2基于深度学习的图像分割方法图5-21MaskRCNN框架5.3.2基于深度学习的图像分割方法分割效果:图5-22MaskRCNN模型图像分割效果5.4图像分割实战本节图像分割实战是对网上开源代码DeepLabv2进行复现主要分为模型构建、训练和测试三个方面进行详解,DeepLab-v2的pytorch实现代码网址:/kazuto1011/deeplab-pytorch。5.4.1模型构建DeepLab-v2相对于DeepLabv1最大的改动是增加了受空间金字塔池化(SpacialPyramidPooling,SPP)启发得来的空洞空间金字塔池化模块(ASPP),同时还在DeepLabv1的基础上将VGG-16网络换成了ResNet网络。ASPP模块是类似于Inception的结构,包含不同比例的空洞卷积,加强模型识别不同尺寸的同一物体的能力。ASPP共提出了ASPP-S和ASPP-L两个不同尺度的ASPP,它们的不同点在扩张率的不同,两个ASPP的扩张率分别是{2,4,8,12}和{6,12,18,24}。在进行完空洞卷积后再增加两个1x1卷积进行特征融合,最后通过单位加得到最终的输出结果。5.4.1模型构建图5-23ASPP整体结构5.4.1模型构建图5-24ASPP详细结构图5.4.2模型训练该模型训练数据集为进行数据增强后的voc2012数据集:

/VOCdevkit└──VOC2012├──Annotations├──ImageSets│

├──Segmentation

├──SegmentationAug#ADDED

├──test.txt│

├──train_aug.txt

├──train.txt

├──trainval_aug.txt

├──trainval.txt

└──val.txt├──JPEGImages

├──SegmentationObject

├──SegmentationClass

└──SegmentationClassAug└──2008_000002.png2035.4.2模型训练模型训练的步骤为:(1)设置数据集路径,在congfigs文件夹中找到voc12.yaml,修改其中datasetroot为存放数据集路径。(2)下载ResNet预训练模型caffemodel,运行scripts/setup_caffemodels.sh文件。(3)由于ResNet预训练模型是在TensorFlow下得到的,所以需要把其转换成PyTorch下也能使用的格式,在终端输入pythonconvert.py--datasetvoc12,即可生成deeplabv2_resnet101_msc-vocaug.pth文件。(4)在终端输入pythonmain.pytrain--config-pathconfigs/voc12.yaml即可开始训练。5.4.3模型测试在终端输入:Pythonmain.pytest--config-pathconfigs/voc12.yaml--model-pathdata/models/voc12/deeplabv2_resnet101_msc/train_aug/checkpoint_final.pth可得到测试结果。当想测试自己图像时,可运行demo.py文件,具体命令为:pythondemo.pysingle--config-pathconfigs/voc12.yaml--model-pathdeeplabv2_resnet101_msc-vocaug-20000.pth--image-pathimage.jpg。5.4.3模型测试分割效果:图5-25行人图像分割结果图5-26小狗、小猫分割效果5本章小结本章在阐述图像分割概念的基础上,着重介绍了几类传统图像分割方法和基于深度学习的图像分割方法,对每一类方法中的代表性算法进行研究和分析,并对基于深度学习的图像分割方法进行了复现。第6章目标检测6.1概述6.2常用数据集6.3目标检测常用方法介绍6.4目标检测实战6.1概述目标检测技术概述现代智能设备广泛应用图像方式存储信息,虽便于记录,但在信息检索方面存在不足。随着硬件性能提升和数据库扩展,卷积神经网络(CNN)成为主流的目标检测算法。目标检测:识别图像或视频中感兴趣的对象(如人脸、汽车、建筑等)并定位其位置。应用领域广泛,如安检中的人脸识别、智慧交通中的行人与车辆识别与跟踪等。目标检测任务包括两个核心步骤:提取图像区域的特征表示(如特征向量);利用分类算法对特征区域进行识别与分类。6.1概述传统目标检测与深度学习的突破传统算法:分为区域选择、特征提取和分类三步,存在通用性差、复杂度高、实时性差的问题。深度学习兴起(2012年):卷积神经网络(CNN)为图像识别和目标检测提供了强大工具。两阶段目标检测(Two-stage):先选取候选区域,再通过CNN提取特征进行分类。R-CNN的提出(Girshick等,2014年):首次结合CNN和目标检测,采用选择性搜索(SelectiveSearch,Uijlings等,2013)作为候选区域生成方法。6.1概述

YOLO:单阶段目标检测的代表YOLO(YouOnlyLookOnce)

Redmon等人于2016年提出,是首个单阶段目标检测方法,跳过“两阶段”过程,直接对整幅图像进行预测,速度极快但精度略逊。YOLO演进:YOLOv2/YOLOv3(2017/2018):提升精度,保持高速度。YOLOv4(2020,Bochkovskiy):进一步优化性能。YOLOv5(2020,Ultralytics团队Jocher):准确率和速度兼具,特别适合嵌入式与移动端应用。YOLOv5优势:精度超越多数两阶段模型推理速度快,适用于实时检测任务6.1概述目标检测的发展趋势从传统方法到深度学习:

传统目标检测依赖图像手工特征,难以应对形态多样、光照不均、背景复杂等实际场景,检测精度有限。

卷积神经网络的引入有效解决了特征提取不稳的问题。从两阶段到单阶段检测:两阶段检测:特征提取+分类,结构复杂、收敛难、速度慢单阶段检测:通过一个神经网络完成全部任务,兼顾精度与实时性发展趋势:

网络结构持续优化,模型性能不断提升,目标检测技术正向更高效、智能的方向发展。6.2常用数据集常用目标检测数据集COCO(2015)场景复杂、目标多样(含小目标、多目标)30万+图像,250万+目标标注包含91类目标,平均每图约7个目标TinyPerson由中国科学院发布,仅包含“人”类目标训练集与测试集共约1600张图像适合小目标检测任务研究ImageNet(2010起)支持图像分类、目标检测、场景理解等多任务1200万+图像,2.2万+类目目标检测任务中标注了约103万张图,涵盖200类目标6.2常用数据集(4)UCAS-AOD:是一种远程目标检测数据集,只包含车辆、飞机两个类别。其中,飞机小目标样本7482个,汽车小目标样本7114个。(5)RSOD数据集:由武汉大学发布的航空遥感图像,包括飞机、操场、桥、油罐4个类别。其中桥类图像176张,飞机类图像446张,操场类图像190张图像,油罐类图像165张。(6)OICOD数据集:基于OpenImageV4的最大的公用数据集。不同于ILSVRC和MSCOCO目标检测数据集,它包括更多的类别、图像、边界框、实例分割分支和海量的注释处理,OICOD还为目标实例提供了可以手动验证的标签。(7)OpenImageV4:使用分类器标注图像标签,可通过人工标注得到得分很高的标签。(8)URPC2018:水下物体数据集,共包含训练图像近2900幅和测试图像近800幅,类别包括海参、海星、海胆和贝类。6.3目标检测常用方法介绍传统目标检测算法:主要基于手工特征提取与分类器,依赖图像特征设计,适应性较弱。深度学习的引入:卷积神经网络(CNN)在图像与视频特征提取方面表现优越,推动目标检测技术突破。两大类深度学习目标检测算法:Two-stage:基于候选区域(如R-CNN系列),检测精度高,速度相对较慢One-stage:基于回归方法(如YOLO系列),速度快,图6-1常用的目标检测算法6.3目标检测常用方法介绍传统的目标检测算法1.传统的目标检测算法流程传统的目标检测算法基于特征分类,其流程如图6-2所示,算法的检测过程可分为3个步骤:(1)用滑动窗口在给定的图像上选出候选区域或感兴趣区域。(2)根据特定的任务,在候选区域或感兴趣区域上提取目标对象所需要的特征。(3)使用SVM、随机森林等分类器,对提取到的特征进行处理。图6-2传统目标检测算法流程6.3目标检测常用方法介绍传统目标检测流程传统目标检测依赖特征提取+分类器,常用特征提取算法包括:HOG(方向梯度直方图)对光照和几何变形具有较强适应性广泛用于行人检测SIFT(尺度不变特征转换)能适应旋转、尺度和光照变化特征稳定但计算量大,实时性差LBP(局部二值模式)纹理分析常用,计算简单对灰度变化敏感,适合人脸识别等任务6.3目标检测常用方法介绍LBP特征提取算法与传统方法优缺点LBP(局部二值模式)基本原理:在3×3区域内,以中心像素为阈值,将邻域像素转为二进制编码,得到LBP值用于提取图像局部纹理特征LBP改进方式:使用任意像素数的圆形邻域代替固定窗口提取过程中选择最小值,实现旋转不变性提高了对光照变化的适应性广泛应用于人脸识别与目标检测6.3目标检测常用方法介绍传统目标检测算法优劣对比✅优点:适合小样本数据场景对设备计算力要求低训练速度快、成本低❌缺点:面对大规模数据精度低特征提取不够鲁棒,泛化能力弱6.3.2基于深度学习的目标检测算法基于深度学习的目标检测算法根据结构可大致分为三类,分别为one-stage类目标检测算法、two-stage类目标检测算法、以及基于transformer的目标检测算法。1.two-stage类目标检测算法Two-stage类目标检测算法为基于候选区域提出的算法,该类算法可分为两个步骤:第一步,提取可能包含目标的候选区域;第二步,对选出的候选区域进行分类。Two-stage类目标检测算法的大致流程如图6-3所示。图6-3two-stage类目标检测算法流程图6.3.2基于深度学习的目标检测算法Two-stage目标检测算法概览候选区域提取方式主要分为两类:1.传统方法(如SelectiveSearch):候选区域少、召回率高代表算法:R-CNN、FastR-CNN2.区域提议网络(RPN):通过CNN特征+滑动窗口自动生成区域代表算法:FasterR-CNN6.3.2基于深度学习的目标检测算法1)R-CNN模型RossGirshick等人提出的R-CNN模型使目标检测取得巨大突破,成为后续R-CNN系列两阶段目标检测的开山之作。R-CNN的框架流程如图6-4所示,首先使用SS(selectivesearch)算法提取大约2000个候选框;然后将提取到的候选框做预处理固定到相同尺寸,送入Alex-Net网络进行区域特征提取;最后对CNN提取的区域特征使用SVM进行分类与边框校准。R-CNN算法的性能较传统算法有很大的提升,但还存在SS算法产生候选框耗时严重,裁剪会导致信息丢失或引入过多背景,卷积特征重复计算量大和网络训练需要分步骤进行的缺点。图6-4R-CNN模型6.3.2基于深度学习的目标检测算法2)SPP-Net模型为了任意大小的图像能够输入网络,何凯明等人提出SPP-Net目标检测模型。通过在最后一个卷积层与全连接层间加入金字塔池化层,结构如图6-6所示,将SS算法生成的不同大小的候选框归一化到固定尺寸的全连接层上,完成对整张图像只需进行一次卷积特征提取的操作,避免了R-CNN对2000个区域都会计算CNN特征的过程。SPP-Net目标检测算法能够适应不同尺寸,实现了卷积特征的共享计算,大大减少了计算量。图6-5SPP-Net目标检测框架图6-6金字塔池化层6.3.2基于深度学习的目标检测算法3)FastR-CNN模型2015年RossG等人提出FastR-CNN目标检测算法,该模型的流程结构如图6-7所示。通过结合SPP-Net改进R-CNN,使用VGG16代替Alex-Net网络,简化SPP算法中的金字塔池化层为单尺度使得所有层参数可以微调,将SVM分类器改为SoftMax分类器,通过引入多任务学习模式,同时解决分类和位置回归的问题。相比于R-CNN和SPP-Net,FastR-CNN将多个步骤整合到一个模型中,训练过程不再分步进行,减少了磁盘空间的占用,在提升网络性能的同时加快了训练速度。但FastR-CNN的不足仍是需要专门的生成候选框算法。图6-7FastR-CNN流程图6.3.2基于深度学习的目标检测算法4)FasterR-CNN模型使用SPP-Net与FastR-CNN进行检测的耗时性主要集中在使用专门的候选框生成算法,为了解决此问题,RenS等人又提出FasterR-CNN目标检测框架。该算法引入RPN(regionproposalnetworks),代替专门的生成候选窗口算法,通过对特征图上的每个点进行滑窗操作,将不同尺寸的锚点框映射到原始图像,得到候选区域,完成前景背景的粗分类和粗定位。RPN的使用,使FasterR-CNN能够将网络中区域建议、特征提取、分类及定位多个步骤整合到一起,真正成为端到端的训练。但由于FasterR-CNN特征图上的一个锚点框对应于原图中一块较大区域,因此,FasterR-CNN对小目标检测效果不是很好。图6-8FasterR-CNN框架6.3.2基于深度学习的目标检测算法2.one-stage类目标检测算法One-stage类目标检测算法(one-shotobjectdetectors)为基于回归的深度学习目标检测算法,其中常用的单目标检测算法有SSD、RetinaNet、YOLO、YOLOv2、YOLOv3、YOLOv4、YOLOv5等算法。相较于two-stage类目标检测算法,One-stage类目标检测算法无需候选区域提出(regionproposal)这一过程,能够直接回归物体的类别概率和位置坐标。One-stage类目标检测算法的核心组件是卷积神经网络和回归网络,其基本流程如图6-9所示。下面将简要介绍one-stage目标检测算法最具代表性的YOLO系列算法。图6-9one-stage类目标检测算法流程图6.3.2基于深度学习的目标检测算法1)YOLOv1算法YOLOv1通过CNN直接在一张完整的图像上实现物体类别概率和边界框回归的预测.其网络结构是在GoogLeNet模型的基础上建立的。YOLO的实现过程如图6-10。首先,将输入图像固定为统一尺寸(448×448),输入的图像划分为S×S个网格,每个网格负责检测一个物体中心落在其上的目标,并预测该物体的confidence(置信度)、类别及位置;其次,利用CNN对输入图像提取特征并进行物体检测;最后,通过非极大值抑制(Non-MaximumSuppression,NMS)处理边界框得到最优结果。图6-10YOLO算法实现流程6.3.2基于深度学习的目标检测算法YOLOv1主要优势概括为以下几点:(1)YOLOv1将之前算法的分类+回归问题,简化为回归问题,可以将物体类别检测与框坐标检测同时进行,真正实现了端到端的检测。检测速度较快,能够满足实时性要求。(2)YOLOv1训练数据时,输入的是整张图像,保证了数据信息的完整性同时能够更好地联系上下文语义。同时,YOLOv1也存在自身的限制性:(1)对于每一个网格,在检测时只能预测两个框,且属于同一类,所以在检测两个距离很近的物体时,检测效果不好,极易出现漏检的情况。(2)当出现长宽比罕见的同一物体,泛化能力差。(3)YOLOv1仅仅对最后的卷积输出层做检测,此时对于尺寸较小的物体,由于经过了多次的卷积,会很难检测,因此,对于小物体的检测效果不好。6.3.2基于深度学习的目标检测算法2)YOLOv2算法YOLOv2相对YOLOv1版本,主要从预测精度、速度、识别物体数目这三个方面进行了改进。YOLOv2识别的物体变得更多,即扩展到能够检测9000种不同物体又称为YOLO9000.它采用更简单的特征提取网络DarkNet19来取代GoogLeNet网络;引入了批次归一化(BatchNormalization,BN)层来加强网络的收敛速度,增强了网络的泛化能力;训练高分辨率分类器以适应更高分辨率的图像;利用WordTree将ImageNet分类数据集和COCO检测数据集联合训练;除去全连接层并采用k-means聚类算法自动寻找先验框——锚框(anchorboxes),从而提高检测性能。其中,锚框是基于一个窗口只能检测一个目标以及无法进行多尺度检测问题所提出的一种先验框。6.3.2基于深度学习的目标检测算法3)YOLOv3算法2018年,原作者提出了YOLOv3算法,它继承了YOLOv1和YOLOv2的思想,实现了速度和检测精度的平衡。该算法对DarkNet19再加以改进设计出了DarkNet53网络,其灵感来自于ResNet,在网络中加入直连通道,即允许输入的信息直接传到后面的层,同时引入了特征金字塔(FeaturePyramidNetworks,FPN)来实现多尺度预测,通过这种新的特征连接方式能有效提高小物体的检测能力。YOLOv3引入残差结构并通过卷积层来实现特征图尺寸的修改,YOLOv3网络结构如图6-11所示。图6-11YOLOv3网络结构图6.3.2基于深度学习的目标检测算法4)YOLOv4算法2020年4月,AlexeyBochkovskiy等在YOLOv3的基础上在各方面做了改进并提出了新的高效检测物体的算法——YOLOv4。其特点在于集成各个算法,包括新的数据增强方法Mosaic法和自对抗训练(SelfAdversarialTraining,SAT)法、提出了改进的SAM和PAN以及交叉小批量标准化(CrossminiBatchNormalization,CmBN)。YOLOv4的网络结构如图6-12所示。图6-12YOLOv4网络结构图6.3.2基于深度学习的目标检测算法5)YOLOv5算法继YOLOv4之后时隔2个月,有研究人员推出了YOLOv5算法。在准确度指标上,其性能与YOLOv4不相上下,速度上远超v4,模型尺寸相比于YOLOv4(245MB)也非常小(27MB),在模型部署上有极强的优势,同样也是目前最先进的物体

检测技术。YOLOv5官方发布的代码中,检测网络共有四个版本,依次为YOLOv5x、YOLOv5l、YOLOv5m、YOLOv5s。其中YOLOv5s是深度和特征图宽度均最小的网络,另外三种可以认为是在其基础上,进行了加深、加宽。本小节以YOLOv5s为主线进行论述。YOLOv5s网络结构图如6-13所示。图6-13YOLOv5s网络结构图6.3.2基于深度学习的目标检测算法将图6-12与图6-13进行比较,可以发现YOLOv5结构与YOLOv4基本相似,只是在细节上稍有差异。(1)增加Focus结构Focus结构的核心是对图像进行切片操作,具体细节见图6-14。图6-14以一个简单的输入图像为例。对于颜色1的区域,不论宽还是高,都从0开始,每隔两个步长取值;颜色2的区域,不论宽还是高,都从1开始,每隔两个步长取值;依次类推,对三个通道都采取这样的切片操作。最后将所有的切片,按照通道拼接在一起,得到一个的特征图。(2)CSP结构YOLOv4中仅在Backbone中使用了CSP结构,而YOLOv5中在Backbone和Neck中使用了两种不同的CSP。

在Neck中使用CSP2_X,相对于单纯的CBL将主干网络的输出分成了两个分支,后将其拼接,使网络对特征的融合能力得到加强,保留了更丰富的特征信息。6.3.2基于深度学习的目标检测算法YOLOv5不仅具有轻量级的模型,而且在Tesla

P100上检测速度达到140FPS,而且检测准确率与YOLOv4相当,可以称得上是当前的目标检测算法中的佼佼者。

表6-1

YOLOv5四种网络结构和性能对比表网络结构残差组件数(个)卷积核数(个)mAPval0.5:0.95mAPval0.5模型推理耗时(ms)YOLOv5s12100137.055.92.6YOLOv5m24148845.363.83.2YOLOv5l36198448.666.95.2YOLOv5x48248050.668.77.96.3.2基于深度学习的目标检测算法1.YOLO系列算法对比YOLO系列算法因为其具有比较简洁的结构,计算处理速度快,被广泛使用在一些比赛及项目中。本小节在此针对YOLO系列算法网络模型中的骨干网络及其在三大公开数据集VOC2007、VOC2012和COCO上的检测速度和精度做一对比,如表6-2所示。除此之外,还对前文提到的几种YOLO算法的优点、存在的不足做了归纳,详情见表6-3。算法骨干网络mAP(%)FPS

COCOVOC2007VOC2012

YOLOVGG-16-63.457.945.0YOLOv2DarkNet-1921.678.673.540.0YOLOv3DarkNet-5357.9--51.0YOLOv4CSPDarkNet-534305--23.0表6-3

YOLO系列算法优缺点对比算法优点缺点YOLO图像划分为网格单元,模型检测速度快对密集目标和小目标检测效果不佳YOLOv2使用聚类产生锚框,提高分类精度使用预训练,迁移较难YOLOv3借鉴残差网络,实现多尺度检测模型复杂,对中、大目标检测效果较差YOLOv4在检测精度与速度之间取得了权衡精测精度有待提高YOLOv5模型尺寸小,部署成本低,灵活度高,检测速度快性能有待提高表6-2

YOLO系列算法对比6.3.2基于深度学习的目标检测算法2)YOLOv2算法YOLOv2相对YOLOv1版本,主要从预测精度、速度、识别物体数目这三个方面进行了改进。YOLOv2识别的物体变得更多,即扩展到能够检测9000种不同物体又称为YOLO9000.它采用更简单的特征提取网络DarkNet19来取代GoogLeNet网络;引入了批次归一化(BatchNormalization,BN)层来加强网络的收敛速度,增强了网络的泛化能力;训练高分辨率分类器以适应更高分辨率的图像;利用WordTree将ImageNet分类数据集和COCO检测数据集联合训练;除去全连接层并采用k-means聚类算法自动寻找先验框——锚框(anchorboxes),从而提高检测性能。其中,锚框是基于一个窗口只能检测一个目标以及无法进行多尺度检测问题所提出的一种先验框。6.3.2基于深度学习的目标检测算法3.基于transformer的目标检测算法对于目标检测任务而言,各个目标之间的关系是有助于提升目标检测效果的。尽管传统目标检测方法使用到了目标之间的关系,在基于Transformer的目标检测模型出现之前,无论是单阶段还是双阶段目标检测方法,都未能充分利用注意力机制来捕捉目标之间的关系。因为目标的位置、尺度、类别、数量都会因图像的不同而不同,导致目标与目标之间的关系难以建模。而现代基于CNN的方法大多只有一个简单、规则的网络结构,对于上述复杂问题有些无能为力。针对这种情况,DETR(DEtectionTRansformer)利用Transformer将注意力机制引入到目标检测领域。DETR利用Transformer对不同目标之间的关系建模,在特征之中融入了关系信息,实现了特征增强。DETR是基于Transformer提出了全新的目标检测架构,开启了目标检测的新时代。6.3.2基于深度学习的目标检测算法1)DETRDETR将目标检测任务视为一个图像到集合(image-to-set)的问题,即给定一张图像,模型的预测结果是一个包含了所有目标的无序集合。整个DETR的算法流程如图6-15所示。DETR的算法非常的清晰简洁:首先将一张图像作为输入,通过一个CNN进行特征提取,得到一张特征图;随后将二维特征图拆成一维特征图,并当作序列数据输入具有encoder-decoder结构的transformer,得到若干个预测框,包括预测框的位置向量以及类别向量。最后将预测框与标签之间进行二分图匹配,利用匈牙利算法计算loss,实现端对端的训练。损失函数如公式6-2所示。(6-2)图6-15DETR的算法流程6.3.2基于深度学习的目标检测算法DETR的架构如图6-16所示。主要包含三个部件:用于提取图像特征表示的CNNbackbone,encoder-decodertransformer,用于执行最终检测预测的简单的前馈网络(FFN)。Backbone是一个CNN网络,对输入图像进行提取特征,得到下采样的特征图,然后对特征图位置编码。Transformerencoder首先:使用一个的卷积将高层激活图

的通道维度从降低至一个较小的维度,生成一个新的特征图

。encoder期望一个序列作为输入,因此作者将特征图的空间维度折叠至一维,生成一个

的特征图。每个编码器层都有统一的标准结构,该结构由一个多头自注意力模块和一个FFN组成。6.3.2基于深度学习的目标检测算法执行最终检测预测的简单的前馈网络(FFN)是通过一个使用ReLU激活函数、隐藏层维度为d的3层感知器,以及一个线性投影层计算得到的。FFN预测边界框相对于输入图像归一化后的中心坐标、高度、宽度,线性层使用softmax函数预测类别标签。图6-16DETR的网络架构6.3.2基于深度学习的目标检测算法2)DeformableDETRDETR在小物体检测上性能较差。现存的检测器通常带有多尺度的特征,小物体目标通常在高分辨率特征图上检测。而DETR没有采用多尺度特征来检测,主要原因是高分辨率的特征图会给DETR带来不可接受的计算复杂度。DeformableDETR,结合了deformable的稀疏空间采样的优点和transformer的关系建模能力。它考虑在所有特征图像素中选择一个小的采样位置集,作为一种预先过滤器,以突出关键元素;该模块可以自然地扩展到聚合多尺度特征,而无需FPN的帮助;在deformableDETR中,使用(多尺度)可变形注意模块替换处理特征图的transformer注意模块,如图6-17所示。图6-17DeformableDETR的网络架构6.4目标检测实战本节一起来了解pytorch下的训练/测试YOLOv3的例子,并试试YOLOv3的效果,基于VOC2007数据集训练YOLOv3模型。YOLOv3的pytorch实现代码网址为/bubbliiiing/yolo3-pytorch。6.4.1文件结构文件结构YOLOv3的pytorch代码的结构主要包括以下主要文件。img:放置预测图像(测试单张图像)logs:存放训练好的文件model_data:nets:定义基本网络结构utils:一些小工具,比如数据加载模块。VOCO7+12+test/VOCdevkit:训练数据集(注:该数据集为VOC07+12的数据集,包括了训练与测试用的数据集。为了训练方便,该数据集中val.txt与test.txt相同。)6.4.1文件结构get_map.py:测试数据集时,运行此文件即可获得评估结果predicted.py:预测网络summary:用于可视化网络结构train.py:训练网络voc-annotation.py:数据集注释(若训练自己的数据集,需要使用此文件对数据集进行打标签)yolo.py:搭建yolov3网络图6-18YOLOv3代码结构图6.4.2数据集的准备数据集的准备1)VOC2007数据集VOC2007数据集组成如图6-19所示。Annotations文件夹中包含图像的标注信息,ImageSets文件夹中包含数据集划分后保存的文本文件,JPEGImages文件夹包含图像文件。若使用VOC2007数据集,由于此数据集已经完成标注,则只需修改voc_annotation.py里面的annotation_mode=2,之后运行voc_annotation.py生成根目录下的2007_train.txt和2007_val.txt。图6-19VOC2007数据集6.4.2数据集的准备2)自己的数据集由于此模型数据使用VOC格式进行训练,所以在训练前需要将自己的数据集转换为VOC格式。首先需要对自己的数据集进行标注,标注的工具为Labeling,示例如图6-20。(a)图像示例(b)标注示例

图6-20

voc数据格式示例6.4.2数据集的准备当完成标注后,将生成的标签文件放在文件夹VOCdevkit/VOC2007/Annotation中,将图像文件放在文件夹VOCdevkit/VOC2007/JPEGImages中。在文件放置完毕后,需要修改voc_annotation.py里面的参数,第一次训练可以仅修改classes_path,classes_path用于指向检测类别所对应的txt。训练自己的数据集时,可以自己建立一个文件cls_classes.txt,里面填写自己所需要区分的类别。即model_data/cls_classes.txt文件内容为设置为所需分类标签。修改voc_annotation.py中的classes_path,使其对应cls_classes.txt,并运行voc_annotation.py获得训练用的2007_train.txt和2007_val.txt。6.4.3训练网络模型训练网络模型1)基于VOC2007数据集训练模型由于train.py文件默认参数用于训练VOC数据集,直接运行train.py即可开始训练。2)基于自己的数据集训练模型训练的参数均在train.py文件中,最重要的部分是其中的class_path参数,此参数用于放置指向检测类别所对应的txt,当训练自己的数据集时必须要修改。训练多个epoch后,权值会生成在logs文件夹中。6.4.4测试网络模型测试网络模型1)使用预训练权重训练模型需要耗费大量时间,若硬件设备不支持训练,可以使用预训练好的权重文件(文件地址见完整代码文件夹中Readme)。下载完成后把权重文件放入model_data文件夹,运行predict.py,输入想要测试的图像,过程如下所示:predict.py运行结果:6.4.4测试网络模型输入想要预测的图像如图6-21。模型运行结果如图6-22所示。图6-21

输入预测图像图6-22

模型输出结果6.4.4测试网络模型2)使用自己训练的权重当训练结束后,生成的权重模型会保存在logs文件夹中,在yolo.py文件中,需要修改model_path和class_path使其对应训练好的文件;model_path对应logs文件夹下面的权值文件,class_path是model_path对应分的类。设置完成上述路径后,运行predict.py文件,按1)中步骤操作即可。6.4.5网络模型评估网络模型评估1)基于VOC2007数据集评估模型本教程中使用的VOC2007数据集已经划分好测试集,无需利用voc_annotation.py生成ImageSets文件夹下的txt文件。在yolo.py里面修改model_path以及classes_path。model_path指向用VOC2007数据集训练好的权值文件,在logs文件夹里。classes_path指向检测类别所对应的txt。6.4.5网络模型评估运行get_map.py即可获得模型在测试集中的评估结果,评估结果会保存在map_out文件夹中。map_out文件夹中包含在测试集中的评估结果,包括loss值的变化曲线等,具体运行结果如图6-23所示。图6-23

运行结果图6.4.5网络模型评估2)用自己的数据集评估模型本文使用自己搭建的VOC格式数据集采进行模型评估。在训练前已经运行过voc_annotation.py文件,代码会自动将数据集划分成训练集、验证集和测试集。如果想要修改测试集的比例,可以通过修改voc_annotation.py文件下的trainval_percent指定(训练集+验证集)与测试集的比例,利用voc_annotation.py划分测试集后,前往get_map.py文件修改classes_path,classes_path用于指向检测类别所对应的txt,这个txt和训练时类别的txt一致。最后在yolo.py中调整model_path和classes_path的设置。运行get_map.py即可获得评估结果,结果将保存在map_out文件夹中。本章小结本章介绍了目标检测中的一些基础概念和发展过程,并指导读者如何运行目标检测代码。第7章人脸识别7.1概述7.2人脸识别常用方法介绍7.3人脸识别的实现7.1概述人脸识别技术的研究与应用发展历程:20世纪60年代末,人脸识别技术开始得到广泛研究近年来,众多国内外院校、研究所及企事业单位投入大量研究,获得国家资金支持,成为热门研究领域技术重要性:生物特征识别领域的关键技术跨学科促进作用:对其他学科也产生了积极影响7.2人脸识别常用方法介绍人脸识别常用方法介绍随着计算机视觉与深度学习的迅速发展,相关研究人员与开发者也提出了许多关于人脸识别实现的方法。但人脸识别技术的关键步骤大体一致,人脸识别的流程图如下图7-1所示。图7-1人脸识别流程图7.2人脸识别常用方法介绍1、图像预处理在很多计算机视觉项目中,往往需要进行图像的预处理操作。这主要是因为输入的图像常存在不合规范的地方,甚至会干扰系统的后续工作。如图像带有噪声,或者图像尺寸不符合系统要求等,这些都是预处理这一步需要做的事。而对应的处理方法可以是对图像进行滤波等操作,从而使图像更加符合系统的要求。2、人脸检测人脸检测就是用来判断一张图像中是否存在人脸的操作。如果图像中存在人脸,则定位该人脸在图像中的位置;如果图像中不存在人脸,则返回图像中不存在人脸的提示信息。对于人脸识别应用,人脸检测可以说是必不可少的一个重要环节。人脸检测效果的好坏,将直接影响整个系统的性能优劣。7.2人脸识别常用方法介绍1、图像预处理在很多计算机视觉项目中,往往需要进行图像的预处理操作。这主要是因为输入的图像常存在不合规范的地方,甚至会干扰系统的后续工作。如图像带有噪声,或者图像尺寸不符合系统要求等,这些都是预处理这一步需要做的事。而对应的处理方法可以是对图像进行滤波等操作,从而使图像更加符合系统的要求。2、人脸检测人脸检测就是用来判断一张图像中是否存在人脸的操作。如果图像中存在人脸,则定位该人脸在图像中的位置;如果图像中不存在人脸,则返回图像中不存在人脸的提示信息。对于人脸识别应用,人脸检测可以说是必不可少的一个重要环节。人脸检测效果的好坏,将直接影响整个系统的性能优劣。7.2人脸识别常用方法介绍3、人脸校正人脸校正又可以称为人脸矫正、人脸扶正、人脸对齐等。图像中的人脸图像往往都不是“正脸”,有的是侧脸,有的是带有倾斜角度的人脸。这种在几何形态上似乎不是很规整的面部图像,可能会对后续的人脸相关操作造成不利影响。人脸校正是对图像中人脸图像的一种几何变换,目的是减少倾斜角度等几何因素给系统带来的影响。因此人脸校正一般也被认为就是对人脸图像的几何归一化操作。4、人脸特征点定位人脸特征定位是指在检测到图像中人脸位置之后,在图像中定位能代表图像中人脸的关键位置点。常用的人脸特征点是由左右眼、左右嘴角、鼻子这5个点组成的5点人脸特征点,以及68点人脸特征点等。7.2.1特征脸法下面是几种主流的人脸识别方法。1.特征脸法特征脸法是一种相对“古老”的人脸识别算法,该算法进行人脸识别的依据是特征脸(eigenface)。特征脸法的核心算法是PCA算法,这是一种线性降维算法。我们知道,图像数据、文本数据等非结构化数据其实是具有很高维度的数据,以64×64像素的RGB图像为例,该图像的维度可以达到64×64×3=1228维,而实际上该图像的大小很小。直接对高维度数据进行操作,这本质上就是很困难,也不能作为具有典型意义的特征。7.2.2OpenCV方法2.OpenCV方法OpenCV是一个非常强大的计算机视觉库,使用该库可以实现人脸的检测与识别。OpenCV库在人脸识别阶段可以使用自带的Haar级联分类器,该分类器是使用Haar特征提取并识别图像特征的人脸检测方法。其主要思路如下。1)使用一个检测窗口在图像上滑动并提取图像特征。2)使用分类器判断人脸。3)如果存在人脸则返回人脸坐标,不存在则重复之前的步骤。4)当图像区域全部扫描完毕后结束检测。7.2.2OpenCV方法Haar特征又称Viola-Jones识别器,是目标识别中常用的方法。由PaulViola和MichaelJones最先应用于人脸识别部分。Haar特征通过不同行的矩形特征来对图像进行特征的提取,最后筛选出比较具有代表性的特征进行分类器的分类。Haar特征反应的是图像的灰度变化,是将像素分模块运算差值的一种特征方法。该特征主要分为以下几类:边缘特征、线性特征、中心特征和对角特征。其中边缘特征可分为4种(x方向、y方向、x倾斜方向、y倾斜方向);线性特征可分为8种;中心特征可分为2种;对角特征仅有1种。如图7-3所示为Haar特征常用的特征模板。图7-2Haar特征模板7.2.2OpenCV方法Haar特征描述特点:利用边缘特征和线性特征模块描述脸部特征自由变换:平移、放大、旋转应用示例:眼部区域比脸颊深色,鼻梁比两侧亮优势:计算速度较快,比传统像素点方法更

温馨提示

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

评论

0/150

提交评论