android - java.nio.BufferOverflowException 运行 tensorflow 模型
问题描述
在我的 android 应用程序中运行 tensorflow 模型时出现此致命错误:
Caused by: java.nio.BufferOverflowException
at java.nio.HeapFloatBuffer.put(HeapFloatBuffer.java:179)
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)
代码如下:
//sample values: WANTED_WIDTH = 714, WANTED_HEIGHT = 438
int[] intValues = new int[WANTED_WIDTH * WANTED_HEIGHT];
float[] floatValues = new float[WANTED_WIDTH * WANTED_HEIGHT * 3];
float[] outputValues = new float[WANTED_WIDTH * WANTED_HEIGHT * 3];
Bitmap bitmap = activity.mainBitmap;
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, WANTED_WIDTH, WANTED_HEIGHT, true);
scaledBitmap.getPixels(intValues, 0, scaledBitmap.getWidth(), 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight());
for (int i = 0; i < intValues.length; i++) {
final int val = intValues[i];
floatValues[i*3] = ((val >> 16) & 0xFF);
floatValues[i*3+1] = ((val >> 8) & 0xFF);
floatValues[i*3+2] = (val & 0xFF);
}
AssetManager assetManager = getResources().getAssets();
mInferenceInterface = new TensorFlowInferenceInterface(assetManager, MODEL_FILE);
final float[] styleVals = new float[NUM_STYLES];
for (int i = 0; i < NUM_STYLES; ++i) {
styleVals[i] = 0.0f / NUM_STYLES;
}
styleVals[params[0]] = 1.5f;
mInferenceInterface.feed(INPUT_NODE, floatValues, 1, WANTED_HEIGHT, WANTED_WIDTH, 3);
mInferenceInterface.feed("style_num", styleVals, NUM_STYLES);
mInferenceInterface.run(new String[] {OUTPUT_NODE}, false);
mInferenceInterface.fetch(OUTPUT_NODE, outputValues);
错误显示在我上面提供的最后一行代码上,即“mInferenceInterface.fetch(OUTPUT_NODE, outputValues);”
关于如何解决这个问题的任何想法,我已经通过谷歌搜索,但没有涉及这个特定问题。
提前致谢!
解决方案
您需要验证 OUTPUT_NODE 的维度是否等于 outputValues 的维度?
推荐阅读
- c# - 在 PDF 表单中使用 ItextSharp 的动态内容
- java - 必须在 servlet 和异步请求处理中涉及的所有过滤器上启用异步支持
- deployment - 将 Angular 应用程序部署到 GitHub 页面,但 url 中没有项目名称
- google-apps-script - 使用宏按钮将多个工作表导出到 TSV
- sql - 为什么 Oracle 不将字符转换为数字?
- mongodb - 如何减少 docker-compose 图像中的 mongo 日志详细程度?
- laravel - Laravel Eloquent "with()" 急切加载 & "whereHas()" 条件
- wpf-controls - WPF 拖放出现错误的 LongPath 问题:错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回
- javascript - Joi 验证器只有一个键
- bash - 删除终端输入不会消失(BashRC?)