有一个简单的分类为 keras 的模型,我已经将其转换为 tfjs 的模型,它在Desktop Chrome上可以正常工作,可以预测图像,但是在收到的Chrome Mobile上调用预测函数时出现以下错误:
Uncaught Error: Requested texture size [5120x5120] greater than WebGL maximum on this browser / GPU [4096x4096].
at validateTextureSize (tfjs@0.12.0:2)
at createAndConfigureTexture (tfjs@0.12.0:2)
at createFloat32MatrixTexture (tfjs@0.12.0:2)
at e.createFloat32MatrixTexture (tfjs@0.12.0:2)
at e.acquireTexture (tfjs@0.12.0:2)
at e.acquireTexture (tfjs@0.12.0:2)
at e.uploadToGPU (tfjs@0.12.0:2)
at tfjs@0.12.0:2
at Array.map (<anonymous>)
at e.compileAndRun (tfjs@0.12.0:2)
据我了解,Chrome移动版在纹理尺寸上有一些限制,并且我的模型超出了限制,因此出现了错误。
我的问题是我将如何解决这个问题?
我应该重新训练我的模型并使它的尺寸变小以便在Mobile上运行还是有其他解决方案?
注意:当前tfjs格式的模型约为112MB。
答案 0 :(得分:0)
我知道这是一篇过时的文章,但是由于我最近遇到相同的问题,我只是想补充一下我的发现。
正在发生的是:使用tf.image.fromPixels将图像转换为张量。然后,图像将被裁剪并调整大小。最后,为了与WebGL一起使用,将张量存储在纹理中。这是失败的地方。
最大纹理大小取决于设备和浏览器。几乎所有现代设备都可以处理2048 x 2048纹理。我们无法为此anything。
张量的大小不取决于:
对我而言唯一有效的方法是更改开始的预训练模型。所以我从faster_rcnn_inception_v2_coco
切换到ssd_mobilenet_v2_coco
。
答案 1 :(得分:0)
我遇到了同样的问题。模型在台式机上可以正常工作,但在移动设备上尝试使用model.predict时会崩溃。对于我的问题,由于卷积内核的大小,我能够找到原因。我发现我可以使用最大大小为(6,6)的卷积内核,而不会在移动设备上遇到问题。如果我达到(7,7)或更大,则会出现纹理大小错误。这个问题与我的输入大小无关。