Advertisement

吴恩达深度学习之卷积神经网络(三)目标检测

阅读量:

1、目标定位

我们要做的任务:

1、检测出图片中的物品。(检测)

2、检测出图片中的物品,并且用框框标出。(定位检测)

3、检测出图片中所以需要检测的目标,并且标注。(所有目标定位检测)

(1)检测,如下,把softmax分为四类(行人,汽车,摩托车,背景图)

(2)定位

为了提取图像中的红色框边界框坐标bx, by, bh, bw的操作流程如下:首先,在数据集中创建一个包含检测目标的标注项;其次,在该标注项中不仅要在图像上标出检测到的目标位置(即(bx, by)表示目标中心点),还需附加一组数值参数(bh代表目标高度,bw代表目标宽度)。操作步骤如下:第一步,在图像处理模块中完成图像分割任务;第二步,在分类模型输出结果中识别并分离出人像、车辆、摩托车及背景区域;第三步,在分类结果的基础上附加相应的边界框坐标参数(boundingbox)以完成完整的特征提取过程。

关于怎么检测细节如下:

说明:

每个输入图像的标签设为y变量,并包含8个数值参数:包括位置编码(bx, by)与尺寸编码(bh, bw),以及分类编码(pc)与多标签(c1-c3)。其中位置编码字段用于标记图像中是否存在物体:当位置编码值设为1时,则表示图像中含有行人、车辆或摩托车;而位置编码值设为0则表明图像中没有检测到任何物体。此外,在分类编码字段(c1-c3)中分别标识目标类型:例如,在目标为行人的场景下,则有:位置编码值设为1且分类字段中的第一个元素设为真;而若为目标车辆,则可能对应不同的配置参数设置。

在训练过程中如何计算损失函数:若pc值为1,则可将全部8个数值代入并采用平方运算;而当pc值为0时,则主要关注其精确度并无需考虑其余7个参数的影响,在这种情况下亦可将pc代入并采用平方运算以完成计算。

实际上我们可以采用逻辑回归来处理pc参数(即c1、c2、c3),而bx、by、bh和hw上的损失函数通常采用平方误差等类似的方法进行计算。

2、特征点检测

目标检测我们可以用1中的方法,我们还可以特征点检测。

如,在人脸识别中,我们可以通过64个点来标记人脸特征。例如,在眼睛部位可用四个点标记眼角;眉毛也可被标记;若需进一步细化分析,则可通过眉毛位置判断是皱眉还是弯眉;这样设置后会形成总计128+1=129个特征点;其中图片中是否有人脸则以face进行标注(0表示无脸象、1表示有脸象)。

我们还可以用特征点去判断运动员的姿态等等。

3、目标检测

目标检测算法 本节主要讲解利用卷积神经网络进行目标检测。同时主要基于滑动窗口的目标检测方法。

我们从训练集中提取出图片样本,并对其进行分类处理。如前所述,在此之后将上述分类后的样本输入至卷积神经网络中进行参数优化。

在待检测图像序列中依次滑动该预训练网络模型(如图所示)。该系统的效果等价于将待检测图像按顺序逐个推送到预先训练好的卷积神经网络中,并根据其输出结果判断是否存在目标物体(若检测框内存在目标物体,则输出标记值y=1;反之,则y=0)。

滑动窗算法的优势在于原理简明且操作便捷,在实际应用中具有较高的推广价值。然而该方法存在明显局限性:首先需要人工设定滑动窗的尺寸和步长间隔;若选择较小或较大的窗口尺寸,并配合过宽的步长设置,则会导致检测精度下降;此外每一次滑动窗口都会进行一次CNN网络计算过程,在保证检测精度的前提下这一特点也限制了其应用范围;最终这种算法设计必然导致整体目标检测的时间显著延长。

4、卷积的滑动窗口实现

相关知识:

上述操作为用卷积替代全连接层和softmax层。在本例中,卷积层与全连接层表现出相同的效果。具体而言,在第一种方案中,采用了四个同样大小(5×5×16)的卷积核;在第二种方案中,则采用了四个同样大小(1×1×4)的可学习权重矩阵;第三种方案仅使用了四个同样大小(1×1×4)尺寸的小矩阵来实现类似的处理效果。

如上所述,在建立第一个卷积层后,在识别16x16x3的图像时,在采用步长为2的操作下,则无需将图像分割成四个部分逐个处理;仅需对该图像执行卷积操作即可得到一系列的识别结果。

基于先前的滑动窗口机制,在实际应用中通常需要反复执行CNN正向传播操作来处理不同尺寸的图像数据。具体而言,在16×16×3尺寸的图像中需要执行4次正向传播,在28×28×3尺寸的图像中则需要执行更多次数(共执行)。然而通过采用卷积操作替代传统的滑动窗口方法,则无论输入图像尺寸如何变化均只需执行一次CNN正向传播过程(这是因为这种机制能够最大化地重用中间计算结果而不产生冗余计算)。从而显著降低了运算开销。

5、Bounding Box预测

滑动窗口机制下的卷积计算在处理速度上显著提升,在现有方法中存在一定局限性,在本节中我们将介绍如何获得最精确的边界框设定

参考上图,在滑动过程中若选择红色边框最为理想。然而偶尔由于操作不当或是边框尺寸不匹配等情况,在进行小车检测时最佳状态往往对应于上图中蓝色区域。这会显著影响检测的准确性。

如何解决该问题:使用YOLO算法

YOLO算法:

我们把数据集分为网格形式,如下:

以下是改写后的文本

pc取值为0或1取决于该绿色单元格内是否存在图像。随后bx、by、bℎ与bw各自的作用在于:当单元格内存在目标时,则提供对应的边界框坐标信息。接着定义了三个分类标记:c1用于背景区域不计入考虑的情况下的行人识别(标记号1),以及分别对应汽车(标记号2)与摩托车(标记号3)。此图中共包含9个单元格,在每一个单元格中都存在相应的向量描述。

通过观察左方的上方单元格,在编号为1的位置内部没有任何内容的情况下, 我们可以得出结论: 左上方单元格的标签向量y等于.

接着来说,在第一个格子里标记为y的情况下,在第二个格子里也同样如此;第三个格子以及所有没有内容的格子也都遵循同样的规则。

就位于该标记位置(编号4)的目标标签即为以下信息:在该区域中存在一个物体pc=1,并通过bx、by、bh和bw四个参数来确定边界框的位置。其中:

  • 类别1对应的是行人类型,则其分类信息c₁=0;
  • 类别2对应汽车类型,则其分类信息c₂=1;
  • 类别3对应摩托车类型,则其分类信息c₃=0;
    对应的分类信息如下:
    y值为:

右边这一格(编号6)同样呈现类似情况:因为这里确实存在一个对象,并且其向量应当呈现出这样的形态。

在该区域的任意一个9个小方块里,在经过特定处理后都会得到一个包含8个元素的一维向量表示;这是因为该区域是由三个行和三个列组成的二维网格构成的;因此最终的输出结果应设定为三维数组形式:(高度 × 宽度 × 输出通道数),即具体数值为(3 × 3 × 8);由于每个单元格都对应着独立于其他单元格的一组特征信息(即每个单元格内都有一个长度为8的一维向量y),因此最终的输出维度应定为(高度 × 宽度 × 输出通道数),即具体数值为(3 × 3 × 8)

在这个实例中,在左上方的那个1x1x8区域对应着9个位置上的左上方单元格对应的输出向量。因此,在每一个3x3的位置上,在每一个这样的区域都会有9个位置上的单元格都有一个8维的目标向量y。其中一些值可能是don’t-care(如?),如果这里没有对应的物体的话。因此该图片的整体标签大小为3x3x8.

具体来说, 该数据集的标签具有 (3×3×8) 的维度结构; 同样地, 这也是我们所关注并需要实现的向量维度; 为了达到这一目标, 我们将采用卷积操作来完成这一任务。

为了训练一个输入维度为100×100×3的神经网络,在深度学习框架中对其进行构建时 首先需要考虑的就是如何将这一特定尺寸的数据作为初始输入 这种数据通常代表的是图像信息 接下来需要构建一个常规的卷积神经网络架构 包括卷积层 和最大池化层等组件 最终输出会是这样一个结构:通过选择卷积和下采样操作 最终输出会是这样一个结构:从而得到一个输出维度为3×3×8的空间特征图 因此 在反向传播过程中 将任何给定的样本x 映射至相应的输出向量y

输入图像经过处理后具有...这些3×3×8的目标标签 y。在反向传播训练神经网络的过程中, 输入 x 将被映射到相应的输出向量 y 中。

该算法的优势体现在神经网络能够生成精确的边界框,在测试阶段你需要将输入图像x输入系统并执行前向传播过程直至获得输出y。对于这9个输出结果,在输出中已经展示过的信息中你可以识别出哪些位置存在目标(即编号为1的位置),这些目标具体是什么(即编号为3的位置),以及它们在格子中的边界框位置(即编号为2的位置)。只要每个格子中的物体数量不超过1个,则该算法能够有效识别目标及其边界框;如果同一格子内存在多个物体,则需要进一步处理。然而,在实践中我们通常采用相对较小的3×3网格,在实践中你可能会使用更为精细的19×19网格来提高识别精度(如上文所述),这样得到的结果将是大小为19×19×8的空间分布图(如图所示)。这种更为精细的设计使得在同一格子内分配多个物体的概率显著降低

再说一遍,将对象分配至一个格子的过程是怎样的呢?你只需要观察对象的中心点位置即可确定它所属的具体区域。具体来说,在3×3网格中每个单元对应的是一个独立的格子,在这种情况下,在两个对象的中心点(图中标记为蓝色的小圆点)位于同一网格的概率会更低。同样地,在采用19×19网格的情况下,在两个对象的中心点(图中标记为蓝色的小圆点)位于同一网格的概率会更低。

需要注意的是,在之前的知识中提到过类似的场景:该方法明确地输出了边界框坐标,在神经网络中能够输出边界框,并且这些边界的尺寸可以是任意比例的。此外,在计算过程中我们采用了一种高效的策略:虽然理论上在3×3网格上运行卷积操作需要9次计算,在19×19网格的情况下则需要进行361次运算(因为19²=361),但我们的方法仅需单次卷积操作即可完成所有相关计算步骤。

YOLO算法确实具有一个显著的优势,并因此成为计算机视觉领域中的热门算法之一。它采用卷积神经网络的架构设计,在实际应用中表现出极快的运行速度并实现了实时物体检测能力。在结束前我想与大家分享一个编码技巧,在后面的内容中我会详细讲解如何编码这些边界框参数bx、by、bℎ和bw等技术细节。

本节主要阐述了YOLO算法在目标分配方面的挑战及其解决方案。具体阐述了YOLO算法如何处理目标定位过程中的各种约束条件以及相应的优化策略。在训练阶段所采用的标注方式决定了模型对目标区域的描述精度。输入到网络进行处理的数据图像经过预处理后形成了用于检测的目标特征图。输出层需要预测的空间信息维度设置直接影响着最终检测结果的质量水平。在此基础上展开详细说明:

在YOLO算法中,默认情况下将方框(编号1标注)左上角坐标设为(0,0),右下角坐标设为(1,1)。根据定义,在该方框内需确定目标物体中心点位置参数bx和by值:bx值大约为0.4(因为其位于水平方向占总格子宽度的大约40%),by值约为0.3(位于垂直方向占约30%)。边界框的高度通常采用格子高度比例来表示,则红框的高度可能达到约90%(如图2所示蓝线的比例)。因此边界框高度bh设定为约95%,宽度bw设定为52%,即bh=0.95、bw=0.52。需要注意的是,在YOLO算法中所有边界框参数均基于单元格尺寸进行归一化处理:bx和by必须位于[0,1]区间内(因为目标物体中心点必须落在单元格范围内),而bh和bw可能出现超出[0,1]范围的情况(例如一辆汽车占据较大空间时如图3所示)。

边界框的参数化方法多种多样,在当前研究中一种合理的设定是将bx和by的值限定在0到1之间,在这种情况下通过指数函数确保bh和bw为非负值。为了便于理解与应用,我这里给出了一种较为基础的方法设定:bx=ln(w_x)/ln(2),by=ln(h_y)/ln(2),其中w_x与h_y分别代表宽度与高度的比例系数,并且必须满足w_x≥0、h_y≥0的要求。当然,在实际应用中还可以采用其他更为复杂的参数化策略,在这种情况下可能会有更好的效果。不过对于本问题而言,上述方法已经足够实用并能达到预期的效果

6、交并比

用于如何评判目标检测算法运用良好

如何判断对象检测算法运行良好?请看本节内容,在此过程中,请您了解交叉验证函数及其在评估目标检测算法中的作用。接下来,在下一节内容中,请您期待引入这一工具以补充改进检测系统的功能。

在目标检测任务中,你希望同时实现目标定位功能。因此,在实际应用中若已知边界框为如下形式,则你的算法输出一个紫色标记的目标边界框是否符合预期?此处采用交并比(loU )函数作为评价标准。该函数通过计算两个目标框重叠区域与整体包围区域的比例来衡量检测效果。具体而言,在这种情况下这两个目标框的整体包围区域构成了这样一个范围(绿色阴影表示该范围),而它们的重叠部分则是一个较小的部分(橙色阴影表示)。因此,在这种情况下交并比即为重叠部分与整体包围区域的比例:即其中重叠的部分除以整个包围区域的总面积。

通常设定,在计算机检测系统中,默认情况下认为当LOU值达到或超过0.5时即判定为检测正确。当预测框与真实边界框完全吻合时,则称该系统的LOU值为1(因为交集部分等于并集范围)。然而,在大多数情况下只要LOU值达到或超过0.5即可被认为具有可接受的表现(表现尚可)。通常情况下,默认将LOU值设定为0.5作为判断基准(这种设定通常是通用的)。如果希望提高系统的严格度,则可以将LOU阈值提高至更高的水平(例如大于0.6),不过需要注意的是随着LOU数值上升其边界框定位会更加精确。

此乃评估定位精度的一种方法。要实现这一目标,请统计算法正确检测与定位对象的数量之和,并以此指标作为判断目标定位准确性的重要依据。再次强调,在这种情况下其数值设定为人为标准(即缺乏坚实的理论基础支撑),如需更加严格,则可将其设定为更高的阈值(例如将阈值定为1)。然而,在实践中我们通常会遇到较为保守的观点(即很少有人将阈值降至低于1)。

该指标用于评估物体定位算法的定位精度;然而,在更广泛的语境下来说,该指标衡量的是两个边界框之间的相对重叠程度。具体来说,在面对两个边界框时,请计算它们的交集区域与并集区域的面积比值即可得到其相对重叠程度;进一步而言,在后续内容中我们将多次提及这一指标,并在非极大值抑制的相关讨论中也会再次涉及它。

这指的是"loU"这一术语的含义。切记不要将其与常见的"欠债"概念相混淆。具体来说,在金融交易中使用该术语时需要特别注意其特定含义:当一方需要将款项用于另一方的交易时(如支付服务费用),他们会要求对方提供一张收据,并注明:"我已获得你的这么多资金(I have obtained this much of your money)。"这一用法被称为"loU"。请注意区分这一术语与其他可能具有相同名称的概念存在差异。由于名称相同而容易引起混淆的问题需特别注意处理。

在介绍完loU 交并率的基础上,在下一个视频中我想探讨非最大值抑制(NMS技术),这一工具有助于提升YOLO算法的输出质量,在后续计划中我们继续。

7、非极大值抑制

在你们所学的对象检测中存在一个问题:算法可能会在同一物体上产生多次检测结果。具体来说,在目标位置较为接近的情况下,
每个网格单元都有可能推断自身内部包含目标中心点,
这本质上是一个概率事件,
其预测结果受到阈值设置的影响,
因此导致多个中心点被识别出来,
从而出现了重影现象。
这种多输出的结果显然会影响最终的准确性。
为了防止这种情况发生,
非极大值抑制这一技术能够确保算法对于每一个物体仅进行一次检测。

为了在图像中检测行人与车辆的存在,在此场景下可能会采用将该区域划分为19\times 19的小网格单元的方式进行处理。根据理论分析,在车辆中心位置处仅有一个中点坐标,则该车辆应被分配至单一对应的网格单元内;同样地,在左侧区域内的车辆也将具有唯一的中心坐标位置,并相应地被分配至对应的网格单元内。这样的设计能够满足预期的需求。

在执行对象分类与定位算法的过程中,在每一个网格单元中都会进行一次运算操作。因此,在这个特定网格单元(标记为1号网格),系统会推断出车体中心点应位于其内部区域;而与之相邻的网格单元2号和3号也会做出类似的判断;同样地,在左侧区域中的车辆也会遵循相同的逻辑推断机制;即使对于已经见过的图像,在之前观察到过具有车辆特征的网格单元4号也会作出同样的推断;此外,在6号网格和其他未被特别标注的网格单元也可能存在类似的情形:它们会基于自身计算出的概率值来确定是否在其对应的网格区域内存在车辆特征;具体而言,在这种算法下,默认情况下每个网格单元都有一个概率值用于预测自身区域内是否存在车辆特征;如果某个网格单元的概率预测值达到0.6,则表明系统对该区域存在车辆特征的可能性较高;同理,在概率值为0.7或0.8的情况下,则进一步增强了该区域被判定为含有车辆特征的信心。

让我们逐步阐述非极大值抑制是如何发挥作用的。由于要在361个网格上依次运行图像检测与定位算法,在这种情况下可能会有许多网格声称它们内部含有车辆。其中每个网格判断自身含有车辆的概率较高,并不是所有网格仅报告一个目标。因此,在执行该算法时,请注意可能出现同一目标被多次探测到的情况。为此,请记住非极大值抑制的作用就是清理这些冗余结果。

具体而言, 该算法的作用在于首先计算每个检测结果对应的概率值 pc, 在编程练习中提供更多背景信息, 其实是将 pc 分别与 c1、c2 或 c3 相乘的结果. 换句话说, 我们需要关注具有最高概率的那个实例, 在这个场景中其值达到了 0.9, 这意味着这是一个非常可靠的检测结果. 因此我们选择将该实例进行突出显示边界框. 接下来, 非极大值抑制机制会对剩余的矩形框逐一进行审查: 对于那些与最大边界框交叠程度较高 (高度重叠) 的矩形框, 即使其 pc 值分别为 0.6 和 0.7 的情况, 也会被抑制并降低可见度以避免误检.

接下来,我们逐一检查剩余的矩形框,在满足条件(概率值最大且pc值最高)的情况下选取一个目标框(此处概率值为0.8),随后应用非极大值抑制算法以去除其他高分loU候选框。经过这一处理步骤后,在图像中每个矩形框都会被赋予高亮显示或降低亮度。若选择将亮度较低的矩形框移除,则最终保留的将是两个高质量的预测结果框。

因此这种方法被称为非极大值抑制法。而非最大值则表明你仅输出概率最高的分类结果。尽管如此,在某些情况下这些预测可能与最高概率的结果存在差异。因此这种方法通常被称作非极大值抑制法。

让我们深入探讨该算法的核心机制。在该网络结构中,在一个包含多个卷积层的设计下,在经过一系列特征提取操作后,在该网络结构中,在经过池化操作后,在经过池化操作后,在经过池化操作后

在应用非极大值抑制时,请首先执行第一步操作:移除所有边界框。具体而言,在筛选出所有预测结果后,在这些结果中剔除那些其对应的概率置信度pc低于设定阈值(例如设为0.6)的边界框。

剩下的未被处理的边界框不丢弃未处理的继续选择概率pc最高的边界框将其输出为预测结果这一过程类似于上一张幻灯片中选取一个边界的并使其突出显示这样就能确认系统会做出一辆车的预测

接下来去除所有剩下的边界框(boundary\_frames),任何没有达到输出标准的边界框(unprocessed\_frames),之前没有抛弃的边界框(remaining\_frames),将这些与输出标准边界框存在高重叠面积(overlap_area)且与上一步输出结果边界框存在很高交并比(intersection_over_union)的边界框全部移除(discard)。因此while循环的第二步是将上一张幻灯片变暗(dimmed_slide)的状态下的那些边界框(dimmed\_frames),以及与高亮标记(highlighting_markers)边界框存在高重叠面积并具有很高交并比(high intersection-over-union, IOU)的所有边界框从当前列表中移除掉。在仍有未被处理的边界框时一直执行此操作直到所有未被处理的边界框都被处理完毕为止(until all boundaries are processed)。此时会得到一些作为最终结果保留下来的边界框(finalized_frames),而那些与这些结果存在过高的重叠程度或交并比的对象也会被丢弃掉。(discarded_objects)

在当前展示的幻灯片上,我仅阐述了针对单一目标的检测方法.假设你同时处理三个不同类别(如行人、汽车和摩托车),则输出向量将增加三个新的维度.经过验证,在独立处理每个类别时应用非极大值抑制是正确的做法.不过这个细节将在本周的编程练习中详细讲解.你可以自行实现这一过程,并建议我们也可以探索在多目标检测中应用非极大值抑制的可能性.

这就是非极大值抑制(NMS),如果你已经掌握过相关对象检测算法的基本原理和实现方法,则可以预期获得相当不错的检测效果。然而,在介绍完YOLO算法之前,请容我再多分享一个关键点——即锚框(anchor box)的概念,在后续视频中将为您详细讲解这一优化思路。

8、Anchor Boxes

目前在目标检测领域中存在一个问题:每个单元格仅能识别单一物体。如果你希望单个单元格能够识别多个物体,请考虑采用anchor box这一技术。让我们通过一个具体的案例来理解这一技术。

假设有一张图片,在这个案例中我们将继续采用3×3网格结构,请注意观察行人中心与车辆中心几乎处于同一位置

,两者都落入到同一个格子中。所以对于那个格子,如果y输出这个向量y=

你能够识别这三类物体(即 行人 、 汽车 和 摩托车),该系统无法生成关于这些物体的检测结果;因此我必须在这两个检测结果中选择一个作为最终判断依据。

然而在一个格子中出现两个目标待检测时 操作起来较为不便 于是我们采用锚框(anchor boxes)来进行处理

该方法的核心在于通过预设的锚框模板来进行目标检测任务。如图所示,在每帧图像中先设定两类具有代表性的锚框模式(...),其中每种锚框对应特定类别目标的检测任务。将模型预测结果与设定的两类典型模式进行匹配分析。为了提高检测准确性通常会增加匹配模式数量,在当前场景中我们仅采用了两类典型模式作为匹配基准。

当引入两个锚框后( anchor \, box ),其标签也随之发生变化(如上图所示)。其中,“上面部分表示第一个锚框”,下面部分则表示第二个锚框。具体来说,“第一个锚框呈竖直方向”,呈现与人类似的形态;而“第二个锚框呈水平方向”,呈现与车辆类似的形态。因此,“我们将第一个锚框应用于行人检测任务中”,而将第二个锚框应用于车辆检测任务中。

你要做的是定义类别标签,用的向量不再是上面这个

,而是重复两次,

前面的

被标注为与之相关的左侧所圈定的是八个特征量;右侧圈出的是与之相关的另一个八个特征量;由于行人具有与上述左端矩形框相似的形态特征,则可以利用左端圈定区域中的八个数值作为编码依据

代表有行人,用

来编码包住行人的边界框,然后用

来说明这个对象是个行人。

接着是车辆部分,在选择锚框时发现车辆的边界框相较于anchor box 1 更贴近于anchor box 2 的形状特征后,则应采用这样的编码方式进行编译操作。具体来说,在这一过程中的第二个目标对象即为汽车相关的内容,并伴随着相应的边界框设置等步骤展开;此外,在整个操作过程中涉及的所有参数均与车辆检测相关的属性设置有关。

--------------------------------------------------------------------------------------------------------------

简而言之,在采用**锚框(Anchor Box)**之前,请考虑以下步骤:针对训练集中的每一个目标物体,在其中心点定位到相应的网格单元中。因此输出向量y具有维度为3\times 3\times 8的原因在于这是一个基于3\times 3网格的设计模型,在每个网格单元里都有一个对应的特征向量。该特征向量不仅包含置信度(confidence)值pc,并且还包含了用于描述边界框的四个参数bx、by、bw和bh。此外,在每个单元里还会附加三个类别标签c1、c2、c3来标识目标的不同类别信息。

在应用anchor box 这个术语时,在图像分割任务中我们采用以下方法:首先将每个目标对象均被分配至同一网格单元内,并将其中心位置对应的网格单元作为其归宿。此外,在处理图像数据时(每张图片都有对应的标注信息),我们会根据目标物体的实际形状确定最合适的 anchor box 区域。具体而言,在标注过程中我们发现:将 y 向量的上半部分指定给具有如图所示编号1红色框的目标形状(假设这种情况下使用的 anchor box 仅限于一种情况),而将 y 向量的下半部分则由另一种情况下的 anchor box 负责(其中一种情况是使用编号2紫色框表示box1的情况)。通过这种方式我们能够有效地将复杂的目标边界映射到相应的 anchor box 区域中。经过上述处理后输出的结果表明:输出向量 y 的维度变为 3×3×16 维(即 8 维乘以 4 维)。因此输出向量 y 的维度变为 3×3×16 维。如果你有更多对象,则 y 向量将呈现更高的维度

------------------------------------------------------------------------------------------------------------

具体例子:

所以我们来看一个具体的例子,对于这个格子(编号2),我们定义一下y:

行人的形状与锚框 1号极为相似,在行人的分类中我们将其归类至向量上半部分区域。确实存在一个物体标识符pc设为值为一,在其周围环绕着边界框包裹着行人的特征点若被分类为类别一则对应的数值标记c₁设值于一其余参数均为零(如图一所示的第一组颜色标注)。车辆的表现形态则更加贴近于锚框 2号因此在该区域剩余的部分我们将其置信度设为一并附加了与车辆相关的边界框标记此时对应的数值标记则变为c₂设值于一其余参数均为零(如图一所示的第一组颜色标注)。由此可得该区域对应的标签y其指向位置即位于第二个网格块中

0,????????1, bx, by, bh, bw, 0,1,0

0, ?, ?, ?, ?, ?, ?, ? ,1, bx, by, bh, bw ,0 ,1 ,0

如果一个格子中有车辆且无人行进时,在该区域仅包含一辆车辆的情况下,则假设其边界框呈现横向形态,则更接近于 anchor box 2 的分量保持不变。此时若行人离开,则对应的 anchor box 2 的分量仍然保持不变。因此 y 值应为【0、?、?、?、?、?、?、?、1、bx、by、bh、bw、0、1、0

关键的一句话是这样的:我们先规定不同类型的box形状,并根据这些形状去匹配y中的元素。例如,在这种情况下, 我们将y中的标签分为两部分:一部分用于与box1匹配, 另一部分则与box2匹配。完成这些步骤后, 我们依据交并比的原则对数据集进行分类标记。例如, 当一张图片中的某区域仅包含一个行人且其形态与box1相似时, 我们会在该区域设定如下标签【1, bx, by, bh, bw, 1, 0, 0,…

此外还有其他细节需要注意。如果你在同一单元格中有三个目标,则可能导致算法难以处理。你希望这种状况不会出现吗?但如果是真的出现了怎么办?这个算法对于这种情况并没有很好的解决方案。针对这种情况我们可能需要引入一些默认的解决方案来应对这些问题。另外一种情况是同一单元格中存在两个目标并且它们的anchor box形状完全一致这同样会影响算法的表现因此也需要采取相应的措施确保这类情况不会发生或者能够被有效处理你的数据集中这类情况的发生概率较低因此对整体性能的影响应该较为有限

这就是**锚框(anchor box)**的核心概念,在计算机视觉领域中我们通过建立这一概念来应对同一网格单元中可能出现多个目标物体的情况。实际上这种情形在使用19×19栅格时发生的概率较低;尽管偶尔会出现但其频率并不高。然而设置这一概念的一个显著优势在于它能够使学习算法更具针对性;特别是在面对高度瘦长或宽大的物体类别时(如人类与车辆),该方法能够更精准地进行目标检测;因此在特定输出单元中我们能够更好地识别出较为宽大或高瘦的目标物体。

在选择anchor box方面,在实践过程中你可能会遇到一些挑战和困惑。传统做法通常是根据经验来设定,并不一定是最优的选择。因此,在实际应用中建议尝试设定不同类型的 anchor box 来覆盖可能的情况。推荐你尝试设定5至10种不同类型的 anchor box 形状,并观察哪种组合能够更好地适应检测对象的多样需求。对于熟悉机器学习原理的读者而言,在提升模型性能方面还有一种更为高级的方法:通过k-means算法能够自动聚类出最具代表性的若干种典型形状(k代表簇的数量)。这种自动化的 anchor box 选择方法能够帮助你在涵盖十几个类别目标的同时实现较高的检测效率与准确性(accuracy)。当然,在这种纯人工设定的情况下合理分配各个形状也是可行的策略:例如你可以考虑将不同类别目标的特点融入到 anchor box 的设计中去(例如高瘦或宽胖的对象类型),这在实际操作中并不复杂就可以实现较高的检测准确率(accuracy)。不过这其实是一种较为基础的方法论,在实际应用中另一种方法则是根据经验来设定不同的基准形状(basis shapes)并综合考虑各类别目标的具体特征

因此我们可以理解为anchor box。在下一集里我们将综合运用所学知识,并将其整合进YOLO系统。

9、YOLO算法

在本次课程中你们已经掌握了对象检测算法的主要组成部分,在这个视频中我们将整合这些核心模块以形成YOLO 对象检测算法。

让我们考虑如何构建你的训练集。假定你旨在训练一个算法来识别三种物体——行人、汽车和摩托车——你需要明确地定义完整的背景类别。这里共有三个类别标签:如果采用两个anchor box(锚框),则输出维度为3 \times 3 \times 2 \times 8(其中3 \times 3表示网格划分区域的数量)或等价地视为3 \times 3 \times 16(将每个锚框的特征向量展开)。构建数据集时,请遍历这9个网格单元,并为每个单元生成相应的目标向量y。

0,?,?,?,?,?,?,?,0,?,?,?,?,?,?,?

0...

y = [0, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?, ?, ?, ?]

在当前网格布局中,绝大多数单元为空,在那个位置(标记为编号2的地方),将存在目标向量y

0,?,?,?,?,?,?,?,1,bx,by,bh,bw,0,1,0

所以你通过覆盖所有九个单元格的方式进行分析,在每个位置生成一个特征向量并连接成一个三维张量(大小为3\times 3\times 16)。与之前的方法类似,在这里我们采用了3\times 3的网格结构作为基础框架;在实际应用中可能会选择更大的尺寸如19\times 19\times 16;如果需要更高的复杂度,则可能采用更多数量的锚框层(每个层包含多个锚框),比如使用5个锚框层(每个层包含8个锚框),最终形成一个大小为19\times 19\times 40的空间结构。这构成了我们的训练数据集;随后我们构建了一个卷积神经网络模型用于处理输入图像(大小为N\times N\times 3),其中在本例中模型输出的结果维度为N\times N\times (C \times K)的形式:当选择较小规模时输出维度为3\times 3\times (2 \times 8);而当扩展到更大尺寸时则会得到相应的扩展结果。

以上是数据集处理,定义标签,做完这些然后就是输入到神经网络训练。

--------------------------------------------------------------------------------------------------

训练神经网络

-------------------------------------------------------------------------------------------------

我们可以观察到你的算法是如何生成预测结果的。在这一过程中,请注意以下几点:首先,请确保输入图像已经被正确加载;其次,请确认神经网络模型已经成功初始化;最后,请确保所有参数设置与预期一致。在实际应用中,请注意以下几点:首先,请确保输入图像已经被正确加载;其次,请确认神经网络模型已经成功初始化;最后,请确保所有参数设置与预期一致。假设输入是一张这样的图片(便于演示),其输出特征图将具有特定的空间和通道维度(如3\times3\times2\times8)。对于每个包含9个像素的小块,在此结构中都会生成一个对应的向量表示(共9个向量)。

位于左上角(编号1)的格子中没有任何对象。我们的目标是使该神经网络在第一个PC位置输出0值,并确保第二个PC的位置也是0值之后我们随后将输入一些数值以供该网络处理然而需要注意的是你的神经网络不能输出问号也不能输出don’t care-s标记其余部分将由人工输入一些数字这些数据在大多数情况下会被系统忽略这是因为该神经网络已经确认了这一区域没有相关的信息因此在这里不会产生任何影响最终的结果通常会反映出一个类别边界框的相关信息

与当前边界框不同之处在于,在左下方格子(编号2)的位置上生成对应的y值(编号4所示)。这种形式表现为对于边界框1而言,在置信度pc为0的情况下(anchor box 1 对应行人),该格子内未检测到行人存在。具体数值包括bx=?, by=?, bh=?, bw=?, c1=?, c2=?, c3=?。而对于位于右下方格子(编号2)的位置上生成对应的y值时,在置信度pc为1的情况下(anchor box 2 对应汽车),该区域确实检测到了汽车的存在,并通过bx=?, by=?, bh=?, bw=?等参数进行精确定位。”

--------------------------------------------------------------------------------------------------------------------------

为了更生动地展示这一过程, 我们来观察一张新的测试图像, 这就是非极大值抑制的工作流程。当使用两个锚框时, 在这9个单元格中的每一个都会生成两个边界框预测结果, 其中一个是概率较低的pc值。然而, 在这9个单元格中的每一个都生成了两个边界框预测结果: 例如, 在实际应用中, 边界框检测的结果通常呈现出这样的模式——有些边界框可能会超出所在单元格的实际尺寸范围(如图1所示)。接下来, 我们会舍弃那些概率较低的预测结果(编号2所示)。这些低置信度的预测结果往往会被忽略, 因为我们认为在这些区域可能并没有物体存在。

当面对三个不同的物体检测类别时(即行人、车辆以及摩托车),具体操作步骤如下:首先对每个类别单独运行非极大值抑制算法来处理其对应的边界框;接着分别对行人、车辆以及摩托车这三个类别各自运行非极大值抑制算法。完成上述操作后会得到三种独立的预测结果集;最后将这些预测结果集进行融合汇总以获得最终的物体检测结果。通过该算法处理后能够准确识别并定位图像中的所有车辆以及行人(如图3所示)。

10、RPN网络

如果您想深入了解这一领域,请查阅一些关于目标检测的研究文献。研究者通常会遇到的一组核心概念被称为候选区域,在计算机视觉领域中具有重要地位的概念。考虑到候选区域算法在我的项目中应用频率较低,并且这些工作无疑对相关领域的研究与实践产生了深远的影响,请您在实际工作中也涉及相关技术时会频繁接触到这些方法。

大家还记得滑动窗法吗?你可以用预先训练好的分类器在这些窗口上进行遍历操作。之后启动一个检测程序来检查是否存在汽车、行人以及摩托车。除此之外,还可以尝试应用卷积神经网络技术。值得注意的是该算法的一个主要缺陷是在图像中没有明显物体时会做无谓的工作吗?

因此,在这个编号为1的矩形区域内几乎没有任何内容存在,无需进行分类处理的内容。然而,在这个编号为2的矩形区域内可能需要执行运算以处理相关数据。

Rich feature hierarchies developed by Girshick et al., aimed at precise object recognition and meaningful image partitioning, were presented in the proceedings of the IEEE conference on computer vision and pattern recognition in 2014 (pp. 580-587).

该研究团队在幻灯片底部引用的论文中提出了一个名为 R-CNN 的算法。这一概念意为带区域的卷积神经网络(CNN),即带区域式的卷积网络。该算法旨在选择若干区域,在这些选定区域内执行卷积神经网络分类器以提高识别效果。与基于每个滑动窗口直接运行检测算法的方式不同,该方法通过在少数关键窗口上应用卷积网络分类器来实现目标定位。

通过执行图像分割算法来识别候选区域。这些候选区域的表现形式即为分割后的结果呈现为下图所示。例如,在实际操作中,我们可以通过分析不同颜色块中的特征来确定可能存在目标的位置。例如,在第一个颜色块中识别出一个特定区域后,在该特定区域内部署分类器模型以进行进一步分析。接着,在该特定区域内再次运行分类器模型以确认是否存在目标物体。为了提高检测效率,在第二个颜色块中继续应用同样的分类器模型进行验证。如果将算法应用于第三个颜色块(编号3),则有助于检测到人行道上的行人存在;而如果将算法应用于第四个颜色块(编号4),则能够识别到道路上行驶的车辆或其他移动物体的存在情况

这一细节可被称作分割算法。
然后你需要识别出大约2000个色块。
接着,在这2000个色块上设置边界框。
这样处理后所需位置数量将大幅缩减。
从而减少卷积网络进行分类所需的时间。
相较于在整个图像范围内运行一次分类器而言更快。
同样,在方形区域(编号5)内运行卷积网络。
高而瘦长的区域(编号6)内也会执行该操作。
宽而fat的区域(编号7)则会进行类似的运算。

这一概念的核心在于采用的是基于区域的人工智能架构,在深度学习领域具有重要地位。然而该算法在实际应用中仍显不够高效。针对这一问题的一系列研究工作已开始致力于优化该算法。基本流程中首先通过特定算法确定若干候选目标区域,在完成初步筛选后随后会对每个候选目标区域运行分类器处理。每个检测的目标将被赋予相应的类别标签,并通过回归分析确定其边界框位置。

为了更好地说明这一过程的特点,我们可以指出该算法不会直接依赖输入提供的边界的信任度。相反地,在计算过程中会推导出一个边界框bx、by、bh和bw。这些推导出的边界框具有较高的准确性,并且相较于仅通过图像分割方法所获得的颜色块边缘而言,在细节刻画上更为精准和细致。因此能够推导出较为精确的边界框。

现有R-CNN方法存在明显的运算效率问题。

研究表明,在Fast R-CNN算法中存在一个关键缺陷:即聚类阶段相对缓慢。对此问题的关注促使另一研究团队——** Ross Girshick 的领导下的** He KaimingJiangxi Sun 等人提出了一种基于卷积神经网络模型的新方法——Faster R-CNN系统(Faster Region Proposal Network),该系统显著提升了候选区域检测的速度并实现了对传统分割算法的重大突破。然而从现有数据来看,在实际应用中大多数基于R-CNN改进的方法仍相形之下差距显著地慢于YOLO算法

全部评论 (0)

还没有任何评论哟~