转换 tfjs 模型以在 c++ 中的 Tensorflow 中使用

Convert tfjs model for using in Tensorflow in c++

本文关键字:Tensorflow 中的 c++ tfjs 模型 转换      更新时间:2023-10-16

我是 tensorflow 的新手,我有一个问题,我的项目有两个主要部分,首先是用 NodeJs 编写的,从数据集训练我的模型并将模型保存到本地存储,所以我有两个文件:

  1. 模型.json
  2. 怀特斯.bin

第二部分是用 c++ 编写的,几天后我可以用 bazel 构建 tensorflow 并将其添加到我的 OpenCv 项目中,所以我的问题如下:

我想在 NodeJs 部分中训练我的模型,并在我的C++部分中使用这些模型。这可能吗? 我也看到了 tjs 转换器,但它将模型转换为在 NodeJs 中使用,反之亦然。

更新:经过大量搜索,我发现我应该将我的模型转换为 protobuff 文件,但 tfjs-Converter 不支持这种类型的转换,另一点是我想将我的模型与 opencv 库一起使用。

更新 2最后我可以将我的模型更改为 .pb 文件,首先我使用 tfjs_converter 转换为 keras 模型(.h5 文件),然后使用此 python 脚本转换为 .pb 文件,opencv 可以成功加载模型。但是我在使用模型时遇到了此错误:

libc++abi.dylib:以未捕获的类型异常终止 cv::异常: OpenCV(4.1.0)/tmp/opencv-20190505-12101-14vk1fh/opencv-4.1.0/modules/dnn/src/dnn.cpp:524: 错误:(-2:未指定的错误)无法创建图层 函数中"形状"类型的"flatten_Flatten1/形状" 'getLayerInstance'

有什么帮助吗?

谢谢

最后我解决了自己的问题。

这是我完成的步骤:

使用 tfjs
  1. 转换器将我的 tfjs 模型转换为 keras 模型
  2. 使用此python脚本将keras(.h5)模型更改为冻结模型(.pb)
  3. 使用本教程优化我的 .pb 模型

最后一切都很好!