使用tfjs在Chrome移动版上图像预测失败,但在Chrome桌面上有效

时间:2018-07-23 16:05:03

标签: tensorflow keras tensorflow.js chrome-mobile

有一个简单的分类为 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。

2 个答案:

答案 0 :(得分:0)

我知道这是一篇过时的文章,但是由于我最近遇到相同的问题,我只是想补充一下我的发现。

正在发生的是:使用tf.image.fromPixels将图像转换为张量。然后,图像将被裁剪并调整大小。最后,为了与WebGL一起使用,将张量存储在纹理中。这是失败的地方。

最大纹理大小取决于设备和浏览器。几乎所有现代设备都可以处理2048 x 2048纹理。我们无法为此anything

张量的大小不取决于:

  • 输入的解析度
  • 输入大小
  • 转换后的模型中的输出节点数
  • 转换后的模型中输出节点的类型
  • 用于转换模型的量化字节
  • Trainig数据集

对我而言唯一有效的方法是更改​​开始的预训练模型。所以我从faster_rcnn_inception_v2_coco切换到ssd_mobilenet_v2_coco

答案 1 :(得分:0)

我遇到了同样的问题。模型在台式机上可以正常工作,但在移动设备上尝试使用model.predict时会崩溃。对于我的问题,由于卷积内核的大小,我能够找到原因。我发现我可以使用最大大小为(6,6)的卷积内核,而不会在移动设备上遇到问题。如果我达到(7,7)或更大,则会出现纹理大小错误。这个问题与我的输入大小无关。