Unity中TensorFlow Lite加载模型触发NullReferenceException错误求助
Unity中TensorFlow Lite模型加载NullReferenceException排查方案
问题现象
使用asus4的tf-lite-unity-sample库加载图像分类TFLite模型时,触发NullReferenceException: Object reference not set to an instance of an object,错误栈指向TensorFlowLite.Interpreter构造函数,已确认模型路径可打印,但加载失败。
排查步骤
1. 验证模型文件有效性
- 用TensorFlow Lite官方工具(如Python的
tf.lite.Interpreter)加载模型,确认模型未损坏、格式合规。若模型本身有问题,Unity端必然加载失败。 - 检查模型量化格式是否与库兼容:全整数量化模型需确保输入输出张量类型与库的处理逻辑匹配。
2. 确认Unity模型文件导入设置
- 模型文件(
.tflite)需放置在StreamingAssets目录下,检查:- Read/Write Enabled是否勾选,避免读取权限不足。
- 打包时文件是否被正确包含:Editor调试需确保文件在
StreamingAssets下,打包构建需确认Asset Bundle设置或构建包含规则正确。
3. 校验模型路径正确性
- 必须用
Application.streamingAssetsPath拼接模型路径,避免相对/绝对路径错误,示例代码:string modelPath = Path.Combine(Application.streamingAssetsPath, "your_model.tflite"); - 用
File.Exists(modelPath)验证路径指向的文件是否存在,若返回false,说明路径错误或文件未被正确打包。
4. 排查Interpreter构造调用逻辑
- 若通过字节数组加载模型,先确认读取的字节数组非空:
byte[] modelBytes = File.ReadAllBytes(modelPath); if (modelBytes == null || modelBytes.Length == 0) { Debug.LogError("模型字节数组为空"); return; } var interpreter = new Interpreter(modelBytes); - 若直接传文件路径,需确认路径格式符合平台要求(如Windows路径分隔符、Android/iOS路径权限)。
5. 检查库与Unity版本兼容性
- 确认tf-lite-unity-sample库版本与当前Unity版本匹配:部分新版本库仅支持Unity 2021+,旧版Unity可能因兼容性问题导致构造函数内部空引用。
- 尝试切换到与Unity版本适配的库稳定版本(更新或回退)。
6. 查看底层错误日志
- 在
Interpreter.cs构造函数内临时添加日志,追踪原生库加载环节的状态,确认是原生库加载失败还是托管代码空引用。 - 查看Unity Player Log,排查是否存在原生层错误(如找不到TFLite动态链接库)。
内容的提问来源于stack exchange,提问作者Eldhose Kurian
相关产品推荐
相关产品推荐

