【问题标题】:Image preprocessing as a Keras lambda layer vs preprocessing on its own作为 Keras lambda 层的图像预处理与单独的预处理
【发布时间】:2018-05-27 04:43:49
【问题描述】:

在通过网络传播图像之前,我正在尝试应用从 Keras 中的 resnet50 模块导入的预处理。由于在尝试将其应用于生成器对象时出现错误,因此我将其作为 lambda 层添加到网络中。

但由于该模型比我之前在分别对每张图像应用预处理时训练的模型差,因此我比较了两种方法的结果,它们看起来非常不同,尽管我看不出所应用的操作有什么不同.

import keras
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input

model = keras.models.Sequential()
model.add(keras.layers.Lambda(preprocess_input, name='preprocessing', input_shape=(224, 224, 3)))

file = '/path/to/an/image.jpeg'
x = np.array(image.img_to_array(image.load_img(file, target_size=(224, 224))))

preprocessed_x = preprocess_input(x)
predicted_x = model.predict(x.reshape(1,224,224,3)).reshape(224,224,3)

结果(左:直接使用的预处理函数;右:作为 lambda 层的预处理。

【问题讨论】:

    标签: python keras resnet


    【解决方案1】:

    我认为这可能是 keras 代码中的错误,但我发现 preprocess_input(x) 正在修改 x

    见:

    x = np.array(image.img_to_array(image.load_img(file, target_size=(224, 224))))
    print("x before preprocess - max: " + str(x.max()) + " / min: " + str(x.min()))
    preprocessed_x = preprocess_input(x)
    print("x after preprocess - max: " + str(x.max()) + " / min: " + str(x.min()))
    

    结果:

    x before preprocess - max: 255.0 / min: 0.0
    x after preprocess - max: 151.061 / min: -123.68
    

    一开始我当然不会想到这种行为,但三思而后行,它节省了内存(这在神经网络中很有价值......)。

    如果您使用 numpy 版本之前的模型版本运行测试,则不会发生问题(因为模型在张量中工作,不会就地修改 x)。

    在模型内部还是外部进行预处理?

    我会说最好在模型之外的生成器中预处理图像。 这样,您可以在训练和预测时获得更快的执行速度。

    【讨论】:

    • 像魅力一样工作。谢谢。这意味着我再次不知道为什么使用这两种技术提取的特征会产生不同的值。
    • 在一种情况下,您将原始图像传递给模型以进行处理。在另一种情况下,您传递的是经过处理的图像,模型会再次对其进行处理。
    • 当我在 CNN 之前使用 Lambda 层提取特征时,我没有进行预处理部分。而且我无法向生成器提供 preprocess_input 函数,因为存在产生此错误的错误:''JpegImageFile' object is not subscriptable'。有些人建议降级 keras,但我认为这不是一个合理的解决方案。
    • 我不明白你的意思....你有没有对生成器中的错误提出任何问题?
    • 不,因为我使用 lambda 层作为解决方法。抱歉,我指的是这个帖子:forums.fast.ai/t/…
    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多