Yolo v3 模型输出澄清与 keras

Yolo v3 model output clarification with keras

我在 keras 中使用 yolo v3 模型,这个网络给我作为输出容器,形状如下:

[(1, 13, 13, 255), (1, 26, 26, 255), (1, 52, 52, 255)]

所以我找到了这个 link

然后我理解了 3 个容器中每个容器的值 255,我也理解了有 3 个容器,因为边界框创建有 3 种不同的图像缩放比例。

但我不明白为什么在输出向量中第一个缩放比例有 13 * 13 个列表,第二个缩放比例有 26 * 26 个列表,最后一个缩放比例有 52 * 52 个列表。

我无法找到一些很好的解释,所以我不能使用这个网络。 如果有人知道在哪里可以找到有关输出维度的信息,我将非常感激。

编辑

是否因为如果我将图像分成 13 x 13 个部分,考虑到每个部分都是一个对象的中心,我只能检测到 13*13 个对象?

YOLOv3 有 3 个输出层。该输出层以 3 种不同的比例预测框坐标。 YOLOv3 也以将图像划分为单元格网格的方式运行。根据您查看的输出层,单元格的数量是不同的。

所以输出的数量是正确的,3 个列表(因为三个输出层)。您必须考虑到 YOLOv3 是完全卷积的,这意味着输出层是宽度 x 高度 x 过滤器。看第一个形状 (1, 13, 13, 255) 。您了解 255 代表边界框坐标 & 类 和置信度,1 代表批量大小。您现在不理解输出是 conv2d,所以有问题的部分是 13 x 13。13 x 13 意味着您的输入图像将被分成网格,并且对于网格的每个单元格,将预测边界框坐标,类 概率等. 第二层以不同的比例运行,你的图像将被划分为 26 x 26 的网格,第三层将你的图像划分为 52 x 52 的网格,并且对于网格中的每个单元格,都将预测边界框坐标。

为什么有用?从实际的角度来看,想象一下很多小鸽子集中在某个地方的画面。当你只有一个 13 x 13 的输出层时,所有这些鸽子都可以出现在一个网格中,所以你不会因此而一个一个地检测到它们。但是,如果您将图像划分为 52 x 52 网格,则您的单元格会很小,并且您更有可能检测到它们。检测小物体是对 YOLOv2 的抱怨,所以这是回应。

从更多机器学习的角度来看。这是一种叫做特征金字塔的东西的实现。这个概念被 Retina 网络架构所普及。

您处理输入图像、应用卷积、最大池化等,直到某个点,您将此特征图用作输出层的输入(在 YOLOv3 的情况下为 13 x 13)。比起用作 13 x 13 层输入的高级特征图,并与具有相应大小的特征图连接(该特征图将从网络的早期部分获取)。所以现在你使用作为输出层输入的放大特征,这些特征在整个网络和之前计算的特征中一直被预处理。这会导致更高的准确性。对于 YOLOv3,你再一次将这个放大的特征与早期的特征连接起来,将它们放大,连接并用作第三输出层的输入。