1

私は Google Cloud AutoML Vision をテストしています。トレーニング プロセスを完了し、エクスポートされたエッジ デバイス tflite モデル、10 万を超える画像、25 のラベルがあります。

次の 2 つのチュートリアルの手順と、以下のリポジトリのコードに従ってください: https://cloud.google.com/vision/automl/docs/edge-quickstart https://cloud.google.com/vision/automl/docs/tflite -android-tutorial 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 モデルがクラッシュします。

4

1 に答える 1