gpt4 book ai didi

Keras RGB 转灰度

转载 作者:行者123 更新时间:2023-12-04 10:34:42 26 4
gpt4 key购买 nike

我想要一个关于在 Keras 中将输入 rgb 图像转换为灰度的最佳方法的规范答案。 This answer暗示也许这样的事情最好用 Lambda 来实现,但这对我来说效率低下。在我看来 Average Pooling layers应该能够做到这一点,但我似乎无法弄清楚。文档中是否有我只是缺少的 RGB 到灰度层?这似乎是一个相当普遍的操作。

最佳答案

有一些公式可以将彩色图像转换为灰度图像。
它们非常确定,选择通常取决于您是否想要更亮或更暗的结果,更好的对比度等。

Three common formulas are here .让我们采用“光度”公式。

result =  0.21 R + 0.72 G + 0.07 B

这只能通过 lambda 层来实现。这不是无能的,它只是必要的数学。
def converter(x):

#x has shape (batch, width, height, channels)
return (0.21 * x[:,:,:,:1]) + (0.72 * x[:,:,:,1:2]) + (0.07 * x[:,:,:,-1:])

将此 lambda 层添加到模型中:
Lambda(converter)

尽管 AveragePooling 似乎是一种方式,但这些层旨在减少“空间”维度,而不是“ channel ”。您需要大量的变通方法和 reshape 才能使这些池化层之一应用于 channel 。

如果您更喜欢使用 tensorflow 中的现成公式,请再次使用 lambda 层,现在使用此函数,基于您提供的答案:
Lambda(lambda x: tf.image.rgb_to_grayscale(x))
converter 的其他选项:
#perhaps faster? perhaps slower? 
def converter(x):

weights = K.constant([[[[0.21 , 0.72 , 0.07]]]])
return K.sum(x*weights, axis=-1,keepdims=True)

正如 Stepan Novikov 评论的那样。如果您的想法只是对图像进行预处理,则可以使用其他工具并避免麻烦。

如果在此操作中跟踪梯度对您很重要,您只需要在模型内部执行此操作。

关于Keras RGB 转灰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46836358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com