基于玄铁C906哪吒Linux单板的TensorFlow Lite使用及自定义算子问题
玄铁C906平台TensorFlow Lite部署问题解决方案
一、正确使用编译好的TensorFlow Lite库
你遇到的tensorflow/lite/model.h: No such file or directory错误,原因是编译测试代码时指定的头文件路径有误。代码中#include <tensorflow/lite/model.h>要求编译器能找到tensorflow目录的父级路径,而非tensorflow/lite/。
修正后的编译命令
/home/fcqiao/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1/bin/riscv64-unknown-linux-gnu-g++ -o out test.cpp -march=rv64gcv0p7_zfh_xtheadc -mabi=lp64d -I ../../tensorflow/ ../libtensorflow-lite.a -lm -static
将-I参数的路径改为../../tensorflow/,确保编译器能定位到tensorflow/lite/model.h的完整路径。
额外注意事项
- 确认
../../tensorflow/是包含tensorflow子目录的上级目录,根据实际目录结构调整路径 - 保持编译参数顺序:源文件在前,库文件在后,避免出现未定义符号错误
- 若存在其他依赖缺失,可添加
-pthread -ldl等参数补充链接依赖
二、在TensorFlow Lite中使用自定义算子
步骤1:实现并注册自定义算子
- 编写算子计算逻辑:创建
.cc文件,继承tflite::OpKernel类,重写Eval方法实现算子的运算逻辑 - 注册算子:调用
tflite::RegisterOp接口,将算子名称、版本、对应的Kernel实现注册到TFLite算子库
步骤2:适配模型文件
确保DNN模型中的自定义算子节点配置与注册的算子一致,包括算子名称、输入输出维度等。可通过tflite_convert工具结合自定义转换逻辑,生成包含自定义算子的.tflite模型文件
步骤3:编译时集成自定义算子
- 若自定义算子为单独源码文件,直接加入编译命令:
/home/fcqiao/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1/bin/riscv64-unknown-linux-gnu-g++ -o out test.cpp your_custom_op.cpp -march=rv64gcv0p7_zfh_xtheadc -mabi=lp64d -I ../../tensorflow/ ../libtensorflow-lite.a -lm -static
- 若自定义算子已编译为静态库,将库文件添加到链接参数中(放在
libtensorflow-lite.a之后)
额外注意
- 自定义算子编译时需使用与TFLite相同的架构参数(
-march=rv64gcv0p7_zfh_xtheadc -mabi=lp64d) - 若需在模型转换阶段支持自定义算子,需编写对应的TensorFlow到TFLite的转换注册代码
内容的提问来源于stack exchange,提问作者fcqiao
相关产品推荐
相关产品推荐

