Тензор потока TF Lite Android-приложение сбой после обнаружения - PullRequest
0 голосов
/ 19 февраля 2019

Я обучил свою модель, используя ssd_mobilenet_v2_quantized_coco , что также было долгим кропотливым процессом копания.Как только обучение прошло успешно, модель правильно обнаруживала изображения с моего ноутбука, но на моем телефоне, как только обнаруживался объект, приложение зависало.Я использовал приложение Android TF lite, доступное на GitHub .Я выполнил некоторую отладку в Android Studio и получил следующий журнал ошибок при обнаружении объекта и сбое приложения:

I/tensorflow: MultiBoxTracker: Processing 0 results from 314 I/tensorflow: 

DetectorActivity: Preparing image 506 for detection in bg thread.

I/tensorflow: DetectorActivity: Running detection on image 506

I/tensorflow: MultiBoxTracker: Processing 0 results from 506

I/tensorflow: DetectorActivity: Preparing image 676 for detection in bg thread.

I/tensorflow: DetectorActivity: Running detection on image 676

E/AndroidRuntime: FATAL EXCEPTION: inference
    Process: org.tensorflow.lite.demo, PID: 3122
    java.lang.ArrayIndexOutOfBoundsException: length=80; index=-2147483648
        at java.util.Vector.elementData(Vector.java:734)

    at java.util.Vector.get(Vector.java:750)
    at org.tensorflow.demo.TFLiteObjectDetectionAPIModel.recognizeImage(TFLiteObjectDetectionAPIModel.java:213)
    at org.tensorflow.demo.DetectorActivity$3.run(DetectorActivity.java:247)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.os.HandlerThread.run(HandlerThread.java:65)

Я предполагаю, что ярлыки, расположенные в файле .txt, как-то неправильно читаются.Это связано со строкой:

в org.tensorflow.demo.TFLiteObjectDetectionAPIModel.recognizeImage (TFLiteObjectDetectionAPIModel.java:213)

, и эта строка соответствует следующему коду:

labels.get((int) outputClasses[0][i] + labelOffset)

Однако я не знаю, что изменить в label.txt.Возможно, мне нужно отредактировать этот текст в соответствии с предложением здесь .Любые другие предложения и объяснения возможных причин приветствуются.

Обновление.Я добавил ???к файлам label.txt и compiled / run, но я все еще получаю ту же ошибку, что и выше.PS Я также обучил ssdmobilenet_V2_coco (модель без квантования), и она работает без сбоев в приложении.Я предполагаю, что, возможно, квантование по-разному преобразует индексы меток и, возможно, приводит к внешней ошибке для меток.

1 Ответ

0 голосов
/ 06 июня 2019

Да, это потому, что иногда вывод меток получает мусор.Для быстрого исправления вы можете попробовать это:

добавить условие:

  if((int) outputClasses[0][i]>10)
  {
    outputClasses[0][i]=-1;
  }

здесь 10 - это количество классов, для которых была подготовлена ​​модель.Вы можете изменить его соответственно.

...