You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PoseNet ResNet50 tfjs模型转为tflite及转换报错求助

解决PoseNet ResNet50 TFJS模型转Keras SavedModel时的UnicodeDecodeError问题

首先,你遇到的UnicodeDecodeError是因为旧版TensorFlow.js Converter(1.7.2)的tensorflowjs_wizard工具在自动检测模型格式时,错误地将gzip压缩的权重文件(.bin格式)当成了UTF-8编码的JSON文件来读取——0x8b正是gzip文件的标志性字节。我们可以通过两种方式解决这个问题:

方法一:直接使用tensorflowjs_converter命令行工具(绕过向导)

向导的自动检测逻辑存在bug,直接用命令行指定输入输出格式就能避开这个问题:

  1. 确保你的模型文件夹(./posenet_resnet50_float_1_default_1)里有重命名后的model.json和所有权重文件(group1-shard*of*.bin)。
  2. 运行以下命令将TFJS模型转换为Keras SavedModel:
tensorflowjs_converter --input_format tfjs_layers_model --output_format keras_saved_model ./posenet_resnet50_float_1_default_1/model.json ./output_keras_model

方法二:升级TensorFlow.js Converter

你的TFJS版本(1.7.2)比较旧,新版本修复了很多此类bug,先升级工具:

pip install tensorflowjs --upgrade

升级完成后,再尝试使用tensorflowjs_wizard或者上述命令行工具,应该就能正常检测和转换模型了。

后续转TFLite模型

成功得到Keras SavedModel后,用TensorFlow Lite转换器生成TFLite文件:

import tensorflow as tf

# 加载SavedModel并转换
converter = tf.lite.TFLiteConverter.from_saved_model('./output_keras_model')
# 开启优化(可选)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
# 支持自定义操作(如果PoseNet包含TF原生不支持的操作)
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]
converter.allow_custom_ops = True

# 转换并保存模型
tflite_model = converter.convert()
with open('posenet_resnet50.tflite', 'wb') as f:
    f.write(tflite_model)

如果转换TFLite时遇到输入形状相关的错误,可以固定输入尺寸(比如适配iPhone XS的常用输入大小):

# 在转换前添加这行,替换input_1为你的模型实际输入层名称
converter.input_shapes = {'input_1': [1, 256, 256, 3]}

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:17:56