我已经设法从模型园(Tensorflow 2.0,对象检测 API)下载了对象检测 API。我能找到的所有推理代码(在目录和在线)都适用于 1 的批量大小。
我正在考虑以某种方式重新配置pipeline.config文件。更具体地说 eval_config (batch_size = 5)。这可以做到吗?
令我困惑的是,如何通过可变批量大小支持进一步的训练/微调......但推理不是吗?
感谢您提供的任何提示。
我已经设法从模型园(Tensorflow 2.0,对象检测 API)下载了对象检测 API。我能找到的所有推理代码(在目录和在线)都适用于 1 的批量大小。
我正在考虑以某种方式重新配置pipeline.config文件。更具体地说 eval_config (batch_size = 5)。这可以做到吗?
令我困惑的是,如何通过可变批量大小支持进一步的训练/微调......但推理不是吗?
感谢您提供的任何提示。
看起来 pipeline.config 在 eval_config 中支持 batch_size,它应该看起来像,
eval_config {
metrics_set: "coco_detection_metrics"
use_moving_averages: false
batch_size:5
}
您可以通过查看 protos来检查 pipeline.config 中支持哪些参数。在这种情况下,您可以看到在eval.proto中指定了 batch_size 。
我还在这里确认了在 Tensorflow 对象检测 API 中使用了 batch_size 。我已经看到了一个指定但未实际使用的原型的示例。
好的,经过大量修改代码后,这是我对自己问题的回答:
从一个简单的预训练模型源开始:
1.模型的 TF HUB repo 为您提供了许多不同的对象检测模型。我特别想使用 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),并提取内容,您可以看到 protobufsaved_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 模型,效果很好!但是我不知道这是否适用于其他型号!谨防!
谢谢大家......这是一个很长的时间,但我认为解释我的“旅程”和达到这个解决方案的推理会很好。