问题标签 [tensorflowjs-converter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
247 浏览

tensorflow.js - 将 tf_op_layers 转换为 tfjs

我正在尝试将有状态的 LSTM 模型从 tf.keras 保存的模型(.h5)转换为 tfjs。由于 tfjs 还不支持有状态的 lstms,我需要处理模型之外的状态。现在,为了实现这一点,我只需要将现有 (.h5) 模型的一部分转换为 tfjs 模型。

我对 Keras 模型的权重进行了以下切片,并成功地将生成的子模型转换为 tfjs 层模型:

来自python代码的片段:

当我尝试将此模型加载到 JS 中tf.loadLayersModel时,以下是我得到的错误 -

UnhandledPromiseRejectionWarning:错误:未知层:TensorFlowOpLayer。这可能是由于以下原因之一:

该层是在 Python 中定义的,在这种情况下,它需要移植到 TensorFlow.js 或您的 JavaScript 代码。自定义层在 JavaScript 中定义,但未使用 tf.serialization.registerClass() 正确注册。

子模型总结:

我了解针对我的状态处理要求对张量执行的切片、整形和堆叠正在创建 tf_op_layers(我不确定它们是什么或如何管理它们)。现在,我不确定如何在 tfjs 中创建自定义层来加载这个模型。你能帮我创建自定义层tf_op_layer_strided_slice吗?以及如何处理 -tf_op_layer_Reshape作为tf_op_layer_stacktfjs 自定义层。

0 投票
0 回答
37 浏览

javascript - 使用自定义 keras 模型识别 tensorflowjs 中的对象

我想在 javascript 中使用 tensorflow 模型进行实时对象检测。为此,我正在关注 tensorflow.org 的本教程:https ://www.tensorflow.org/js/tutorials/conversion/import_keras 我在 keras 中训练了模型,将模型导出为 .h5 格式,将其转换为json 文件,最后导入模型。

这是我的 javascript 代码块的片段,

我要识别的图像是 255 x 255 ,RGB 我收到错误,输入图像是 3 维但预期是 4。我附上了错误的片段。 javascript中的错误

我尝试重新塑造输入图像但无济于事。有人可以帮忙吗?

0 投票
1 回答
369 浏览

tensorflow - 使用 TensorflowJS 2.0.1 从本机文件系统加载 tensorfow 模型

我正在尝试将预训练的 Keras 模型加载到我的小型反应应用程序中。由于使用 TensorFlow 2.0 版本,添加和更改的内容很少。我想知道应该如何从本机文件系统加载模型。

  1. 首先我导入 tensorflowJS
  1. 我的目录结构 model.json 和所需的所有 .bin 文件都位于与我引用它们的 App.js 相同的目录中。

  2. 加载预训练模型 -文档

不幸的是,我无法获取错误。谁能解释我错过了什么?

0 投票
1 回答
1187 浏览

javascript - Tensorflow.js 中的图像大小调整方法(resizeBilinear 和 resizeNearestNeighbor)不会返回正确的结果

问题

  1. resizeBilinear(*1) 和 resizeNearestNeighbor(*2) 有什么区别?特别是, resizeNearestNeighbor 不会返回正确的图像(图像的一半是黑色的)。(图像的一半是黑色的。)
  2. ResizeBilinear 不会返回正确的分割结果。(图像的一半是灰色的。)这是为什么呢?这与 resizeNearestNeighbor 的结果非常相似。

背景

我想开发一个在 Tensorflow.js 中进行分割的应用程序。幸运的是,我找到了一些 Python 中的分割示例代码。(*3) 我相信我可以通过将在那里获得的 Keras 模型转换为 TFJS 模型来在 Tensorflow.js 中进行分割。我试图调整 Tensorflow.js 中的图像大小,但我无法获得正确的结果。有没有人有什么好主意?

代码

这是我写的源代码。(我不习惯编写 JavaScript。)

捕获执行结果

从左到右。

  • 原始图像
  • 原始图像被拍摄并绘制在画布上
  • 使用 resizeNearestNeighbor 调整大小并在画布上绘制的原始图像(图像的一半是黑色的)
  • 使用 resizeBilinear 调整大小并在画布上绘制的原始图像(看起来正确)
  • 使用 resizeBilinear 调整大小并在画布上绘制的原始图像的分割(图像的一半是灰色的)

参考

(*1) https://js.tensorflow.org/api/latest/#image.resizeBilinear

(*2) https://js.tensorflow.org/api/latest/#image.resizeNearestNeighbor

(*3) https://github.com/anilsathyan7/Portrait-Segmentation

0 投票
1 回答
125 浏览

tensorflow - Keras SavedModel 与 Tensorflow SavedModel

我正在阅读 TensorflowJS 转换器的文档和源代码,它明确区分了 Keras SavedModel 和 Tensorflow SavedModel。

格式之间有什么区别以及跨格式支持故事是什么?

0 投票
1 回答
71 浏览

tensorflow.js - 转换分片的 Tesorflow 模型

我想在本地反应原生应用程序中使用 tensorflow.js 模型作为资产。问题是网络优化模型在多个文件中使用分片权重。但是反应原生 bundleResourceIO 处理程序只需要一个文件。我尝试使用 tensorflowjs_converter 转换模型。不幸的是没有成功,因为我不确切知道命令对参数的期望。例如,我尝试了以下方法:

有人成功转换模型吗?

0 投票
1 回答
303 浏览

tensorflow - Tensorflow:将 H5 层模型转换为 TFJS 版本导致未知层:TensorFlowOpLayer 在 TS 中工作时出错

我正在尝试从存储库运行转换后的模型:https ://github.com/HasnainRaz/Fast-SRGAN 。嗯,转换成功了。但是当我尝试初始化模型时,我看到了错误:"Unknown layer: TensorFlowOpLayer.". 如果我们调查保存的模型,我们可以看到 TensorFlowOpLayer:

模型结构

据我了解,这是代码的和平:

keras.layers.UpSampling2D(size=2, interpolation='bilinear')(layer_input).

我决定编写自己的课程“TensorFlowOpLayer”。

但它不起作用。有人可以帮助我了解如何写入方法“computeOutputShape”吗?第二个误解,为什么在上图中我们看到了下一层的顺序:

据我了解,TensorFlowOpLayer 层是python 代码中的“UpSampling2D” 。H5模型是通过网站调查的:https ://netron.app

TS中模型的初始化:

就像在python代码中一样:

然后,它是如何使用的:

就像在python代码中一样:

当我添加自己的类“TensorFlowOpLayer”时,我看到了下一个错误:
"expected input1 to have shape [null,null,null,32] but got array with shape [1,96,96,3]."

0 投票
2 回答
261 浏览

tensorflow - TensorflowJS:如何在 TFJS 中重置预训练模型的输入/输出形状

对于python 中的预训练模型,我们可以重置输入/输出形状:

源代码

我正在尝试在 TFJS 中做同样的事情:

TFJS 不支持模型中的某一层:

我自己写了:

使用模型:

但我得到了错误:

错误:输入 0 与层 p_re_lu 不兼容:输入形状的预期轴 1 的值为 96,但形状为 1,128,128,32。

预训练模型使用 96x96 像素图像进行训练。如果我使用 96x96 图像,它可以工作。但是如果我尝试使用其他尺寸(例如 128x128),它就不起作用了。在 python 中,我们可以轻松地重置输入/输出形状。为什么它在 JS 中不起作用?

0 投票
1 回答
252 浏览

tensorflow - `tensorflowjs_converter` 导致浏览器中的模型无法检测到任何对象

我正在从“ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8”为 tensorflow.js 构建对象检测模型。我已经训练了模型并使用tensorflowjs_convertercli 工具对其进行了转换。当我在 jupyter 中运行模型时,我得到以下输出:

jupyter 输出

但是当我将模型加载到 tensorflow.js 中时,它没有找到任何边界框。它确实在边界框张量中吐出了一些东西,如下所示:

tfjs 模型输出

大多是随机的。这些盒子都没有与之关联的类。最初,我认为 tfjs 模型不太准确,因为它看起来像转换器运行了一些优化。但是在提高了python notebook中的准确率后,tfjs的准确率并没有提高。

看起来没有办法关闭tensorflowjs_converter优化。真的吗?

还有什么我可以尝试让我的模型在 tfjs 中运行的吗?

这是我的pipeline_file.config

这是model.json转换器创建的文件:

还有我的转换器脚本(物有所值):

0 投票
0 回答
641 浏览

javascript - TensorflowJS 后端 CPU 内核 undefined 已注册

我正在使用这些脚本标签加载 TensorFlowJS 库和后端 GPU:

这可行,但它在控制台中给了我这个警告:

您的应用程序包含的操作足够小,可以在 CPU 后端执行,但是找不到 CPU 后端。考虑导入 CPU 后端 (@tensorflow/tfjs-backend-cpu) 以获得更好的性能。

但是当我用这个标签加载后端 CPU 时:

我收到这些错误:

如果我同时加载GPU 和 CPU,我只会收到kernel undefined is already registered警告。

SO和GitHub上的其他一些帖子说某些库可能被加载了两次?但我不能遗漏任何这些脚本标签......