问题标签 [single-shot-detector]

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 回答
248 浏览

tensorflow - tf2 SSD检测模型的后期处理

我需要在ios上使用tensorflow的检测模型。1中可用的 tflite 模型文件是 uint8 格式,不能很好地与 CoreML 配合使用,所以我决定下载一个完整的模型并自己将其转换为 tflite。

TF zoo 中的所有 SSD 模型都包含非极大值抑制算法,并且由于 NMS 不能很好地与 tflite 配合使用,我删除了 export_tflite_graph_lib_tf2 代码中的后处理功能,以便创建没有 NMS 的 tflite 模型。

所以现在我有一个工作检测模型(确切地说是ssd mobilenetv2),它输出(box_encodings、class_predictions、anchors)而不是(boxes、classes、scores、num_detections)

如何从每个 box_encoding、anchors 中创建一个 bbox?

我在2中找到了这个公式:

但我不确定y_scale、x_scale等是什么。它的图像大小?(320*320)。如果是这样,数字不匹配。

例如,(0.425, 0.225, 0.399, 0.200) 的框编码和 (0.958, 1.315, 1.437, 0.938) 的锚点创建 (0.496, 0.953, 2.641, 2.099) 的 bbox。这些数字对我来说没有意义(我希望所有四个数字(bbox 的角)都在 [0,1] 范围内)。任何人都可以澄清这一点吗?谢谢

0 投票
0 回答
21 浏览

python - 在预测错误的训练数据上重新训练对象检测模型

我已经训练了一个 SSD 对象检测模型,并在火车上获得了 89% 的 mAP 分数。用预测错误的训练样本重新训练网络以提高性能是否有意义?

0 投票
0 回答
79 浏览

python - tensorflow.python.framework.errors_impl.InvalidArgumentError:不兼容的形状 VGG16 + SSD

当我在一个类上使用 vgg16 火车和来自这个 github(https://github.com/Socret360/object-detection-in-keras)的 SSD 编译代码时,我遇到了 SSD 损失函数的问题。问题来自这两行:

因此,如果有人对问题有所了解,那将非常有帮助

0 投票
0 回答
54 浏览

python - 通过张量流度量跟踪 SSD 中每个类的误报数

我正在尝试使用张量流度量来跟踪 SSD 网络在训练/验证期间产生了多少误报。

我尝试自己编写,但是当它应该产生一个整数时它会输出一个浮点数(例如,有 1.3 个假阴性预测没有意义)。这告诉我我的代码要么做错了事,要么 tensorflow 正在添加一个我没有补偿的标量。代码如下。

我还尝试使用我已经为其他类型的指标工作的内置指标。问题是 SSD 输出张量的输出具有传递给度量的形状,每个项目都有形状(#boxes,#classes),而内置的tf.keras.metrics.FalseNegatives度量类期望单个值输入.

归根结底,我这样做是为了了解网络在哪里出现问题,这样我就可以看看添加其他类型的类是否会改善它。如果有更好的方法,请告诉我!这是我的第一个迁移学习项目

代码。为传递给构建器函数的每个类生成假阴性度量,该构建器函数为每个类返回一个度量函数。通常,这还包括其他指标,但我在这里对其进行了修剪,仅包括计算 # 假阴性:

以下是在训练之前传递指标的方式:

0 投票
0 回答
274 浏览

tensorflow2.0 - 输出张量大小与移动设备上的 SSD FPN 模型不匹配

我正在尝试从 Tensorflow 2 中获取不同的 SSD 模型以在 Android 中工作。示例 .tflite 文件工作正常,但我转换并尝试过的不同其他模型似乎都有相同的问题。

我主要遵循本指南来了解如何将这些模型转换为移动设备:https ://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile_tf2.md 这一切都很好,但是在尝试时要在移动设备上运行它,检查的第一帧会引发此错误:

初始化 ObjectDetector 时发生错误:索引 0 处的输出张量预计有 3 个维度,发现为 2。

我尝试过的模型:

  • SSD MobileNet V2 FPNLite 640x640
  • SSD ResNet152 V1 FPN 1024x1024 (RetinaNet152)
  • SSD ResNet101 V1 FPN 640x640 (RetinaNet101)

有谁知道我可能做错了什么?

编辑:我发现了几天前打开的类似问题。可能相关:https ://github.com/tensorflow/tensorflow/issues/51591#issuecomment-905216674

0 投票
0 回答
25 浏览

pytorch - 如何手动将具有自定义层逻辑的 Caffe 网络转换为 PyTorch?

我想在 PyTorch 中重新实现E2X 论文中的代码

正如在原始存储库中所说,我已将代码与caffe_ssd合并,然后修复了其中的一个错误,所以现在它可以在 Caffe 上运行。

由于我的目标是在 PyTorch 中重新实现这个东西,我还尝试使用 MMdnn将手册的给定网络从 Caffe 转换为 PyTorch,遇到了错误。 可能的原因是与 caffe_ssd 合并的 E2X 的自定义逻辑。 我通过成功地将默认的 SqueezeNet 从 Caffe 转换为 PyTorch 来检查 MMdnn 是否可以与普通网络一起使用。

因为我无法自动转换网络,所以我想手动进行。
如何手动将具有自定义层逻辑的 Caffe 网络转换为 PyTorch?

0 投票
2 回答
390 浏览

tensorflow - Tensorflow Object-API:将 ssd 模型转换为 tflite 并在 python 中使用

我很难将给定的 tensorflow 模型转换为 tflite 模型然后使用它。我已经发布了一个问题,我在其中描述了我的问题,但没有分享我正在使用的模型,因为我不允许这样做。由于我没有以这种方式找到答案,因此我尝试转换公共模型(ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu)。

是来自对象检测 api的 colab 教程。我只是运行整个脚本而不做任何更改(它的模型相同)并下载了生成的模型(有和没有元数据)。我将它们与 coco17 火车数据集中的示例图片一起上传到这里。

我尝试直接在 python 中使用这些模型,但结果感觉像垃圾。

这是我使用的代码,我遵循了本指南。我更改了 rects、scores 和 classes 的索引,因为否则结果的格式不正确。

这导致以下控制台输出

和生成的图像

模型输出.

我尝试了来自 orinal 训练数据集的不同图像,但从未得到好的结果。我认为输出层坏了,或者可能缺少一些后处理?

我还尝试使用官方 tensorflow 文档中给出的转换方法。

但是当我尝试使用该模型时,我得到了一个ValueError: Cannot set tensor: Dimension mismatch. Got 640 but expected 1 for dimension 1 of input 0.

有谁知道我做错了什么?

更新:在 Farmmakers 建议之后,我尝试更改最后由短脚本生成的模型的输入尺寸。之前的形状是:

所以增加一维是不够的。因此我使用了interpreter.resize_tensor_input(0, [1,640,640,3]). 现在它可以通过网络提供图像。

不幸的是,我无法理解输出。这是输出详细信息的打印:

我将这样生成的 tflite 模型添加到了google drive中。

Update2:我在google 驱动器中添加了一个目录,其中包含一个使用全尺寸模型并产生正确输出的笔记本。如果您执行整个笔记本,它应该会在您的磁盘上生成以下图像。

在此处输入图像描述

0 投票
1 回答
53 浏览

python - 训练 SSD 给出 ValueError: Can't load save_path when it is None

我正在使用 google colab 来训练我的 ssd 模型。这是我的错误的堆栈跟踪:

我知道该train_ssd_network.py文件存在问题,但这里的确切问题是什么?

这是检查点的图像: 在此处输入图像描述

我阅读了 StackOverflow 问题,他们提到这可能是与检查点相关的问题。但是,我确实有一个检查点文件夹,其中包含解ssd_300_vgg.ckpt压缩的文件,其中还包含两个文件。该文件直接从作者的存储库中下载。

其他答案如下:

该错误只是意味着tf.train.latest_checkpoint 没有找到任何东西。它返回None,然后 Saver 抱怨,因为它已通过None。所以该目录中没有检查点。

我该如何解决这个问题?

0 投票
2 回答
436 浏览

python - 训练SSD后如何预测Precision、Recall和F1分数

我是深度学习的新手,我希望能够使用 F1 分数评估在某些时期接受过训练的模型。我相信它首先需要计算精度和召回率。

训练的模型是 SSD-300-Tensorflow。是否有代码或可以产生这些结果的东西?我没有使用 sci-kit 或任何东西,因为我不确定计算分数是否需要这样做,但感谢任何指导。

文件夹 tf_extended 中有一个用于评估的文件,名为 metrics.py,其中包含用于精度和召回率的代码。训练我的文件后,我在日志文件夹中有检查点。如何计算我的指标?由于硬件限制(GPU 问题),我正在使用 Google Collab

0 投票
0 回答
64 浏览

tensorflow - 为什么在从预训练模型进行微调时,Tensorflow 对象检测 API 不会恢复框预测器权重?

Tensorflow对象检测 API一个示例项目,用于使用新类微调 SSD 模型。在示例中,作者从预训练的检查点恢复了特征提取器和部分框预测器。然而,在微调模型的主包中,当从检查点恢复 SSD 模型进行微调时,没有恢复任何框预测器,只有特征提取器被恢复。为什么是这样?您何时想要部分恢复框预测器?

我发现了这一点,因为当在自定义数据集上微调这个模型时,模型的总损失减少了约 100 倍,并且部分恢复了框预测器。

示例项目检查点恢复代码

主包使用的 SSD 检查点恢复代码