我正在测试 Google Cloud AutoML 视觉,我已经完成了训练过程,有一个导出的边缘设备 tflite 模型,超过 10 万张图像,25 个标签。
按照这两个教程中的说明和以下存储库中的代码:https: //cloud.google.com/vision/automl/docs/edge-quickstart https://cloud.google.com/vision/automl/docs/tflite -android 教程 https://github.com/googlecodelabs/tensorflow-for-poets-2/tree/master/android/tflite
我假设问题不在于自定义 tflite 问题,而是本教程未解决的某种兼容性问题(错误或因为它已过时?)
上面 github 存储库中包含的具有预训练模型的示例应用程序无需任何更改即可工作。当我换出 tflite 包并进行教程要求的代码更改时,我遇到了 BufferOverflowException
我假设问题不在于自定义 tflite 问题,而是本教程未解决的某种兼容性问题(错误或因为它已过时?)
上面 github 存储库中包含的具有预训练模型的示例应用程序无需任何更改即可工作。当我换出 tflite 包并进行教程要求的代码更改时,我遇到了 BufferOverflowException
try/catch 块中的代码崩溃(由我添加以查看更多发生的情况)
'''
private void convertBitmapToByteBuffer(Bitmap bitmap) {
if (imgData == null) {
return;
}
imgData.rewind();
bitmap.getPixels(intValues, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
// Convert the image to floating point.
int pixel = 0;
long startTime = SystemClock.uptimeMillis();
for (int i = 0; i < DIM_IMG_SIZE_X; ++i) {
for (int j = 0; j < DIM_IMG_SIZE_Y; ++j) {
final int val = intValues[pixel++];
try
{
imgData.putFloat((((val >> 16) & 0xFF))/IMAGE_STD);
imgData.putFloat((((val >> 8) & 0xFF))/IMAGE_STD);
imgData.putFloat((((val) & 0xFF))/IMAGE_STD);
}
catch (BufferOverflowException e)
{
Log.e("TfLiteCameraDemo", "Exception caught: ", e);
}
}
}
long endTime = SystemClock.uptimeMillis();
Log.d(TAG, "Timecost to put values into ByteBuffer: " + Long.toString(endTime - startTime));
}
'''
按照上面链接中的教程的说明,导入的 tflite 模型会崩溃。