Я тестирую видение Google Cloud AutoML, я прошел процесс обучения, у меня есть экспортированная tflite модель периферийного устройства, более 100 тыс. Изображений, 25 этикеток.
Следуя инструкциям этих двух руководств и коду из репозитория ниже: 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, следуя инструкциям по руководствам по ссылке выше, дает сбой.
*Beta* This product or feature is in a pre-release state and might change or have limited support. For more information, see Product launch stages.
, я бы отправил отзыв на странице и / или создал бы тикет проблемы. - person Morrison Chang   schedule 09.05.2019