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

Android Studio加载自定义TensorFlow Lite模型报错问题咨询

问题根因分析
  1. 输入尺寸不匹配:你的自定义模型要求输入尺寸为[1, 320, 320, 3],但Dart调用代码中硬编码的输入尺寸INPUT_SIZE为300,预处理后的图像尺寸和模型要求不符,触发校验失败。
  2. 输出张量结构不匹配:你从Python测试可以看到自定义模型仅输出1个形状为[1,10,4]的检测框坐标张量,但是Dart代码按照预训练目标检测模型的标准格式,预留了4个输出张量的槽位(检测框、类别、得分、检测数量),输出数量、形状都不匹配导致校验失败。
  3. 预处理逻辑缺失:如果使用float32输入格式的模型,你的预处理代码没有做像素归一化操作,输入数据范围不符合模型要求;如果是uint8量化模型,也要确保输入类型和模型声明的类型一致。
  4. 模型转换参数不合理:你量化转换时设置了converter.experimental_new_converter = False,旧版转换器导出的模型可能存在兼容性问题。
解决步骤
  • 第一步:修改输入尺寸匹配,将Dart代码中的static const int INPUT_SIZE = 300改为320。
  • 第二步:对齐输出张量逻辑,二选一即可:
    • 导出SavedModel时将NMS后处理节点一起导出,让最终TFLite模型输出4个符合标准目标检测格式的张量,和预训练模型结构对齐
    • 修改Dart代码的输出处理逻辑,仅初始化1个输出TensorBuffer,自行补充后处理逻辑解析检测结果、过滤阈值
  • 第三步:补全预处理逻辑,如果使用float32输入模型,在ImageProcessorBuilder中添加归一化操作:
    .add(NormalizeOp([0.0, 0.0, 0.0], [255.0, 255.0, 255.0]))
    
  • 第四步:优化模型转换代码,删除converter.experimental_new_converter = False配置,使用默认的新版转换器导出模型,避免兼容性问题。
常见疑问解答
  • 为什么预训练模型可以正常运行?
    你使用的预训练模型是标准TensorFlow Lite目标检测格式,输入300*300,输出4个张量,完全匹配你现有的Dart调用逻辑,所以不会报错。
  • 是模型问题还是调用逻辑问题?
    两者都有,你的自定义模型结构、输入输出参数和现有调用逻辑不匹配,修改其中一侧对齐即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:45:04