YOLO 对象检测:该算法如何预测大于网格单元的边界框?
YOLO object detection: how does the algorithm predict bounding boxes larger than a grid cell?
我正在努力更好地理解 YOLO2 和 3 算法的工作原理。该算法处理一系列卷积,直到它下降到 13x13
网格。然后它能够对每个网格单元内的对象以及这些对象的边界框进行分类。
如果您查看此图片,您会发现红色的边界框比任何单个网格单元格都大。边界框也以对象的中心为中心。
当网络激活基于单个网格单元时,我的问题是预测的边界框如何超过网格单元的大小。我的意思是,神经元应该不知道网格单元之外的所有内容,从而预测在该单元中检测到的对象的边界框。
更准确地说,这是我的问题:
1.算法如何预测比网格单元格大的边界框?
2。算法如何知道对象的中心位于哪个单元格?
everything outside of the grid cell should be unknown to the neurons predicting the bounding boxes for an object detected in that cell right.
不太对。这些单元对应于图像的分区,如果对象的中心位于其中,神经元已经学会响应。
然而,这些输出神经元的感受野比细胞大得多,实际上覆盖了整个图像。因此,它能够识别并围绕比其分配的对象大得多的对象绘制边界框 "center cell"。
所以一个细胞以输出神经元感受野的中心为中心,但它是一个小得多的部分。它也有些随意,例如,人们可以想象有重叠的细胞——在这种情况下,当一个物体位于它们细胞的重叠区域的中心时,你会期望相邻的神经元同时发射。
YOLO 预测锚点的偏移量。锚点已初始化,因此有 13x13 组锚点。 (在Yolov3中每组有k=5个anchors,不同的yolo版本有不同的k。)anchors散布在图像上,以确保检测到所有部分的物体。
锚点可以具有任意大小和纵横比,与网格大小无关。如果你的数据集主要有大的前景对象,那么你应该将你的锚点初始化为大的。如果 YOLO 只需要对锚点进行小的调整,它就会学得更好。
每个预测实际上都使用了整个图像的信息。通常来自图像其余部分的上下文有助于预测。例如车辆下方的黑色像素可能是轮胎或阴影。
该算法并不真正"know"对象的中心位于哪个单元格中。但是在训练过程中,我们从基本事实中获得了这些信息,我们可以训练它进行猜测。经过足够的训练,它最终会非常擅长猜测。工作方式是将最接近地面实况的锚点分配给对象。其他锚点被分配给其他对象或背景。分配给背景的锚点应该具有低置信度,而分配给对象的锚点则评估其边界框的 IoU。因此,训练加强了一个锚点以提供高置信度和准确的边界框,而其他锚点则提供低置信度。您问题中的示例不包含任何低置信度的预测(可能是为了简单起见),但实际上低置信度预测比高置信度预测要多得多。
好吧,这不是我第一次看到这个问题,我遇到了同样的问题,事实上所有 YOLO 1 & 2
我在 yoloquest
期间遇到的架构,没有网络图在哪里暗示某些分类和本地化在第一层或图像被踢的那一刻fed in. 它通过了一系列的卷积层和过滤器(没有忘记池只是觉得它们是网络中最懒惰的元素加上我讨厌游泳池包括里面的话)。
表示可以看到基本的网络流量信息
或以不同方式表示,即从像素到轮廓、形状,
在对象被正确分类或定位之前的特征等
就像任何普通的 CNN
由于表示边界框预测的张量和
分类位于网络的末端(我看到
反向传播回归)。我认为更合适
说网络:
- 将图像分成单元格(实际上网络的作者是用训练标签数据集做的)
- 对于每个划分的单元格,尝试预测具有置信度分数的边界框(我相信紧随其后的卷积和过滤器
细胞分裂负责能够正确地拥有
网络预测边界框大于每个单元格,因为它们
如果你查看完整的 YOLO,则一次以多个细胞为食
体系结构,没有不完整的)。
总而言之,我的看法是网络预测更大
一个单元格的边界框,而不是每个单元格都这样做
即网络可以被视为具有输出的普通 CNN
each classification
+ number of bounding boxes per cell
唯一的目标是
应用卷积和特征图来检测、分类和
使用 forward pass
.
定位对象
forward pass
implying neighbouring cells in the division don't query other cells backwardly/recursively, prediction of larger bounding boxes are by next feature maps and convolutions connected to receptive areas of previous cell divisions. also the box being centroidal is a function of the training data, if it's changed to top-leftiness it wouldn't be centroidal(forgive the grammar).
我正在努力更好地理解 YOLO2 和 3 算法的工作原理。该算法处理一系列卷积,直到它下降到 13x13
网格。然后它能够对每个网格单元内的对象以及这些对象的边界框进行分类。
如果您查看此图片,您会发现红色的边界框比任何单个网格单元格都大。边界框也以对象的中心为中心。
当网络激活基于单个网格单元时,我的问题是预测的边界框如何超过网格单元的大小。我的意思是,神经元应该不知道网格单元之外的所有内容,从而预测在该单元中检测到的对象的边界框。
更准确地说,这是我的问题:
1.算法如何预测比网格单元格大的边界框?
2。算法如何知道对象的中心位于哪个单元格?
everything outside of the grid cell should be unknown to the neurons predicting the bounding boxes for an object detected in that cell right.
不太对。这些单元对应于图像的分区,如果对象的中心位于其中,神经元已经学会响应。
然而,这些输出神经元的感受野比细胞大得多,实际上覆盖了整个图像。因此,它能够识别并围绕比其分配的对象大得多的对象绘制边界框 "center cell"。
所以一个细胞以输出神经元感受野的中心为中心,但它是一个小得多的部分。它也有些随意,例如,人们可以想象有重叠的细胞——在这种情况下,当一个物体位于它们细胞的重叠区域的中心时,你会期望相邻的神经元同时发射。
YOLO 预测锚点的偏移量。锚点已初始化,因此有 13x13 组锚点。 (在Yolov3中每组有k=5个anchors,不同的yolo版本有不同的k。)anchors散布在图像上,以确保检测到所有部分的物体。
锚点可以具有任意大小和纵横比,与网格大小无关。如果你的数据集主要有大的前景对象,那么你应该将你的锚点初始化为大的。如果 YOLO 只需要对锚点进行小的调整,它就会学得更好。
每个预测实际上都使用了整个图像的信息。通常来自图像其余部分的上下文有助于预测。例如车辆下方的黑色像素可能是轮胎或阴影。
该算法并不真正"know"对象的中心位于哪个单元格中。但是在训练过程中,我们从基本事实中获得了这些信息,我们可以训练它进行猜测。经过足够的训练,它最终会非常擅长猜测。工作方式是将最接近地面实况的锚点分配给对象。其他锚点被分配给其他对象或背景。分配给背景的锚点应该具有低置信度,而分配给对象的锚点则评估其边界框的 IoU。因此,训练加强了一个锚点以提供高置信度和准确的边界框,而其他锚点则提供低置信度。您问题中的示例不包含任何低置信度的预测(可能是为了简单起见),但实际上低置信度预测比高置信度预测要多得多。
好吧,这不是我第一次看到这个问题,我遇到了同样的问题,事实上所有 YOLO 1 & 2
我在 yoloquest
期间遇到的架构,没有网络图在哪里暗示某些分类和本地化在第一层或图像被踢的那一刻fed in. 它通过了一系列的卷积层和过滤器(没有忘记池只是觉得它们是网络中最懒惰的元素加上我讨厌游泳池包括里面的话)。
表示可以看到基本的网络流量信息 或以不同方式表示,即从像素到轮廓、形状, 在对象被正确分类或定位之前的特征等 就像任何普通的 CNN
由于表示边界框预测的张量和 分类位于网络的末端(我看到 反向传播回归)。我认为更合适 说网络:
- 将图像分成单元格(实际上网络的作者是用训练标签数据集做的)
- 对于每个划分的单元格,尝试预测具有置信度分数的边界框(我相信紧随其后的卷积和过滤器 细胞分裂负责能够正确地拥有 网络预测边界框大于每个单元格,因为它们 如果你查看完整的 YOLO,则一次以多个细胞为食 体系结构,没有不完整的)。
总而言之,我的看法是网络预测更大 一个单元格的边界框,而不是每个单元格都这样做 即网络可以被视为具有输出的普通 CNN
each classification
+number of bounding boxes per cell
唯一的目标是 应用卷积和特征图来检测、分类和 使用forward pass
. 定位对象
forward pass
implying neighbouring cells in the division don't query other cells backwardly/recursively, prediction of larger bounding boxes are by next feature maps and convolutions connected to receptive areas of previous cell divisions. also the box being centroidal is a function of the training data, if it's changed to top-leftiness it wouldn't be centroidal(forgive the grammar).