我想实现 Yolo v1,但我对算法有一些疑问。
我理解这样一个事实,在 YOLO 中,我们对每个单元格(7x7)划分图像,并预测固定数量的边界框(论文中默认为 2 个,有 4 个坐标:x、y、w、h),一个置信度分数我们还预测每个单元格的类别分数。在测试步骤中,我们可以使用 NMS 算法来消除对一个对象的多次检测。

1)我们什么时候将图像分成网格?事实上,当我阅读论文时,他们提到分割图像,但是当我查看网络的架构时,我们似乎有两部分:卷积层和 FC 层。这是否意味着网络通过边界框输出“自然地”做到这一点?网格 7x7 的大小是否特定于卷积部分使用它的论文?如果我们使用例如 VGG 它会改变网格的大小吗?
编辑:由于我们网络的输出,似乎网格被“虚拟地”分割了。
2) 每个单元格使用 2 个边界框。但是在一个单元格中,我们只能预测一个对象。为什么我们使用两个边界框?
在训练时,我们只希望一个边界框预测器负责每个对象。我们指定一个预测器“负责”根据哪个预测具有最高当前 IOU 和地面实况来预测对象。这导致边界框预测器之间的专业化。每个预测器在预测特定大小、纵横比或对象类别方面会变得更好,从而提高整体召回率。
3)我真的没有得到这个报价。实际上,据说图像中的每个对象都有一个边界框。但是边界框仅限于单元格,那么当物体大于一个单元格时,YOLO 是如何工作的呢?
4)关于输出层,据说他们使用线性激活函数,但它使用的最大值等于1吗?因为他们说他们将 0 和 1 之间的坐标标准化(我认为置信度和类别预测是相同的)。
computer-science machine-learning computer-vision deep-learning yolo
我试图在keras(Tensorflow后端)中创建一个损失函数,但我有点卡住检查自定义丢失函数的内部.实际上,只有在我编译模型时才会在控制台上显示打印件,之后没有打印件.(我只是测试非常简单的自定义函数,当我解决这个问题时,我将创建真正的函数).我使用train_on_batch函数训练模型.我怎么解决这个问题 ?
def loss_yolo(self, y_true, y_pred):
'''
4*7*7 = 196
1*7*7 = 49
7*7*20 = 980
'''
print('inside loss function')
loss = K.mean(y_true- y_pred)
return loss
model.compile(optimizer='sgd', loss=loss_yolo)
print('train on batch')
print(model.train_on_batch(x, y))
Run Code Online (Sandbox Code Playgroud)
我的输出:
内部损失功能
批量训练
-0.481604
我正在阅读 Facebook Research 的论文https://research.fb.com/wp-content/uploads/2017/08/maskrcnn.pdf。
Mask RCNN 基于检测器 Faster RCNN,但进行了一些改进,例如 FPN(特征金字塔网络)、ROI 对齐,这似乎比 ROI 池化更准确。但是,我不理解关于 FPN 和 Mask RCNN 中的 mask 的架构。事实上,FPN 允许获取不同尺度的特征图,但看看论文上的图像,我不明白他们是否只使用了 FPN 上的最后一个特征图。
所以,问题是:我们是否只使用 RPN 的最后一个特征图,然后使用一些卷积层来预测掩模(用于分割),或者我们还使用 RPN 的中间层?
image-recognition computer-vision image-segmentation deep-learning
我正在尝试按照本教程https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9在 tensorflow 上使用 API 检测。但是有一些细节我不明白。
首先,我不明白配置文件中的一些评估参数。“num reader”和“max_evals”参数。“Max evals”似乎是对数据集的评估次数,但为什么默认情况下它不是 1?因为我们只需要测试一次检查点(或者我错了?)。关于训练,数据是自动洗牌的吗?
其次,我想知道我们是否可以使用 tensorboard 以便在使用 API 检测的训练期间在图像中显示框。如果是,获得它的步骤是什么?