为单个图像实施 CVAE

Implement CVAE for a single image

我有一个多维的 hyper-spectral 图像 (channels, width, height = 15, 2500, 2500)。我想将其 15 个通道维度压缩为 5 channels.So,输出将是 (channels, width, height = 5, 2500, 2500)。一种简单的方法是应用 PCA。但是,性能不是很好。因此,我想使用变分自动编码器(VAE)。 当我在 Tensorflow 或 keras 库中看到可用的解决方案时,它显示了使用卷积变分自动编码器 (CVAE) 对 whole images 进行聚类的示例。

https://www.tensorflow.org/tutorials/generative/cvae

https://keras.io/examples/generative/vae/

但是,我只有一张图片。实施 CVAE 的最佳实践是什么?是通过移动 window 方法生成示例图像吗?

实现它的一种方法是让 CVAE 将每个空间坐标的所有光谱特征的输入(和输出)值作为输入(和输出)值(图中以红色圈出的堆栈)。因此,对于您的图像,您将有 2500*2500 = 6250000 个输入数据样本,它们都是长度为 15 的向量。然后中间层的维度将是长度为 5 的向量。并且,而不是 2D通常沿图像空间域使用的卷积,在这种情况下,在光谱域上使用一维卷积是有意义的(因为相邻波长的值也是相关的)。但我认为只使用全连接层也是有意义的。

免责声明,我以前没有见过这样使用 CVAE,但像这样,你也会得到很多数据样本,这是学习泛化所必需的。

另一个选项确实是您所建议的——仅使用移动 window 生成样本(补丁)(可能步幅是补丁大小的一半)。即使您不一定会获得足够的数据样本以使 CVAE 在 all HSI 图像上很好地泛化,我想这并不重要(如果它过度拟合),因为您想要在同一张图片上使用它。