做出错误预测的图像分类图模型
Image Classification Graph model making wrong predictions
我正在使用 make_image_classifier python 脚本在一组新图像上重新训练 mobilenetv2。我的最终目标是在浏览器中使用 tfjs 进行预测。
这正是我正在做的事情:
第 1 步:重新训练模型
make_image_classifier \
--image_dir input_data \
--tfhub_module https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4 \
--image_size 224 \
--saved_model_dir ./trained_model \
--labels_output_file class_labels.txt \
--tflite_output_file new_mobile_model.tflite
第 2 步:使用 tensorflowjs_converter
将 tf 保存的模型转换为图形模型
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
--signature_name=serving_default \
--saved_model_tags=serve \
trained_model/ \
web_model/
第 3 步:在浏览器中加载新模型,预处理图像输入并要求模型进行预测
const model = tf.loadGraphModel('model.json').then(function(m){
var img = document.getElementById("img");
var processed=preprocessImage(img, "mobilenet")
window.prediction=m.predict(processed)
window.prediction.print();
})
})
function preprocessImage(image,modelName){
let tensor=tf.browser.fromPixels(image)
.resizeNearestNeighbor([224,224])
.toFloat();
console.log('tensor pro', tensor);
if(modelName==undefined)
{
return tensor.expandDims();
}
if(modelName=="mobilenet")
{
let offset=tf.scalar(127.5);
console.log('offset',offset);
return tensor.sub(offset)
.div(offset)
.expandDims();
}
else
{
throw new Error("Unknown Model error");
}
}
我得到的结果无效。我检查了初始模型所做的预测,它们是正确的,所以我在想要么转换没有正确发生,要么我没有按照与初始脚本相同的方式预处理图像。
求助。
P.S:当 运行 转换器时,我收到以下消息。不确定它是否与我所经历的直接相关。
tensorflow/core/graph/graph_constructor.cc:750 Node 'StatefulPartitionedCall' has 71 outputs but the _output_shapes attribute specifies shapes for 605 outputs. Output shapes may be inaccurate.
make_image_classifier
创建一个指定给 tensorflow lite 的 saved_model。如果您更愿意将 mobilenet 转换为 tensorflow.js,使用的命令已在此 answer 中给出。
您需要使用 retrain.py
而不是使用 make_image_classifier
,可以通过以下方式下载
curl -LO https://github.com/tensorflow/hub/raw/master/examples/image_retraining/retrain.py
我正在使用 make_image_classifier python 脚本在一组新图像上重新训练 mobilenetv2。我的最终目标是在浏览器中使用 tfjs 进行预测。
这正是我正在做的事情:
第 1 步:重新训练模型
make_image_classifier \
--image_dir input_data \
--tfhub_module https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4 \
--image_size 224 \
--saved_model_dir ./trained_model \
--labels_output_file class_labels.txt \
--tflite_output_file new_mobile_model.tflite
第 2 步:使用 tensorflowjs_converter
将 tf 保存的模型转换为图形模型tensorflowjs_converter \
--input_format=tf_saved_model \
--output_format=tfjs_graph_model \
--signature_name=serving_default \
--saved_model_tags=serve \
trained_model/ \
web_model/
第 3 步:在浏览器中加载新模型,预处理图像输入并要求模型进行预测
const model = tf.loadGraphModel('model.json').then(function(m){
var img = document.getElementById("img");
var processed=preprocessImage(img, "mobilenet")
window.prediction=m.predict(processed)
window.prediction.print();
})
})
function preprocessImage(image,modelName){
let tensor=tf.browser.fromPixels(image)
.resizeNearestNeighbor([224,224])
.toFloat();
console.log('tensor pro', tensor);
if(modelName==undefined)
{
return tensor.expandDims();
}
if(modelName=="mobilenet")
{
let offset=tf.scalar(127.5);
console.log('offset',offset);
return tensor.sub(offset)
.div(offset)
.expandDims();
}
else
{
throw new Error("Unknown Model error");
}
}
我得到的结果无效。我检查了初始模型所做的预测,它们是正确的,所以我在想要么转换没有正确发生,要么我没有按照与初始脚本相同的方式预处理图像。
求助。
P.S:当 运行 转换器时,我收到以下消息。不确定它是否与我所经历的直接相关。
tensorflow/core/graph/graph_constructor.cc:750 Node 'StatefulPartitionedCall' has 71 outputs but the _output_shapes attribute specifies shapes for 605 outputs. Output shapes may be inaccurate.
make_image_classifier
创建一个指定给 tensorflow lite 的 saved_model。如果您更愿意将 mobilenet 转换为 tensorflow.js,使用的命令已在此 answer 中给出。
您需要使用 retrain.py
而不是使用 make_image_classifier
,可以通过以下方式下载
curl -LO https://github.com/tensorflow/hub/raw/master/examples/image_retraining/retrain.py