如何配置 Tensorflow 对象检测 Android 演示以使用 Inception v2
How to configure Tensorflow object detection Android demo to work with Inception v2
我们已经构建了一个基于 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 模型?
(mobile-net 精度很差,但 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.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)
应该可以使用 SSD Inception,但不建议这样做。 Inception 对于移动设备来说相当大,我不认为我们现在没有对它的量化支持。
我读过一次这个问题。
我认为问题出在你的这行代码中:
private static final int MAX_RESULTS = 100;
这将创建一个具有指定长度的输出数组。我认为 SSD mobilenet 给出了最大数量的预测,但默认更快的 RCNN(没有你这边的任何配置)给你更多。尝试将此值增加到 500。
我们已经构建了一个基于 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 模型? (mobile-net 精度很差,但 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.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)
应该可以使用 SSD Inception,但不建议这样做。 Inception 对于移动设备来说相当大,我不认为我们现在没有对它的量化支持。
我读过一次这个问题。
我认为问题出在你的这行代码中:
private static final int MAX_RESULTS = 100;
这将创建一个具有指定长度的输出数组。我认为 SSD mobilenet 给出了最大数量的预测,但默认更快的 RCNN(没有你这边的任何配置)给你更多。尝试将此值增加到 500。