keras tensorflowjs中的predict()在从python转换后无法按预期工作

unguejic  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(119)

编辑:根据@mrk的评论提供了其他信息
1.我使用KerasCV RetinaNet检测某些对象,然后使用model.save("saved_models/retinanet_model.keras")保存它
模型在Python中运行良好。
1.我想在nodejs中使用此模型;因此,使用以下代码转换它:tensorflowjs_converter --input_format=keras --output_format=tfjs_graph_model saved_models/retinanet_model.keras tfjs_models/retinanet_model

  • 转换作业会提供下列警告消息:WARNING:tensorflow:Compiled the loaded model, but the compiled metrics have yet to be built. 'model.compile_metrics' will be empty until you train or evaluate the model.

1.然后,我使用retinaNetModel = await tf.loadGraphModel("file://./tfjs_models/retinanet_model/model.json");将模型加载到nodejs中
然而,retinaNetModel.predict()与原始模型输出并不匹配,无法预测任何内容。
有几个观察我想分享,这使我认为模型在某种程度上没有正确转换;尽管事实上我只得到一个警告,而不是一个错误。

  • 在python中,如果模型找不到任何东西,bounding_box、类等的值会得到-1。但是,在tensorflowjs中,它看起来像是随机的负值。我得到两个Tensor作为响应,其中第一个Tensor包含bounding_box的值,第二个Tensor包含类的概率。例如,第二个Tensor类似于:
[
  [
    [ -4.490991592407227, -4.7061991691589355, -4.518319606781006 ],
    [ -4.743373394012451, -4.800686359405518, -4.49501371383667 ],
    ...
    [ -4.731906414031982, -4.996838569641113, -4.9045610427856445 ],
  ]
]

字符串

  • 另一个意外的行为与输出Tensor值的大小有关。在tensorflowjs中,类和bounding_boxes有76725个项目/数组。为什么会有这么高的数字?在python中,模型会为bounding_box、类等生成100个长度的数组。

我使用同一台机器来完成所有任务(训练RetinaNet、转换并加载到nodejs中的tensorflowjs)。pip list | grep tensorflow生成以下内容

tensorflow                     2.15.0
tensorflow-datasets            4.9.3
tensorflow-decision-forests    1.8.1
tensorflow-estimator           2.15.0
tensorflow-hub                 0.15.0
tensorflow-io-gcs-filesystem   0.34.0
tensorflow-macos               2.15.0
tensorflow-metadata            1.14.0
tensorflowjs                   4.14.0


我使用了相同的图像数据。事实上,我从python中编写了图像数组,并在nodejs中读取它以确保它完全相同。我通过let imageTensor = tf.tensor(pixeldata).reshape([640, 640, 3]);对数据数组进行了整形,因为我的图像是640 x640。
如果你有任何建议/指示,我们将不胜感激。
谢谢你,
道格

bf1o4zei

bf1o4zei1#

根据所提供的信息,很难给出具体的建议。不过,我会继续如下。
1.检查您的数据管道在node.js环境中是否正常工作。
1.模型转换是否顺利完成-检查您的日志是否有错误,如果没有,也要检查警告。
1.您是否使用兼容的tensorflow.js版本来转换模型?
1.你的模型输出看起来如何,是否缺少一些后处理步骤?
如果这不能解决您的问题,答案肯定会帮助我们帮助您。

相关问题