You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何调用predict_on_batch时,不同batch size的输入返回相同长度输出?

问题原因与解决办法

核心原因

  • 你使用的YOLOv3 Keras实现本身就是多输出结构,predict_on_batch接口在处理多输出模型时,会返回与模型输出头数量一致的结果列表,列表长度和输入batch size没有关联,你观测到的len(output)=2就是模型的2个检测输出头的数量。
  • 你的测试代码仅打印了输出列表的长度,没有打印列表内每个张量的具体形状,因此误将输出头的数量判定为和batch相关的输出维度。实际上列表内每个张量的第一维就是对应的batch size:输入1个样本时每个张量第一维为1,输入5个样本时每个张量第一维为5。

解决方法

你可以直接访问输出列表内的每个张量获取对应batch的检测结果,示例代码如下:

# 单样本输入测试
input_batch = tf.ones((1,416,416,3))
output = model.predict_on_batch(input_batch)
print(output[0].shape) # 第一个检测头输出,shape第一维为1
print(output[1].shape) # 第二个检测头输出,shape第一维为1

# 5样本输入测试
input_batch = tf.ones((5,416,416,3))
output = model.predict_on_batch(input_batch)
print(output[0].shape) # 第一个检测头输出,shape第一维为5
print(output[1].shape) # 第二个检测头输出,shape第一维为5

如果你需要得到(batch_size, a, b)格式的统一输出,可以结合YOLO的后处理逻辑,对多个检测头的输出做合并、非极大值抑制(NMS)操作,过滤无效检测框后即可得到第一维为batch size的最终检测结果。

内容的提问来源于stack exchange,提问作者Sid Anand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:48:04