我们已经基于Tensorflow对象检测Android演示应用程序构建了一个Android应用程序。当使用Mobilenet网络时,它可以工作,但是如果我们尝试使用基于Inception v2的网络,它就会崩溃。
Tensorflow Inception v2对象检测是否可以在Android上运行?
https://github.com/tensorflow/models/tree/master/research/object_detection
我们在这里使用与Tensorflow检测器演示完全相同的代码。 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/android/src/org/tensorflow/demo/TensorFlowObjectDetectionAPIModel.java
使用TF对象检测API。 如果我们使用经过ssd_mobilenet_v2_coco训练的网络pb文件,则演示应用程序将运行。 如果我们使用经过faster_rcnn_inception_v2_coco训练的网络pb文件,它将崩溃,(见下文)
Android应用程序是否可以与Inception v2模型一起使用? (移动网络的准确性很差,但是Inception更好)
11-14 12:11:47.817 7122-7199/org.tensorflow.demo E/AndroidRuntime: FATAL EXCEPTION: inference
Process: org.tensorflow.demo, PID: 7122
java.nio.BufferOverflowException
at java.nio.FloatBuffer.put(FloatBuffer.java:444)
at org.tensorflow.Tensor.writeTo(Tensor.java:488)
at org.tensorflow.contrib.android.TensorFlowInferenceInterface.fetch(TensorFlowInferenceInterface.java:488)
at org.tensorflow.contrib.android.TensorFlowInferenceInterface.fetch(TensorFlowInferenceInterface.java:442)
at org.tensorflow.demo.TensorFlowObjectDetectionAPIModel.recognizeImage(TensorFlowObjectDetectionAPIModel.java:170)
at org.tensorflow.demo.DetectorActivity$3.run(DetectorActivity.java:288)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
答案 0 :(得分:2)
尽管不建议使用SSD Inception,但应该可以使用。对于移动设备而言,初始存储空间非常大,而且我不认为我们现在没有对此的量化支持。
答案 1 :(得分:2)
我读过一次这个问题。
我认为问题出在您的代码的这一行:
private static final int MAX_RESULTS = 100;
这将创建一个具有指定长度的输出数组。我认为SSD mobilenet最多可以提供此数目的预测,但是默认情况下更快的RCNN(无需您进行任何配置)可以为您提供更多的预测。尝试将该值例如增加到500。