在 Keras Lambda 层中调整输入图像的大小

Posted

技术标签:

【中文标题】在 Keras Lambda 层中调整输入图像的大小【英文标题】:Resizing an input image in a Keras Lambda layer 【发布时间】:2017-07-04 18:09:19 【问题描述】:

我希望我的keras 模型使用 cv2 或类似的方法调整输入图像的大小。

我已经看到了ImageGenerator 的使用,但我更愿意编写自己的生成器并简单地使用keras.layers.core.Lambda 调整第一层中的图像大小。

我该怎么做?

【问题讨论】:

【参考方案1】:

如果您使用的是 tensorflow 后端,那么您可以使用 tf.image.resize_images() 函数来调整 Lambda 层中的图像大小。

这里有一个小例子来演示:

import numpy as np
import scipy.ndimage
import matplotlib.pyplot as plt

from keras.layers import Lambda, Input
from keras.models import Model
from keras.backend import tf as ktf


# 3 channel images of arbitrary shape
inp = Input(shape=(None, None, 3))
try:
    out = Lambda(lambda image: ktf.image.resize_images(image, (128, 128)))(inp)
except :
    # if you have older version of tensorflow
    out = Lambda(lambda image: ktf.image.resize_images(image, 128, 128))(inp)

model = Model(input=inp, output=out)
model.summary()

X = scipy.ndimage.imread('test.jpg')

out = model.predict(X[np.newaxis, ...])

fig, Axes = plt.subplots(nrows=1, ncols=2)
Axes[0].imshow(X)
Axes[1].imshow(np.int8(out[0,...]))

plt.show()

【讨论】:

我遇到了和以前一样的问题。在预测时,我收到一个错误,指出找不到 ktf。当然,我在预测脚本中应用了相同的导入语句。我还更改为keras.backend.tf 的完整路径,但仍然NameError:名称keras 未定义 @SamHammamy 您运行预测脚本的环境似乎没有 keras。尝试仅导入 keras 并查看。如果它有效,请查看它使用哪个后端。此外,您可以使用 import tensorflow as tf 并使用相同的,而不是从 keras 后端获取 tf 当然有keras。我通过在 generator 中调整大小来运行预测数周。然而,它是一个 Raspberry Pi 板,我通过在网上找到的自定义 pip 轮在其上安装了 TensorFlow。正如我所说,如果我在生成器中调整大小,它工作正常。我还找到了我今天需要调查的这个解决方案gist.github.com/bzamecnik/a33052ec46ee7efeb217856d98a4fb5f 我可以让它工作model.add(Lambda(lambda image: K.resize_images(image, 240./64, 340./64, 'tf')))我在训练过程中遇到资源耗尽错误,即使批次中只有 32 张图像 您可以做的事情很少......在系统上训练。当您拥有一组好的权重时,可以使用它在嵌入式系统上运行。这将通过批量大小减少嵌入式系统的内存需求。第二次使用 theano 后端.. tensorflow 更消耗内存。

以上是关于在 Keras Lambda 层中调整输入图像的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在 keras lambda 层中使用 tf.py_func 来包装 python 代码。 ValueError:应定义 Dense 输入的最后一个维度。没有找到

Keras 2:在“合并”图层中使用lambda函数

如何在 Tensorflow 2.x Keras 自定义层中使用多个输入?

如何在Tensorflow 2.x Keras自定义层中使用多个输入?

Keras 的 LSTM 层中的 4D 输入

用于 keras 中可变大小图像的全卷积自动编码器