当前位置:  开发笔记 > 人工智能 > 正文

Keras RGB到灰度

如何解决《KerasRGB到灰度》经验,为你挑选了1个好方法。

我想要一个关于在Keras中将输入rgb图像转换为灰度的最佳方法的规范答案.这个答案提示可能这样的事情最好用Lambda实现,但这对我来说效率低下.在我看来,平均池化层应该能够做到这一点,但我似乎无法弄明白.是否存在我在文档中缺少的RGB到灰度层?看起来这是一个非常普通的操作.



1> Daniel Mölle..:

有一些公式可以将彩色图像转换为灰度图像.他们非常有决心,选择通常取决于你是否喜欢更亮或更暗的结果,更好的对比度等.

这里有三个常见的公式.让我们采用"光度"公式.

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似乎是这样,但这些层旨在减少"空间"维度,而不是"渠道".您需要大量的解决方法并重新整形,以使这些池中的一个应用于通道.

如果您更喜欢使用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评论的那样.如果您的想法只是预处理图像,您可以使用其他工具并避免麻烦.

如果您需要在此操作中跟踪渐变,则只需在模型内执行此操作.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有