Tenía un modelo UNet que entrené usando Python. Guardé el modelo completo como archivo Model.h5 .
Según la documentación de tensorflow JS:cómo importar un modelo de keras , convertí el modelo con la herramienta tensorflowjs_converter . Ahora tengo un Model.json y un montón de archivos de fragmentos.
Mi pregunta es, ¿cómo uso este modelo en un archivo Javascript para realizar la segmentación en la imagen?
Logré cargar el modelo e imprimir el resumen del modelo en la consola, aquí está el código que usé para eso:
async function app() { model = await tf.loadLayersModel(MODEL_JSON_PATH); model.summary(); }Este es el resumen del modelo de la consola del navegador:
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: 16640Entonces el modelo parece estar cargado perfectamente.
Ahora digamos que tengo una imagen en mi página web en una etiqueta img . ¿Cómo paso esa imagen a mi modelo y recibo el resultado? He visto tf.browser.fromPixels pero no estoy seguro de cómo proceder.
Cualquier ayuda / puntero a tales ejemplos será útil.
HH:
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);ACTUALIZADO
Error al verificar: se esperaba que input_1 tuviera forma [null, 1024,1024,3] pero obtuvo una matriz con forma [512,512,3]
const resized = tf.resizeBilinear(tensor, [1024, 1024]); const expanded = tf.expandDims(resized, 0); ...