如何将Azure Custom Vision导出的TensorFlow模型用于TensorFlow.js?
搞定Azure Custom Vision模型转TensorFlow.js的问题
嘿,我之前也踩过这个坑,给你理清楚咋弄哈!首先得明确:你从Azure Custom Vision导出的Android用.pb文件是冻结计算图(Frozen Graph)——它已经把模型结构和权重打包在一起了,根本不需要单独的JSON权重文件!你之前以为要分开的结构是另一种TF模型格式,和这个不一样,所以不用费劲找JSON啦。
接下来直接用TensorFlow.js的转换器就能把这个.pb文件转成TF.js能用的格式,具体步骤一步一步来:
先装转换器工具
打开终端/命令行,跑下面的命令把依赖装上:pip install tensorflow tensorflowjs转换冻结图到TF.js格式
假设你的.pb文件在./model/frozen_inference_graph.pb,还有标签文件labels.txt,运行下面的转换命令:tensorflowjs_converter \ --input_format=tf_frozen_model \ --output_node_names='你的输出节点名称' \ ./model/frozen_inference_graph.pb \ ./tfjs_model这里关键是要替换
你的输出节点名称,给你俩实用办法找它:- 用TensorFlow自带工具查询:
saved_model_cli show --dir ./model --all - 用Netron可视化工具打开
.pb文件,一眼就能定位输出节点(Custom Vision的分类模型一般叫Softmax或者predictions)。
- 用TensorFlow自带工具查询:
把标签文件转成TF.js友好的格式
把你的labels.txt改成JSON格式,比如命名成labels.json,内容就是把每行的标签做成数组:["猫", "狗", "鸟"](替换成你自己的实际标签即可)
最后在TF.js里加载使用
转换完成后,./tfjs_model文件夹里会有model.json和一堆权重分片文件,用TF.js的loadGraphModel就能加载:import * as tf from '@tensorflow/tfjs'; async function loadMyModel() { const model = await tf.loadGraphModel('/tfjs_model/model.json'); const labels = await fetch('/tfjs_model/labels.json').then(res => res.json()); // 接下来就可以用model.predict()做推理啦 } loadMyModel();
对了,要是转换的时候碰到输入尺寸的报错,就在命令里加个--input_shape参数指定模型输入维度,比如Custom Vision的分类模型通常是[1,224,224,3],命令就改成:
tensorflowjs_converter \ --input_format=tf_frozen_model \ --output_node_names='你的输出节点名称' \ --input_shape='[1,224,224,3]' \ ./model/frozen_inference_graph.pb \ ./tfjs_model
内容的提问来源于stack exchange,提问作者Kasper Kamperman
相关产品推荐
相关产品推荐

