Я недавно обучил модели обнаружения объектов в Google Cloud Vision. Я экспортировал файл метаданных jason, текстовый файл метки и файл tflite модели обученной модели и намереваюсь запустить его на Android. Однако я не могу запустить эту модель с помощью демонстрационного приложения Android, так как оно каждый раз вылетает.
Используемое демонстрационное приложение совместимо с локальной обученной и преобразованной моделью tflite, но не с той, которая была экспортирована из Google Cloud.
Что здесь может быть не так и как это можно решить?
Спасибо
Ссылка: Демо-приложение: https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection
Частичный журнал:
2020-01-24 11:29:11.628 18071-18071/org.tensorflow.lite.examples.detection E/libc: Access denied finding property "persist.camera.privapp.list"
2020-01-24 11:29:11.732 18071-18101/org.tensorflow.lite.examples.detection I/tensorflow: CameraConnectionFragment: Opening camera preview: 640x480
2020-01-24 11:29:11.769 18071-18102/org.tensorflow.lite.examples.detection D/vndksupport: Loading /vendor/lib/hw/android.hardware.graphics.mapper@2.0-impl.so from current namespace instead of sphal namespace.
2020-01-24 11:29:11.770 18071-18102/org.tensorflow.lite.examples.detection D/vndksupport: Loading /vendor/lib/hw/gralloc.msm8937.so from current namespace instead of sphal namespace.
2020-01-24 11:29:11.803 18071-18071/org.tensorflow.lite.examples.detection I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@5ab1c5e time:332335506
2020-01-24 11:29:12.198 18071-18101/org.tensorflow.lite.examples.detection D/tensorflow: CameraActivity: Initializing buffer 0 at size 307200
2020-01-24 11:29:12.201 18071-18101/org.tensorflow.lite.examples.detection D/tensorflow: CameraActivity: Initializing buffer 1 at size 153599
2020-01-24 11:29:12.203 18071-18101/org.tensorflow.lite.examples.detection D/tensorflow: CameraActivity: Initializing buffer 2 at size 153599
2020-01-24 11:29:12.204 18071-18101/org.tensorflow.lite.examples.detection I/tensorflow: DetectorActivity: Preparing image 1 for detection in bg thread.
2020-01-24 11:29:12.311 18071-18100/org.tensorflow.lite.examples.detection I/tensorflow: DetectorActivity: Running detection on image 1
2020-01-24 11:29:12.475 18071-18100/org.tensorflow.lite.examples.detection E/AndroidRuntime: FATAL EXCEPTION: inference
Process: org.tensorflow.lite.examples.detection, PID: 18071
java.lang.IllegalArgumentException: Cannot convert between a TensorFlowLite buffer with 307200 bytes and a Java Buffer with 270000 bytes.
at org.tensorflow.lite.Tensor.throwIfShapeIsIncompatible(Tensor.java:332)
at org.tensorflow.lite.Tensor.throwIfDataIsIncompatible(Tensor.java:305)
at org.tensorflow.lite.Tensor.setTo(Tensor.java:123)
at org.tensorflow.lite.NativeInterpreterWrapper.run(NativeInterpreterWrapper.java:148)
at org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:296)
at org.tensorflow.lite.examples.detection.tflite.TFLiteObjectDetectionAPIModel.recognizeImage(TFLiteObjectDetectionAPIModel.java:193)
at org.tensorflow.lite.examples.detection.DetectorActivity$2.run(DetectorActivity.java:183)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:175)
at android.os.HandlerThread.run(HandlerThread.java:65)
===================================== ===================
Обновление: теперь мы знаем, что это потому, что изображение, подаваемое на модель, и форма ввода модели не совпадают , Форма ввода / вывода моделей, обученных из Google Cloud Vision, кажется непоследовательной. Недавно я получил один из [1 320 320 3] и [1 20 4], а другой из [1 512 512 3] и [1 20 4].
Демонстрационное приложение предназначено для обрабатывать модели с [1 300 300 3] входом и [1 10 4] выходом.
Как назначить формы модели перед тренировкой в Google Cloud Vision или как сделать демонстрационное приложение способным обрабатывать модель определенной c формы?
================================= =======================
В качестве попытки включить демонстрационное приложение для обработки модели определенной c формы, я изменил TF_OD_API_INPUT_SIZE
с 300 на 320, что, похоже, решило проблему формы входных данных. Однако проблемы возникают на стороне вывода.
Новый журнал ошибок сообщает:
java.lang.IllegalArgumentException: Cannot copy between a TensorFlowLite tensor with shape [1, 20, 4] and a Java object with shape [1, 10, 4].
Изменение TEXT_SIZE_DIP
с 10 на 20. Не помогает.