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

SSD模型转TFLite后interpreter输出含义及类别概率转换问题

问题1:output_details的返回内容是什么?

interpreter.get_output_details()返回的是由字典组成的列表,每个字典对应模型一个输出张量的完整元信息,常用字段如下:

  • index:输出张量的索引,调用get_tensor()时需要传入该值读取对应输出
  • name:输出张量的原始名称
  • dtype:输出张量的数据类型
  • shape:输出张量的维度形状
  • quantization:量化模型的缩放系数、零点参数,非量化模型该值为(0,0)

你目前代码里只读取了output_details[0]对应的第一个输出张量,你的SSD模型实际上有4个输出张量,剩下的分别对应检测置信度、类别索引、有效检测框数量。

问题2:形状tf.Tensor([ 1 10 4], shape=(3,), dtype=int32)的含义

这是第一个输出张量(检测框坐标)的三维形状,每个维度的数值含义如下:

  • 第一个值1:批次大小,代表你单次输入了1张图片
  • 第二个值10:模型配置的最大检测框数量,你训练时设置的单图最多输出10个检测结果
  • 第三个值4:每个检测框的坐标参数,顺序为归一化的[y_min, x_min, y_max, x_max],数值范围一般在0~1之间,超出部分是边界框溢出的合理情况,和你打印的10组4个坐标值完全对应。

问题3:如何获取每个类别的对应概率

你目前只读取了检测框坐标的输出,还需要读取另外两个输出张量才能拿到类别和概率信息,补全代码如下:

# 读取全部所需输出,去掉批次维度(第一个维度的1)
# 检测框坐标,形状(10,4)
boxes = interpreter.get_tensor(output_details[0]['index'])[0]
# 检测置信度(即你需要的类别概率),形状(10,)
scores = interpreter.get_tensor(output_details[1]['index'])[0]
# 检测类别索引,形状(10,),数值为0~9对应你训练的10个类别
classes = interpreter.get_tensor(output_details[2]['index'])[0]

# 可以按阈值过滤有效结果,比如置信度大于0.5的结果
for i in range(len(scores)):
    if scores[i] > 0.5:
        print(f"类别索引:{int(classes[i])},置信度:{scores[i]},框坐标:{boxes[i]}")

如果你的模型是int8量化模型,需要先用量化参数将输出的整数值转换为浮点型的真实概率:

# 从output_details[1]读取量化参数
scale, zero_point = output_details[1]['quantization']
scores = (scores.astype(np.float32) - zero_point) * scale

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:48:02