【问题标题】:Any way of running EfficientDet from the TF Object Detection API inference on a batch of images instead of 1?有什么方法可以从 TF 对象检测 API 推断对一批图像而不是 1 个图像运行 EfficientDet?
【发布时间】:2021-11-24 10:43:04
【问题描述】:

我已经设法从模型园(Tensorflow 2.0,对象检测 API)下载了对象检测 API。我能找到的所有推理代码(在目录和在线)都适用于 1 的批量大小。

我正在考虑以某种方式重新配置 pipeline.config 文件。更具体地说 eval_config (batch_size = 5)。这个可以吗?

让我感到困惑的是,如何通过可变批量大小支持进一步的训练/微调......但推理不是?

感谢您提供的任何提示。

【问题讨论】:

  • 您能否提供指向您所指代码的链接,或者您能否编辑您的帖子以包含您希望修改以执行推理的代码?
  • 上传了一个答案...希望对您有所帮助!我对此真的很陌生!

标签: tensorflow tensorflow2.0 object-detection tensorflow-model-garden


【解决方案1】:

好的,经过大量修改代码后,这是我对自己问题的回答:

从一个简单的预训练模型源开始:

1. TF HUB 模型库为您提供了许多不同的对象检测模型。我特别想使用 EffifcientDet 架构。

例如:https://tfhub.dev/tensorflow/efficientdet/d2/1.

这些模型不支持 BATCHING 图像进行推理。您可以在 Inputs 部分看到这一点。

A three-channel image of variable size - the model does NOT support batching. The input tensor is a tf.uint8 tensor with shape [1, height, width, 3] with values in [0, 255]. 这是一个交易破坏者。所以我试图寻找解决方案!

2. 这些对象检测 COCO 模型中有许多是 Object Detection API 的一部分。在页面末尾的Source 部分中是这样写的。

The model's checkpoints are publicly available as a part of TensorFlow Object Detection API.

该链接将您带到 repo https://github.com/tensorflow/models/tree/master/research/object_detection

3. 这意味着我必须对对象检测 API 代码进行一些修改。在这一点上,我对为什么模型不支持批量推理感到困惑,因为它们已经接受了批量图像的训练。这是我最初发布问题的时间。

这是在 COCO 上训练的最新模型的链接 https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md

4. 通过从此处下载模型(例如 EfficientDet D2 768x768)并提取内容,您可以看到 protobuf saved_model 格式和检查点数据均已给出。 protobuf 模型的签名为[1,None,None ,3],这不好!这意味着我们只能对 RGB 空间中具有可变宽度/高度的 1 个图像进行操作。但是我们需要的是[None,None,None,3]的输入签名。

5. 所以最后为了做到这一点,我们需要使用exporter_main_v2.py 文件!该文件将要以原型格式('saved_model')导出的模型的检查点作为参数。但是默认情况下,输入签名设置为[1,NONE,NONE,3]

6. 解决此问题的方法是更改​​exporter_main_v2.py 使用的文件。在exporter_lib_v2.py 我们需要更改几行代码 从tf.TensorSpec(shape=[1, None, None, 3]tf.TensorSpec(shape=[None, None, None, 3].

我在 github repo 上找到了一个 pull request: https://github.com/tensorflow/models/pull/9228/commits/b2a6712cbe6eb9a8639f01906e187fa265f3f48e 这很好地总结了这些变化!

我尝试了几个不同的 EffifcientDet 模型,效果很好!但是我不知道这是否适用于其他型号!当心!

谢谢大家...这很长,但我认为最好解释一下我的“旅程”以及达成此解决方案的理由。

【讨论】:

    【解决方案2】:

    看起来 pipeline.config 支持 eval_config 中的 batch_size 应该是这样的,

    eval_config {
      metrics_set: "coco_detection_metrics"
      use_moving_averages: false
      batch_size:5
    }
    

    您可以通过查看the protos 来检查 pipeline.config 中支持哪些参数。在这种情况下,您可以看到在eval.proto 中指定了batch_size。

    我还确认在 Tensorflow 对象检测 API here 中使用了 batch_size。我见过一个原型的例子,它被指定但没有实际使用。

    【讨论】:

    • 经过大量搜索/绝望后,我提供了一个答案....!有兴趣的可以看看!
    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2021-01-31
    相关资源
    最近更新 更多