我已经设法从模型花园下载了对象检测API(Tensorflow 2.0,对象检测API)。我能找到的所有推理代码(在目录中和在线)都能在批量大小为1的情况下工作。
我在考虑重新配置 pipeline.config 文件。更具体地说是eval_config(batch_size = 5)。这能做到吗?
对于我来说,如何通过可变批量支持进一步的训练/微调是令人困惑的......但推理却不是?
感谢您给予的任何提示。
我已经设法从模型花园下载了对象检测API(Tensorflow 2.0,对象检测API)。我能找到的所有推理代码(在目录中和在线)都能在批量大小为1的情况下工作。
我在考虑重新配置 pipeline.config 文件。更具体地说是eval_config(batch_size = 5)。这能做到吗?
对于我来说,如何通过可变批量支持进一步的训练/微调是令人困惑的......但推理却不是?
感谢您给予的任何提示。
3条答案
按热度按时间7qhs6swi1#
好了,在对代码进行了大量的修改之后,这是我对自己问题的回答:
从一个简单的预训练模型源开始:
例如:https://tfhub.dev/tensorflow/efficientdet/d2/1.。
这些模型不支持批量图像推理。你可以在
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].
这是一个交易破坏者。所以我试图寻找一个解决方案!Object Detection API
的一部分。在本页末尾的Source
部分中有这样的说明。The model's checkpoints are publicly available as a part of TensorFlow Object Detection API.
该链接会将您带到存储库
https://github.com/tensorflow/models/tree/master/research/object_detection
这是COCO
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md
培训最新车型的链接saved_model
和检查点数据都被给出了。protobuf模型有一个[1,None,None ,3]
的签名,这是不好的!这意味着我们只能在RGB空间中对一个具有可变宽度/高度的图像进行操作。但我们需要的是一个输入签名[None,None,None,3]
。exporter_main_v2.py
文件!该文件将您要以proto格式('saved_model')导出的模型的检查点作为参数。然而,默认情况下,输入签名被设置为[1,NONE,NONE,3]
。exporter_main_v2.py
使用的文件。在exporter_lib_v2.py
中,我们需要将几行代码从tf.TensorSpec(shape=[1, None, None, 3]
更改为tf.TensorSpec(shape=[None, None, None, 3]
。我在github回购网站上找到了一个拉取请求:https://github.com/tensorflow/models/pull/9228/commits/b2a6712cbe6eb9a8639f01906e187fa265f3f48e这很好地总结了变化!
我尝试了几个不同的efficientdet模型,它的工作很好!我不知道,但如果这是要工作的其他模型!小心!
谢谢大家...这是一个很长的一个,但我认为这将是很好的解释我的“旅程”和推理,以达到这个解决方案。
66bbxpm52#
它看起来像pipeline.config支持eval_config中batch_size,它应该像这样:
您可以查看the protos来检查pipeline.config中支持哪些参数。在本例中,您可以看到在eval.proto中指定了batch_size。
我还确认了batch_size在这里的Tensorflow对象检测API中使用。我看到了一个指定了原型但实际上没有使用的示例。
carvr3hs3#
在
exporter_lib_v2.py
中,你会在末尾找到一个dict,它迎合了不同类型的模型导出。请注意上面dict中的键,并参考下面给出的从检查点导出模型的命令:
input_type
标志接受DETECTION_MODULE_MAP
指令的密钥image_tensor
。因此,我们还可以传递其他密钥。现在,如果你对照这些键检查值,你会看到类。每个类有一个不同的
input_signature
。如果需要批量推理,
DetectionFromFloatImageModule
是最佳选择,因为其输入签名为input_signature=[tf.TensorSpec(shape=[None, None, None, 3], dtype=tf.float32)]
因此,在将模型从检查点文件夹导入到已保存的模型格式时,只需触发以下命令:
请注意,我已经将
input_type
更改为float_image_tensor
。这确保了模型可以在批处理模式下进行推理。