240927深度学习笔记

本周要进行了深度学习中目标检测相关内容的学习

学习时间

2024.09.21—2024.09.27

学习内容

目标定位

特征点检测

目标检测

卷积的滑动窗口实现

边界框预测

交并比

非极大抑制

锚框

YOLO算法

主要内容

目标定位

我们要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来,这就是定位分类问题。其中“定位”的意思是判断汽车在图片中的具体位置。

图片左上角的坐标为(0,0),右下角标记为(1,1)。要确定边界框的具体位置,需要指定红色方框的中心点,这个点表示为(𝑏𝑥,𝑏𝑦),边界框的高度为𝑏,宽度为𝑏𝑤。因此训练集不仅包含神经网络要预测的对象分类标签,还要包含表示边界框的这四个数字,接着采用监督学习算法,输出一个分类标签,还有四个参数值,从而给出检测对象的边框位置。

这有四个分类,神经网络输出的是这四个数字和一个分类标签,或分类标签出现的概率。目标标签𝑦 的定义如下:
y=\begin{pmatrix} pc\\ bx\\ by\\ bh\\ bw\\ c1\\ c2\\c3 \end{pmatrix}

这是图片中只有一个检测对象的情况,如果图片中没有检测对象呢?如果训练样本是这样一张图片呢?

这种情况下,𝑝𝑐 = 0𝑦的其它参数将变得毫无意义,这里我全部写成问号,表示毫无意义”的参数,因为图片中不存在检测对象,所以不用考虑网络输出中边界框的大小,也不用考虑图片中的对象是属于𝑐1𝑐2𝑐3中的哪一类。针对给定的被标记的训练样本,不论图片中是否含有定位对象,构建输入图片𝑥和分类标签𝑦的具体过程都是如此。这些数据最终定义了训练集。

特征点检测

假设你正在构建一个人脸识别应用,出于某种原因,你希望算法可以给出眼角的具体位置。眼角坐标为(𝑥, 𝑦),你可以让神经网络的最后一层多输出两个数字𝑙𝑥𝑙𝑦,作为眼角的坐标值。如果你想知道两只眼睛的四个眼角的具体位置,那么从左到右,依次用四个特征点来表示这四个眼角。对神经网络稍做些修改,输出第一个特征点(𝑙1𝑥𝑙1𝑦),第二个特征点(𝑙2𝑥𝑙2𝑦),依此类推,这四个脸部特征点的位置就可以通过神经网络输出了。

具体做法是,准备一个卷积网络和一些特征集,将人脸图片输入卷积网络,输出 1 0,1 表示有人脸,0 表示没有人脸,然后输出(𝑙1𝑥𝑙1𝑦……直到(𝑙64𝑥𝑙64𝑦)。这里我用𝑙代表一个特征,这里有129 个输出单元,其中1表示图片中有人脸,因为有64个特征,64×2=128,所以最终输出 128+1=129 个单元,由此实现对图片的人脸检测和定位。

目标检测

假如你想构建一个汽车检测算法,步骤是,首先创建一个标签训练集,也就是𝑥𝑦表示适当剪切的汽车图片样本,这张图片(编号 1𝑥是一个正样本,因为它是一辆汽车图片,这几张图片(编号 23)也有汽车,但这两张(编号 45)没有汽车。出于我们对这个训练集的期望,你一开始可以使用适当剪切的图片,就是整张图片𝑥几乎都被汽车占据,你可以照张照片,然后剪切,剪掉汽车以外的部分,使汽车居于中间位置,并基本占据整张图片。有了这个标签训练集,你就可以开始训练卷积网络了,输入这些适当剪切过的图片(编号 6),卷积网络输出𝑦0 1 表示图片中有汽车或没有汽车。训练完这个卷积网络,就可以用它来实现滑动窗口目标检测。

假设这是一张测试图片,首先选定一个特定大小的窗口,比如图片下方这个窗口,将这个红色小方块输入卷积神经网络,卷积网络开始进行预测,即判断红色方框内有没有汽车。

滑动窗口目标检测算法接下来会继续处理第二个图像,依次重复操作,直到这个窗口滑过图像的每一个角落。

重复上述操作,不过我们可以选择一个更大的窗口,截取更大的区域,并输入给卷积神经网络处理,你可以根据卷积网络对输入大小调整这个区域,然后输入给卷积网络,输出 0或 1。然后第三次重复操作,这次选用更大的窗口。如果你这样做,不论汽车在图片的什么位置,总有一个窗口可以检测到它。

卷积的滑动窗口实现

滑动窗口的实现过程,在图片上剪切出一块区域,假设它的大小是 14×14,把它输入到卷积网络。继续输入下一块区域,大小同样是 14×14,重复操作,直到某个区域识别到汽车。但是正如在前一页所看到的,我们不能依靠连续的卷积操作来识别图片中的汽车,比如,我们可以对大小为 28×28 的整张图片进行卷积操作,一次得到所有预测值,如果足够幸运,神经网络便可以识别出汽车的位置。

边界框预测

在目标检测中,我们通常使用边界框(bounding box)来描述对象的空间位置。 边界框是矩形的,由矩形左上角的以及右下角的x和y坐标决定。 另一种常用的边界框表示方法是边界框中心的(x,y)轴坐标以及框的宽度和高度。

在图像上添加边界框之后,我们可以看到两个物体的主要轮廓基本上在两个框内。

交并比

交并比:IOU=(A∩B)/(AB)

对于两个边界框,它们的杰卡德系数通常称为交并比(intersection over union,IoU),即两个边界框相交面积与相并面积之比,如图所示。 交并比的取值范围在0和1之间:0表示两个边界框无重合像素,1表示两个边界框完全重合。

非极大抑制

当你运行算法的时候,最后可能会对同一个对象做出多次检测,所以非极大值抑制做的就是清理这些检测结果。这样一辆车只检测一次,而不是每辆车都触发多次检测。

首先看概率最大的那个,这个例子(右边车辆)中是 0.9,然后就说这是最可靠的检测,所以我们就用高亮标记,就说我这里找到了一辆车。这么做之后,非极大值抑制就会逐一审视剩下的矩形,所有和这个最大的边框有很高交并比,高度重叠的其他边界框,那么这些输出就会被抑制。所以这两个矩形𝑝𝑐分别是 0.6 0.7,这两个矩形和淡蓝色矩形重叠程度很高,所以会被抑制,变暗,表示它们被抑制了。

非最大值意味着你只输出概率最大的分类结果,但抑制很接近,但不是最大的其他预测结果,所以这方法叫做非极大值抑制。

锚框

我们建立 anchor box 这个概念,是为了处理两个对象出现在同一个格子的情况,实践中这种情况很少发生,特别是如果你用的是 19×19 网格而不是3×3 的网格,两个对象中点处于 361 个格子中同一个格子的概率很低,确实会出现,但出现频率不高。也许设立 anchor box 的好处在于anchor box 能让你的学习算法能够更有征对性,特别是如果你的数据集有一些很高很瘦的对象,比如说行人,还有像汽车这样很宽的对象,这样你的算法就能更有针对性的处理,这样有一些输出单元可以针对检测很宽很胖的对象,比如说车子,然后输出一些单元,可以针对检测很高很瘦的对象,比如说行人。

人们一般手工指定 anchor box 形状,你可以选择 5 10 anchor box 形状,覆盖到多种不同的形状,可以涵盖你想要检测的对象的各种形状。

YOLO算法

YOLO,即You Only Look Once,是一种基于深度学习的实时目标检测算法,其核心理念在于将目标检测任务转化为一个单一的回归问题,从输入图像直接预测目标的类别和边界框。

具体来说,YOLO模型将输入图像划分为S×S的网格,每个网格单元负责预测多个边界框及其对应的类别置信度,模型的输出是一系列边界框、类别标签以及对应的置信度分数。YOLO通过一次性处理整个图像,生成所有目标的检测结果,这种方法显著提高了检测速度。

输入与输出:YOLO的输入通常是一个固定尺寸的图像(例如416×416像素),而输出则是一个包含边界框坐标、类别标签和置信度的张量。每个网格单元预测多个边界框,并为每个边界框生成一个置信度分数和类别预测。
网络架构:YOLO的核心架构是一个卷积神经网络(CNN),通常包括多层卷积、池化和全连接层。YOLOv1使用了一个简单的卷积网络,而后续版本(如YOLOv3、YOLOv4)则引入了更复杂的特征提取器(如Darknet-53、CSPNet)以提高检测精度。

如果你现在要训练一个输入为 100×100×3 的神经网络,现在这是输入图像,然后你有一个普通的卷积网络,卷积层,最大池化层等等,最后你会有选择卷积层和最大池化层,这样最后就映射到一个 3×3×8 输出尺寸。所以你要做的是,有一个输入𝑥,就是这样的输入图像,然后你有这些 3×3×8 的目标标签𝑦。当你用反向传播训练神经网络时,将任意输入𝑥映射到这类输出向量𝑦。

这里有3*3个格子,最后每个格子都有一个对应的标签,该标签代表该格子中的边界框预测和类别预测,最后通过与真实值计算损失函数,并且进行优化来达到训练效果,例子中的方法仅适用于每个格子中仅有一个物体,如果需要在一个格子中预测多个物体,则需要定义多种锚框来实现。

如果不同格子给同一个预测对象生成多个边界框,则需要通过非极大抑制的方法清理这些预测结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值