#javascript #image-segmentation #tensorflow.js
Вопрос:
У меня была неустановленная модель, которую я обучал с помощью Python. Я сохранил полную модель как Model.h5
файл.
Согласно документации tensorflow JS — Как импортировать модель keras, я преобразовал модель с помощью tensorflowjs_converter
инструмента. Теперь у меня есть Model.json
куча файлов-осколков.
Мой вопрос в том, как мне использовать эту модель в файле Javascript для выполнения сегментации изображения?
Мне удалось загрузить модель и распечатать сводку модели в консоли, вот код, который я использовал для этого:
async function app() {
model = await tf.loadLayersModel(MODEL_JSON_PATH);
model.summary();
}
Это краткое описание модели из консоли браузера:
Layer (type) Output shape Param # Receives inputs
==================================================================================================
input_1 (InputLayer) [null,1024,1024,3] 0
conv1_pad (ZeroPadding2D) [null,1026,1026,3] 0 input_1[0][0]
conv1 (Conv2D) [null,512,512,32] 864 conv1_pad[0][0]
.... <Many more layers here> ....
Total params: 6315522
Trainable params: 6298882
Non-trainable params: 16640
Таким образом, модель, похоже, загружена идеально.
Теперь предположим, что у меня есть изображение на моей веб-странице в img
теге. Как мне передать это изображение моей модели и получить результат? Я видел tf.browser.fromPixels
, но не знаю, как действовать дальше.
Любая помощь / указатели на такие примеры будут полезны.
Ответ №1:
ХТХ:
const img = document.getElementById(elementID);
const tensor = tf.browser.fromPixels(img); // creates tensor from image element
const model = await tf.loadLayersModel(MODEL_JSON_PATH); // load your model
const res = model.predict(tensor); // or model.execute(tensor) // run model
tf.dispose(tensor); // dispose input tensor
const data = await res.arraySync(); // download results from tensor into standard array
tf.dispose(res); // dispose results tensor
console.log(data);
обновленный
Ошибка при проверке : ожидалось, что input_1 будет иметь форму [null,1024,1024,3], но получил массив с формой [512,512,3]
const resized = tf.resizeBilinear(tensor, [1024, 1024]);
const expanded = tf.expandDims(resized, 0);
...
Комментарии:
1. Я знаю, что опоздал, но когда я использую это, я получаю ошибку :
Error when checking : expected input_1 to have shape [null,1024,1024,3] but got array with shape [512,512,3].
Есть идеи, как это решить?2. Я отредактировал ответ, чтобы включить это…