检测到tensorflow TF lite android应用程序崩溃

时间:2019-02-19 08:57:10

标签: android python tensorflow object-detection tensorflow-lite

我已经使用ssd_mobilenet_v2_quantized_coco训练了我的模型,这也是一个漫长而艰辛的挖掘过程。一旦训练成功,该模型就可以正确检测我的笔记本电脑中的图像,但是一旦检测到物体,应用程序就会在我的手机上崩溃。我使用了GitHub上可用的TF lite Android应用程序。我在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)

但是,我不知道在labels.txt中要进行哪些更改。可能地,我需要按照建议的here编辑该txt。任何其他建议和可能原因的解释均会受到赞赏。

更新。我加了???到labels.txt并编译/运行,但是我仍然遇到与上面相同的错误。 附言我也训练了ssdmobilenet_V2_coco(没有量化的模型),它在应用程序上运行时没有崩溃。我猜想,量化可能会以不同方式转换标签索引,并可能导致标签出站错误。

1 个答案:

答案 0 :(得分:0)

是的,因为标签的输出有时会变成垃圾值。要快速修复,您可以尝试以下操作:

添加条件:

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

此处10是为其训练模型的类的数量。您可以相应地对其进行更改。