如何通过TF Object Detection API实现EfficientDet批量图像推理而非单张
关于TensorFlow 2.x Object Detection API批量推理的问题解答
1. 修改eval_config.batch_size实现批量推理的可行性
- 如果你是用官方自带的
model_main_tf2.py走评估流程批量处理测试集,这个方案完全可行。eval_config里的batch_size参数本身就是控制评估阶段的输入批次大小,改成5之后,评估流程会自动按批次加载图像,一次性输出5张图的检测结果。 - 如果你是导出SavedModel之后做独立部署推理,仅修改config文件没有任何作用。默认导出的SavedModel输入签名固定为单张图像维度
(1, 高度, 宽度, 3),和config里的eval配置没有绑定关系,需要修改导出逻辑才能支持批量输入。
2. 训练支持可变batch、推理默认仅支持单张的原因
模型本身是完全支持批量推理的,官方默认只给单张推理的示例只是工程实现上的取舍:
- 训练阶段输入管道天然按批次设计,模型构建时batch维度会被设为动态的
None,所以天然支持可变batch size训练。 - 目标检测的输出是变长结构(每张图的检测框数量不固定),批量推理需要额外做批次维度的结果对齐、拆分处理,官方为了简化示例代码的逻辑,默认只提供了单张推理的实现,不是模型能力不支持。
- 绝大多数普通用户的使用场景单张检测就能满足需求,官方没有把批量推理作为默认能力对外暴露。
3. 实操建议
- 如果只是需要批量处理本地数据集拿检测结果:直接修改
eval_config.batch_size = 5,配套调整eval_input_reader的输入路径配置,运行model_main_tf2.py的eval模式即可拿到批量结果。 - 如果需要导出可批量推理的SavedModel:修改
exporter_lib_v2.py中的输入签名定义,将输入张量的第一维度从固定值1改为None,导出时指定input_type = 'image_tensor',导出后的模型即可接收任意batch size的输入。 - 自行封装推理逻辑时,注意对输出结果按batch维度拆分,分别提取每张图的检测框、置信度、类别标签即可。
内容的提问来源于stack exchange,提问作者Billy.G
相关产品推荐
相关产品推荐

