python - 从 TensorFlow 到 ONNX 的自定义操作文档
问题描述
我正在尝试将经过训练的 Tensorflow 2.5 SavedModel 转换为 ONNX,希望最终能够将 ONNX 模型转换为 TensorRT 以加速推理。作为背景,它是我从 TensorFlow 1 到 TensorFlow 2 改编的3DFeatNet ( GitHub ) 论文的修改版本。
我的模型需要在 Tensorflow 中使用自定义操作,这些操作仅在 GPU 上运行。这些操作使用 注册tf.load_op_library()
,它链接到.so
编译用于实现操作的 CUDA/C++ 代码后生成的文件。
当我尝试使用以下命令转换 SavedModel 时,自定义操作未注册,并且当我在 Netron 中查看文件时,生成的 ONNX 图表不显示自定义操作。
python tf2onnx_convert.py --saved-model path/to/model \
--output path/to/output \
--load_op_libraries path/to/.so_files \
--verbose --rename-inputs $INPUTS \
--rename-outputs $OUTPUTS
因此,我有两个问题:
- 有没有一种方法可以
.so
在 ONNX 中注册文件,而无需将 CUDA/C++ 代码调整为 ONNX 自定义操作 API?如果没有,是否有关于如何操作的指南? - 当我将模型转换为 TensorRT 时,我是否需要在注册自定义操作时进行类似的过程?
先感谢您!如果需要更多信息,将编辑此帖子。
解决方案
--custom-ops
通过将标志添加到tf2onnx.convert
命令中,我能够在稍微修改后回答我自己的问题。
我最终的命令变成了
python tf2onnx_convert.py --saved-model path/to/model \
--output path/to/output/output_graph.onnx \
--load_op_libraries path/to/.so_files \
--custom-ops QueryBallPoint,GroupPoint \
--rename-inputs $INPUTS \
--rename-outputs $OUTPUTS
(其中 QueryBallPoint 和 GroupPoint 特定于我正在使用的模型,并且可以根据您的用例中的给定模块进行更改)
查看 Netron 生成的图表netron path/to/output/output_graph.onnx
显示了我的预期,所以我现在关闭这个问题。
我仍然会感谢对我的方法的反馈,以及对我的第二个问题的回答。谢谢!
推荐阅读
- javascript - 在打开之前从网站上的文件夹中加载所有图像
- sql-server - 将 DATEDIFF 结果插入表中的列?
- php - 如何在php函数输出中添加小数
- c# - WCF:尽管有较大的超时值,但套接字连接被中止
- animation - 如何统一播放正确的动画?
- shell - -su: 意外标记'('附近的语法错误
- swift - NSPredicate in Realm - 从结果中的数组中搜索任何项目
- jquery - 在 chrome 浏览器中,视频无法在引导模式内播放
- algorithm - 如何在O(lgn)中的红黑树中将所有大于或等于K的键值增加D
- vue.js - 如何设置更改路线之间的延迟