【问题标题】:Different prediction: Keras vs. Android + DL4J不同的预测:Keras vs. Android + DL4J
【发布时间】:2019-03-02 04:48:27
【问题描述】:

将在 Python(3.5.5) + Keras(版本 2.0.8)中在 GPU 上训练的神经网络的输出与 Android 上相同神经网络的输出(API 24)进行比较时,我遇到了截然不同的预测结果) 使用 DL4J (1.0.0-beta2)。

如果有人能分享他们如何解决这个问题的经验,那将非常有帮助,谢谢!

将模型导入 Android

通过使用以下命令将神经网络转换为 DL4J 格式:

MultiLayerNetwork model = KerasModelImport.importKerasSequentialModelAndWeights(SIMPLE_MLP, false)

并使用 DL4Js ModelSerializer 存储它。

使用 DL4J 方法将模型导入 Android 应用程序restoreMultiLayerNetwork()

模型输出

神经网络旨在对具有固定输入形状的图像进行预测:固定高度、宽度、3 个通道。

Android 中的图像预处理管道:

图像作为输入流从设备加载并将其存储在 INDarray 中:

AndroidNativeImageLoader loader = new AndroidNativeImageLoader(100, 100, 3);

InputStream  inputStream_bitmap = getContentResolver().openInputStream(uri);
INDArray indarray1 = loader.asMatrix(inputStream_bitmap);

AndroidNativeImageLoader() 加载并重新缩放图像。

INDarray 'indarray1' 被重新调整以包含 [0,1] 范围内的值:

indarray1 = indarray1.divi(255);

INDarray 通过网络传递以计算输出:

INDArray output = model.output(indarray1);

Python 中的图像预处理管道:

from keras.preprocessing import image
from keras.utils import np_utils
import numpy as np

img = image.load_img(img_path, target_size=(100, 100))
img = image.img_to_array(img)
img = np.expand_dims(img, axis=0)
img = img.astype('float32')/255

output = model.predict(img)

问题:

使用 Python 和 Keras 的预测与在 Android 中使用 DL4J 的预测有很大不同。输出是一个包含 2 个值的数组,每个值都是 [0,1] 中的浮点数。 相机拍摄的普通 .bmp 图片的预测差异最大为该输出数组的每个元素 0.99。

目前已完成的测试:

当使用单色 .bmp 图像(仅红色或仅蓝色或仅绿色或完全白色)时,两种环境的预测结果几乎相同。它们仅相差 10e-3,这可以通过在 GPU 上训练和在 CPU 上应用来解释。

结论: 到目前为止,我认为 Android 上的图像预处理与 Python 中的处理方式不同,因为单色图片的模型输出是相同的。

有人遇到过类似的问题吗?非常感谢任何帮助!

【问题讨论】:

标签: android keras deeplearning4j dl4j


【解决方案1】:

DL4J 和 Android 使用 BGR 而不是 RGB。因此必须进行颜色格式转换。

此 Github 帖子向 @saudet 致敬:

https://github.com/deeplearning4j/deeplearning4j/issues/6495

NativeImageLoader 需要加载这个转换:

loader = new NativeImageLoader(100, 100, 3, new ColorConversionTransform(COLOR_BGR2RGB));

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2018-11-03
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多