如何训练 NN 输出循环(例如色调)数?

人工智能 神经网络 机器学习
2021-11-02 06:49:16

我正在考虑训练一个神经网络来为图像着色。输入将是每个像素的亮度/值,输出将是色调和/或饱和度。只需从全彩色图像中选择亮度/值通道,即可轻松获得训练数据。

假设所有通道都缩放到 0.0-1.0,色调接近 0.0 或接近 1.0 的像素存在问题。

  • 输入数据可能具有人眼不可见的明显色调不连续性。这是一个不稳定的、虚幻的边界,似乎会破坏训练。
  • 此外,如果网络输出的值是 1.001 而不是 0.001,那么这不应该受到惩罚。

可能的解决方法可能是预处理图像以重新映射,例如,如果该像素靠近以近 0 色调为主的区域,则重新映射例如 0.99 到 -0.01,或者类似于重新映射,例如,如果该像素靠近以近 1 为主的区域,则重新映射例如 0.01 到 1.01色调。这有它自己的问题。类似地,输出可以在评分之前被包装到 0-1 范围内。

但是有没有更好的方法来编码循环值,例如色调,以便它们自然是连续的?

我想到的一种解决方案是将 (hue,saturation) 视为 (theta,r) 极坐标并将其转换为笛卡尔 (x,y) 并将其作为训练目标,但我不知道这是如何变化的颜色空间的大小会影响事物(可能会找到,我还没有尝试过)。

是否有更适合机器学习的替代颜色表示?

1个回答

您的解决方案几乎是现场的。它对应于电视中使用的YUV 方案,旨在匹配人类感知特征。正如您已经注意到的那样,这样的编码不会受到不连续性的影响。