问题标签 [faster-rcnn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
8578 浏览

keras - Matterport Mask-R-CNN 的损失究竟是什么?

我使用 Mask-R-CNN 来训练我的数据。当我使用 TensorBoard 查看结果时,我有损失, mrcnn_bbox_lossmrcnn_class_lossmrcnn_mask_lossrpn_bbox_lossrpn_class_loss和所有相同的 6 个验证损失:val_loss、 val_mrcnn_bbox_loss等。

我想知道每个损失到底是什么。

另外我想知道前6个损失是火车损失还是它们是什么?如果他们不是火车损失,我怎么能看到火车损失?

我的猜测是:

loss:总结起来就是 5 个 loss(但我不知道 TensorBoard 是如何总结的)。

mrcnn_bbox_loss:边界框的大小是否正确?

mrcnn_class_loss:类正确吗?像素是否正确分配给类?

mrcnn_mask_loss:实例的形状是否正确?像素是否正确分配给实例?

rpn_bbox_loss : bbox 的大小是否正确?

rpn_class_loss : bbox 的类是否正确?

但我很确定这是不对的......

如果我只有 1 个班级,一些损失是否无关紧要?例如只有背景和其他1个类?

我的数据只有背景和 1 个其他类,这是我在 TensorBoard 上的结果:

结果1:结果 2:结果 3:结果:4

我的预测没问题,但我不知道为什么我的验证中的一些损失最终会上下波动……我认为它必须首先下降,然后过度拟合后才上升。我使用的预测是 TensorBoard 上具有最多 epoch 的绿线。我不确定我的网络是否过度拟合,因此我想知道为什么验证中的一些损失看起来如何......

这是我的预测: 我的火车组示例: 这是我的测试集示例的基本事实: 这是来自测试集示例的预测:

0 投票
2 回答
6360 浏览

faster-rcnn - py:445: UserWarning: Matplotlib 当前正在使用 agg,这是一个非 GUI 后端,因此无法显示该图。% get_backend())

我试图在 Github 上运行由 matterport 提供的 Mask-RCNN 存储库。https://github.com/matterport/Mask_RCNN。当我在 anaconda 中运行演示时,它显示"C:\Anaconda\lib\site-packages\matplotlib\figure.py:445: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure. % get_backend()) ". 有没有人遇到过类似的问题?

0 投票
0 回答
314 浏览

python - 训练Mask RCNN但总是从所有提案中得到0个正边界框?

我刚刚在 Pytorch 中从头开始实现了一个 Mask RCNN,代码如下:https ://github.com/arthurhero/Mask_R-CNN_Pytorch/blob/master/masker_ops.py

我在两台不同的机器上只有一个 GTX1080 和一个 Quadro6000,所以每次迭代只能训练 2 个 imgs。我的问题是,Mask RCNN 通常需要多长时间才能收敛?我怎么知道它是否在正确的轨道上?

现在我只训练 RPN 头(所以这是四个“实用步骤”中的第一个)。经过一晚的训练,这个模型仍然给我很多“0 positive bboxes”的通知,即当它为一个img的每个bbox分配标签时,它们都是负数(没有足够大的iou和ground-truth框)。并且似乎“0 正 bboxes”通知的数量并没有随着训练的进行而减少。

我想了几个原因。

  1. 现在,如果其中一个 img 具有“0 个正 bbox”,我将跳过整个批次,只是因为它会使张量形状对于以后的计算变得奇怪。人们通常是这样处理这种情况的吗?是否给培训带来了太多的低效?

  2. 学习率可能太大了?我目前正在使用论文中的 0.02。但是由于我的batch size只有2,这个学习率是不是太大了?

  3. 我对将偏移量应用于锚点的方式有点怀疑……目前,RPN 头部相对于锚点框返回 dy,dx,logh,logw。将这些偏移量应用于锚框的代码如下:

    center_y = center_y + (dy*height) center_x = center_x + (dx*width) height = height * torch.exp(dh) width = width * torch.exp(dw)

    生成的 bbox 可能远远超出原始锚点的边界(如果 dy 和 dx 很大)。但是当这个bbox被赋值为“负”时,如果标签为正,则位于原始anchor中心的类标签将受到惩罚。这对我来说看起来不公平......我在这里有误会吗?或者它只是无关紧要?我们是否应该对这些偏移量施加一些严格的限制,以使生成的 bbox 不会离锚点太远?

  4. for 循环太多。这是 ROIAlign 层和 Proposal 过滤器层的问题。由于每个 img 可能有不同数量的过滤提案,也只是因为很难操纵 5D 张量......我通常只是沿批处理轴拆分 bbox 或提案批次,并使用 for 循环来处理集合一次只有一个 img 的提案。但是从我对操作系统的有限了解来看,GPU 似乎不擅长做串行工作。那些 for 循环会拖累训练速度吗?有没有更好的方法在没有 for 循环的情况下在 5d 张量上实现这些计算?

  5. GPU太少了。基本问题:是否甚至可以仅在一个 GPU 上训练 Mask RCNN?如果不是...对于成本更低的对象掩蔽器有什么建议?我听说 YOLO 的计算成本也很高...

非常感谢!!

-Z

0 投票
0 回答
454 浏览

python - 在 Tensorflow 中使用 MobileNetV2 训练 FasterRcnn

我有一个受过训练的应用程序MobileNetV2 using FasterRcnn in Tensorflow.

相同的训练数据和相同的程序,我用 训练MobileNetv1,结果很好。

我使用此页面中的预训练模型both MobileNetV1 and MobileNetV2.

唯一的问题是我无法在从预训练模型的检查点训练 MobileNetV2 时初始化所有微调变量。使用 FasterRCNN 训练的 MobileNetV2 模型需要这些变量。但它们在预训练模型中不可用(检查点的所有变量都在这里

我不能只初始化五个变量,但为什么结果如此糟糕。会不会是其他问题?

0 投票
1 回答
312 浏览

computer-vision - Fast R-CNN 和 SPP-net 中用于假设生成的外部算法是什么?

我知道我们需要选择性搜索作为在 R-CNN 中生成感兴趣区域建议的外部算法,但在 Fast R-CNN 中,我们可以简单地取整幅图像,然后将其传递给卷积网络以创建特征图,然后使用单层SPP(RoI pooling layer)。

另一方面,我们在 SPP-net 中使用了多层 SPP。快速参考和理解 在此处输入图像描述

在慢速 R-CNN、SPP-net 和快速 R-CNN 中,感兴趣区域 (RoI) 来自提议方法(分别为“选择性搜索”、????)。

谁能详细解释并引用它在 SPP-net 和 Fast R-CN 中明确使用的提案方法,因为我没有在研究论文中详细提到它?

0 投票
1 回答
317 浏览

computer-vision - “R-CNN 变体中使用的 BB 回归算法”与“YOLO 中的 BB”定位技术有什么区别?

问题:

“基于区域的对象检测器中的 BB 回归算法”与“单次检测器中的边界框”产生的边界框(BB)有什么区别?如果不是为什么,它们可以互换使用吗?

在了解用于对象检测的 R-CNN 和 Yolo 算法的变体时,我遇到了执行对象检测的两种主要技术,即基于区域的 (R-CNN) 和基于小众滑动窗口的 (YOLO)。

两者都在两种方案中使用不同的变体(从复杂到简单),但最后,它们只是使用边界框来定位图像中的对象!我只是想专注于下面的本地化(假设正在发生分类!),因为这与所提出的问题更相关并简要解释了我的理解:

  • 基于区域

    • 在这里,我们让神经网络预测连续变量(BB 坐标)并将其称为回归。
    • 定义的回归(根本不是线性的),只是一个 CNN 或其他变体(所有层都是可微的),输出是四个值 (,,ℎ,),其中 (,) 指定位置的值左角和 (ℎ,) BB 的高度和宽度。
    • 为了训练这个 NN,当 NN 的输出与训练集中标记的 (,,ℎ,) 非常不同时,使用平滑的 L1 损失来学习精确的 BB!
  • 基于小众滑动窗口(卷积实现!)

    • 首先,我们将图像划分为 19*19 的网格单元。
    • 将对象分配给网格单元的方法是选择对象的中点,然后将该对象分配给包含对象中点的任何一个网格单元。所以每个对象,即使对象跨越多个网格单元,该对象也只分配给 19 x 19 网格单元之一。
    • 现在,您获取此网格单元的两个坐标并使用某种方法计算该对象的精确 BB(bx, by, bh, bw),例如
    • (bx, by, bh, bw) 是相对于网格单元格的,其中 x 和 y 是中心点,h 和 w 是精确 BB 的高度,即边界框的高度指定为整体宽度的一部分网格单元和 h&w 可以 >1。
    • 论文中指定了多种计算精确BB的方法。

两种算法:

  • 输出精确的边界框。!

  • 在监督学习设置中工作,他们使用带标签的数据集,其中标签是存储的边界框(使用labelimg等工具手动标记我的一些注释器)以 JSON/XML 文件格式为每个图像。

我试图在更抽象的层面上理解这两种本地化技术(以及对这两种技术有深入的了解!)以更清楚地了解:

  • 它们在什么意义上是不同的?, &

  • 为什么创建 2,我的意思是 1 在另一个上的失败/成功点是什么?

  • 它们可以互换使用,如果不能,那为什么?

如果我在某个地方错了,请随时纠正我,非常感谢您的反馈!引用研究论文的任何特定部分都会更有价值!

0 投票
1 回答
1200 浏览

computer-vision - 什么是边界框的尺度不变性和对数空间平移?

在慢速 R-CNN 论文中,边界框回归的目标是学习将提议的边界框 P 映射到真实框 G 的转换,我们根据四个函数 dx(P),dy(P) 参数化转换,dw(P),dh(P)。

  • 前 2 指定P 的边界框中心的尺度不变平移,而

  • 第二个两个指定P 的边界框相对于对象建议的宽度和高度的对数空间转换

这与 Fast-RCNN 论文中用于 BB 预测的技术相同。!

问题1。谁能帮我理解边界框的尺度不变性和对数空间(两者)的相关性以及这些函数如何捕捉这两个方面?

问题2。上面提到的BB 尺度不变平移与实现尺度不变目标检测(下文解释)有何不同?

我的意思是在快速 R-CNN 中,作者指出以下两种方法可以在目标检测中实现尺度不变性:

  • 首先,蛮力方法,在训练和测试期间,每张图像都以预定义的像素大小进行处理。网络必须直接从训练数据中学习尺度不变的目标检测

  • 第二种方法是使用图像金字塔。

请随时引用研究论文,以便我阅读以深入了解。

0 投票
1 回答
245 浏览

deep-learning - 为什么 fast-rcnn ssd 使用 3x3 过滤器来预测框位置和类标签?

我正在阅读用于对象检测的 fast-rcnn 和 ssd 代码。预测层使用 3x3 过滤器来预测框位置和类标签。

为什么不使用 2x2 过滤器或 4x4 过滤器或 5x5 过滤器来预测它们?

在此处输入图像描述

0 投票
1 回答
1293 浏览

computer-vision - 为什么ssd和yolo没有roi pooling层?

我们知道对象检测框架喜欢faster-rcnnmask-rcnn有一个roi pooling layeror roi align layer。但是为什么ssd和yolo框架没有这样的层呢?

0 投票
1 回答
179 浏览

python - 如何在 Keras CNN 中对齐维度以使输出与自定义损失函数匹配?

我无法编译这个模型。

我正在尝试实现 VGG16,但我将使用自定义损失函数。目标变量的形状是(?, 14, 14, 9, 6)我们只使用二元交叉熵作为开关Y_train[:,:,:,:,0]Y_train[:,:,:,:,1]有效地关闭损失,使其成为一个小批量——其他变量将用于神经网络的一个单独分支。这是此分支上的二元分类问题,因此我只想输出 shape (?, 14, 14, 9, 1)

我在下面列出了我的错误。您能否首先解释一下出了什么问题,其次是如何缓解这个问题?

型号代码

损失函数代码:

错误:

注意:我已经阅读了这个网站上的多个问题,但都有相同的错误,但没有一个解决方案允许我的模型编译。

潜在的解决方案:

我继续搞砸这个,发现通过添加

我能够编译模型。仍然怀疑这是否会正常工作。