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");
}
}
無効な結果が得られます。初期モデルによる予測を確認しましたが、それらは正しいので、変換が適切に行われていないか、初期スクリプトと同じ方法で画像を前処理していないと考えています。
ヘルプ。
PS: コンバーターを実行すると、次のメッセージが表示されます。私が経験していることに直接関係があるかどうかはわかりません。
tensorflow/core/graph/graph_constructor.cc:750 ノード 'StatefulPartitionedCall' には 71 個の出力がありますが、_output_shapes 属性は 605 個の出力の形状を指定します。出力形状が不正確になる場合があります。