深度篇——目标检测史(六) 细说 YOLO-V3目标检测

返回主目录

返回 目标检测史 目录

上一章:深度篇——目标检测史(五) 细说 SSD 目标检测

下一章:深度篇——目标检测史(七) 细说 YOLO-V3目标检测 之 代码详解

论文地址:《YOLO-V3》

代码地址:tf_yolov3_pro

本小节,细说 YOLO-V3 目标检测,下一小节细说 YOLO-V3目标检测 之 代码详解

七. YOLO-V3 目标检测

YOLO (You Only Look Once, YOLO) 你只看一次

YOLO-V1:2015 年,YOLO-V2/9000:2017 年,YOLO-V3:2018 年

1. YOLO 代表 你只看一次。它是一种使用深度卷积神经网络学习特征来检测目标的目标检测器。YOLO 仅使用卷积层,使其成为全卷积网络 (FCN)。在下采样时,不使用 pooling层,而是使用一个步幅为 2 的卷积核对 feature maps 进行下采样操作。这样有助于防止由于 pooling 而丢失底层的特征。

 

2. YOLO-V3 使用 3 个不同尺度大小的 feature maps 来进行预测。在每个尺度的 feature maps 的每个位置(像素) 又都使用 3 个不同纵横比的 bounding boxes 来预测。3 个不同尺度大小的 feature maps是通过对  backbone 最后的 feature maps 的长、宽 分别 x2 进行的上采样后再与该尺度对应的 feature maps 通过 concat 而得到。而 anchors 的分布可以通过 k-means 聚类来决定 bounding boxes 的位置。在 COCO 数据集中,3 个不同尺度的 bounding boxes 对应的 anchors 分为 9 个簇,它们为:(10 x 13), (16 x 30), (33 x 23), (30 x 61), (62 x 45), (59 x 119), (116 x 90), (156 x 198), (373 x 326)

扫描二维码关注公众号,回复: 10250800 查看本文章

 

3. YOLO-V3 的步骤:

  (1). 将整张图像输入,通过 CNN 提取 3 个不同尺度的 feature maps 为后面的预测做准备(分为 大、中、小 3 个尺度)。 

  (2). 将最小尺度的 feature maps 分为 2 份,1 份用于预测,1 份用于 upsampled,upsampled 之后得到的 feature maps 与上面 (1) 中得到的 中等尺度 的 feature maps 进行 concat,将 concat 后得到的 feature maps 再分为 2 份,1 份 用于预测,1 份 用于 upsampled,将 upsampled 之后得到的 feature maps 再与 (1) 中得到的 大尺度 的 feature maps 进行 concat,将 concat 得到的 feature maps 用来进行预测。

  (3). 将 3 个尺度的 feature maps 的 iou_loss (或 giou_loss)、conf_loss、prob_loss 分别加和,再将这 3 个 loss 相加就可以得到总的 loss(因为,有时候我们需要看总 loss 是多少)。

 

4. YOLO-V3 流程图

   darknet 的网络结构

      模型和性能的参考

 

5. 不同尺度的预测

    在 YOLO-V3 中,通过 3 个不同尺度来进行预测,检测层被具有步幅为 32、16、8 这 3 种不同尺度的 feature maps 进行检测。这就意味着,在输入 416 x 416 的情况下,将在 13 x 13、26 x 26、52 x 52 的尺度下进行检测。网络将输入图像进行下采样,直到第一个在 feature maps 上使用 步幅为 32 进行检测的检测层为止。此外,将该层 上采样 2 倍,并将与先前具有相同尺度的 feature maps concat 起来;现在,使用 步幅为 16 的层来进行另一个检测,重复相同的上采样操作过程,最后是使用 步幅为 8 的层来进行检测。

 

6. 输出的解释

    通常的,(对于所有的目标检测来说) 卷积层学习到的所有特征将被传递到分类器或回归器上,然后分类器或回归器再进行检测预测(bounding boxes 的坐标,类别等)。在 YOLO-V3 中,是通过 1 x 1 的卷积层来畸形预测的。每个 1 x 1 大小的单元格可以预测固定数量的边界框。在深度方面,在 feature maps 中有 (B x (5 + c)) 项。

       B:为每个单元格可以预测到的 bounding boxes 个数

       5 + c:为每个 bounding box 所拥有的属性,用于描述每二个 bounding box 的中心坐标、维度、客观得分(foreground or background) 和 c 类 的置信度(概率)。在 YOLO-V3 预测的每个单元格有 3 个 bounding boxes。

  (1). 栗子

       栗如 输入图像为 416 x 416, 步幅为 32,输出的 feature maps 为 13 x 13

 

  (2). 如果对象的中心点落在该单元格的感受野的范围内,则期望 feature maps 中饿每个单元格通过其中的一个 bounding box 预测到一个对象。这与 YOLO-V3 的训练方式有关,其中有一个 bounding box 负责检测任何给定的对象。首先,必须确定这个 bounding box 属于哪个单元格;然后选择包括对象的 ground truth box 的中心点的单元格作为负责预测对象的单元格(由 input image 映射到 prediction feature maps 上) 的中心点。

  (3). 中心坐标

      YOLO-V3 这里通过一个 Sigmoid 函数运行中心点坐标来进行预测。通常情况下,YOLO-V3 不预测 bounding boxes 中心点的绝对坐标,而是预测中心点坐标的偏移量:

    ①. 先预测对象的网络单元格的左上角 坐标值

    ②. 然后 将 feature maps 中单元格的大小标准化到 0 ~ 1 之间(用 Sigmoid 函数处理得) 预测 得到偏移量

    ③. 此时,bounding box 的绝对坐标为 ①、② 相加。

    ④. 栗子

        栗如,以上面的 13 x 13 的 prediction feature maps 为栗,如果中心点的预测值为 (0.4, 0.7),则意味着中心点位于 (6.4, 6.7) 之上 (红色的格子为 第 7 行 第 7 列 的格子,其左上角的坐标为 (6, 6))。

        但是,如果 prediction feature maps 中单元格的大小没有标准化为 0 ~ 1 之间,则预测的 (x, y) 坐标就有可能大于 1.比如 (1.2, 0.7),这就意味着中心点在 (7.2, 6.7)。此时中心点就位于红色单元格的右侧单元格,或说是在 第 7 行 第 8 列 的单元格中。这违反了 YOLO 背后的理论,因为如果红色的单元格负责预测目标,则目标的中心必须位于红色的单元格中,而不是在红色单元格旁边的单元格中。

        因此,为了解决这个问题,通过一个 Sigmoid 函数的输出,将其压缩到 0 ~ 1 之间内,从而有效地将预测的中心点保持在网格中。

        

  (4). bounding boxes 的预测尺寸

        通过对输出应用对数空间转换,然后与 prediction feature maps 的大小相乘预测 bounding boxes 的尺寸,最后将 bounding boxes 映射回 input image 则可得到真实目标的大小。例如 在 13 x 13 prediction feature maps 中,预测 \large t_{w}\large t_{h} 的结果为图像的宽和高的标准化(训练的标签就是这样处理的)。因此,如果包含目标的 bounding boxes 的预测值 \large t_{w} 和 \large t_{h} 为 (0.3, 0.8),那么在 13 x 13 的 prediction feature maps 上的实际宽度和高度为 (13 x 0.3, 13 x 0.8)。

  (5). 客观得分 (判断前景和背景)

       客观得分表现对象包含在 bounding boxes 内的概率,红色和周围的网格的概率应该接近 1,而网格角落的概率应该接近 0。客观得分也是通过 Sigmoid 函数得到,因为它被理解为一个概率。

  (6). 获取最终的预测结果

       对于尺寸 416 x 416 的图像,YOLO-V3 预测的 bounding boxes为:

           (52 x 52 + 26 x 26 + 13 x 13) x 3 = 10647 个

       然而,在图像中,只有一个目标对象,这就要将检测目标从 10647 降到 1.一般使用以下步骤来达到目的:

    ①. 对象概率阈值化

         根据框内对象的概率进行筛选。通常,得分低于阈值的框将被忽略掉。

    ②. NMS (Non-Maximum Suppression, NMS) 非极大值抑制

       NMS 旨在解决同一幅图像的多重检测问题。非极大值抑制,顾名思义,就是抑制不是极大值的元素,可以理解为局部最大搜索。NMS 的流程:

      a. 获取目标边界框列表,并根据置信度得分(c 类概率) 进行排序。

      b. 选择置信度最高的边界框添加到最终输出列表中,并将其从边界框列表中删除。

      c. 计算所有边界框的面积

      d. 计算置信度最高的 bounding boxes 与其他 bounding boxes 的 IOU。

      e. 删除 IOU 重叠度大于阈值的 bounding boxes

      f. 重复上述过程,直至 bounding boxes 列表为空。

 

    效率与精度

 

                  

返回主目录

返回 目标检测史 目录

上一章:深度篇——目标检测史(五) 细说 SSD 目标检测

下一章:深度篇——目标检测史(七) 细说 YOLO-V3目标检测 之 代码详解

发布了63 篇原创文章 · 获赞 16 · 访问量 5981

猜你喜欢

转载自blog.csdn.net/qq_38299170/article/details/104470656