Soy nuevo en JS. Tengo un modelo ML que segmenta imágenes. Proporciono al modelo una imagen, a la que predice la salida. Obtengo la matriz de salida correcta, lo he verificado.
Pero cuando trato de dibujar esta salida en un lienzo usando tf.browser.toPixel , siempre obtengo la imagen anterior.
Es decir, si proporciono una entrada como:
Input : img1 -> img2 -> img3... output: <random shape> -> img1_prediction -> img2_prediction... Donde la random shape es esta siempre, sin importar cuál sea la entrada. Lo he comprobado, este no es el resultado de mi modelo.
Aquí está el código para esto:
async function detect_custom(imgTag, canvas) { let tensor = tf.browser.fromPixels(imgTag).toFloat(); //imgTag is img element in html (input image) tensor = tensor.expandDims(0); const res = model.predict(tensor).squeeze(); tf.dispose(tensor); // Everything is working correctly up to this point. await tf.browser.toPixels(res, canvas); // Problematic (I think) } Encontré el await tf.browser.toPixels(res, canvas) de esta respuesta. ¿Alguien puede ayudar qué estoy haciendo mal?
Lo he comprobado, este no es el resultado de mi modelo.
¿Cuál es la salida del modelo?
¿Y estás seguro de que toma 0..255 como rango de entrada? si la entrada es float32 , es probable que espere valores en el rango 0..1, y parece que la salida ha explotado.
intente tensor = tensor.div(255.0) antes de la inferencia para normalizar a 0..1
o tensor = tensor.div(127.5).sub(1) para normalizar a -1..1