Tengo un modelo ONNX personalizado que toma imágenes del tamaño [batch_size, 1280, 720, 1] como entradas que quiero ejecutar con WebGL en un teléfono inteligente. El archivo html se ve así (estoy configurando la Img de entrada en cero solo por simplicidad para probar el modelo):
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.min.js"></script> <script type="module"> var Img = new Float32Array(1280*720) for(var i = 0; i < Img.byteLength; i++) { Img[i] = 0 } const session = await ort.InferenceSession.create('./Model.onnx', { executionProviders: ['webgl'] }); const tensorImg = new ort.Tensor("float32", Img, [1, 1280, 720, 1]) const feeds = { "input_1": tensorImg } const results = await session.run(feeds) console.log(results) </script>Esto se queja primero de las dimensiones incorrectas:
WebGL: INVALID_VALUE: texImage2D: width or height out of rangey luego que la entrada es NaN:
Uncaught TypeError: Invalid shape: NaN is not an integer at Function.validateDimsAndCalcSize (util.ts:730:15)Supongo que, debido a que las dimensiones de las imágenes de entrada no son potencias de dos, no puede funcionar en webgl. Cuando uso "wasm" en lugar de "webgl", funciona, pero es muy lento. ¿Que puedo hacer? ¿Hay alguna manera de resolver esto sin cambiar la arquitectura de la red?
Muchas gracias