2

典型图像 GAN 的输出形状(w,h,3)为 0...1,然后缩放到 0...255 以表示彩色图像。

所以在每个 w,h 位置,我们得到 3 个值,它们共同代表 RGB 空间中的单一颜色。

我想以某种方式限制该输出以仅允许特定颜色作为输出。例如

colours = [[200, 20, 20], [20, 200, 20], [20, 20, 200], ...] 
number_of_allowed_colours = len(colours)

理想情况下,允许的颜色将是输入的一部分,但考虑到任务的复杂性,我可以使用颜色作为网络架构的一部分开始网络的第一次迭代。

到目前为止,我尝试了很多方法都没有成功。我看到它可以完成的方式是使最后一层网络具有形状(w,h,number_of_allowed_colours),然后应用激活函数,以便将第三维映射到相应的颜色三元组。我试图扩展的一个想法是tf.argmax结合使用类似tf.contrib.lookup.HashTable. 我正在研究的另一个选择是使用常规(w,h,3)形状层,但在激活内将其四舍五入到最接近的颜色匹配。这里的问题是缺乏渐变以及没有完美的算法来比较颜色。

编辑:损失函数必须使用生成的输出图像,因此解决方案必须完全可微。网络的输出必须是(w,h,3)成形的图像。

4

1 回答 1

2

没有办法知道这是否真的有效,但下面的建议可以让你的概念变得可区分。

(w,h,number_of_allowed_colours)然后应用激活函数,以便将该第三维映射到相应的颜色三元组。我试图扩展的一个想法是tf.argmax结合使用类似tf.contrib.lookup.HashTable. 我正在研究的另一个选择是定期(w,h,3)

我想你在这里真的很近。您只需要使这些操作可区分。

对于第一个,你说:

激活函数被应用tf.argmax…… lookup.HashTable

你想在这里做的看起来很像一个注意力层。用于activation="softmax"获得颜色的加权分布,其中权重总和为 1。取颜色的加权平均值。

我正在研究的另一个选择是使用常规 (w,h,3) 但在激活内将其四舍五入到最接近的颜色匹配。这里的问题是缺乏渐变以及没有完美的算法来比较颜色。

同样,您的想法是正确的,只是缺少一些细节以使其可区分。在这里,我认为您可能只需要一个总和为 1 的权重。您可以通过为每个点计算到每个颜色选项的距离,然后softmax(-r**2)跨越选项来获得它。这样,近距离期权的权重就很高,而远距离的期权权重为零。

平均颜色:

不要忘记伽马校正

于 2020-02-05T05:24:37.200 回答