Actualmente estoy usando tfjs 3.8 para cargar un modelo de segmentación (cargado como tf.GraphModel ) en el lado del cliente. Para crear el Tensor de entrada, llamo a browser.fromPixels(imageData) , que crea el Tensor en la CPU a partir del objeto ImageData que también está en la CPU. Dado que estoy usando el backend webgl de webgl , los datos se envían a la GPU cuando se llama a la model.predict(tensor) . Todo esto funciona bien, excepto que mi objeto ImageData se crea a partir de una imagen en un lienzo con un WebGLRenderingContext , lo que significa que proviene de la GPU. Esta transferencia de datos GPU->CPU->GPU está ralentizando mi proceso, que estoy tratando de optimizar.
Busqué brevemente tfjs y no pude encontrar una manera de crear un Tensor en GPU para evitar la transferencia de datos GPU->CPU. ¿Hay alguna manera de mantener mis datos en la GPU?
La conversación detallada sobre este tema se encuentra en un hilo https://github.com/tensorflow/tfjs/issues/5765
La solución es simplemente proporcionar el lienzo con el contexto webgl a la llamada browser.fromPixels(canvas) . Esto creará el tensor directamente en la GPU.