Yolo v3 模型输出澄清与 keras
Posted
技术标签:
【中文标题】Yolo v3 模型输出澄清与 keras【英文标题】:Yolo v3 model output clarification with keras 【发布时间】:2019-11-28 10:10:02 【问题描述】:我正在使用带有 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 个对象?
【问题讨论】:
【参考方案1】: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,您可以再次将这个升级后的特征与早期特征连接起来,对它们进行升级、连接并用作第三个输出层的输入。
【讨论】:
感谢您的准确解释,我仍然有一个问题:在我发布的链接上,有一个名为“Objectness score”的东西,您称之为“信心”吗?因为“类值”是负数,正数......它们似乎没有界限,所以我如何获得有效的对象是得分最高的类的信心(以%为单位)? 不确定链接,但从我从 YOLOv3 的 keras 端口看到的,模型输出被重新整形,sigmoid 被应用于其中一些(提供 0-1 之间的边界)。 Here,方法 yolo_head 包含对 YOLOv3 输出进行预处理的第一步。以上是关于Yolo v3 模型输出澄清与 keras的主要内容,如果未能解决你的问题,请参考以下文章
Pytorch深度学习50篇·······第五篇:YOLO----- YOLO V3 V4 V5的模型结构
如何将 Keras .h5 模型转换为暗网 yolo.weights 格式?