我有一个多维,hyper-spectral
图像 ( channels, width, height = 15, 2500, 2500
)。我想将其 15 个 channel 尺寸压缩为 5 个 channel 。因此,输出将是 ( channels, width, height = 5, 2500, 2500
)。一种简单的方法是应用 PCA。然而,性能并不是那么好。因此,我想使用变分自动编码器(VAE)。
当我在 Tensorflow 或 keras 库中看到可用的解决方案时,它显示了对 whole images
进行聚类的示例。使用卷积变分自动编码器(CVAE)。
https://www.tensorflow.org/tutorials/generative/cvae
https://keras.io/examples/generative/vae/
但是,我只有一个图像。实现 CVAE 的最佳实践是什么?是通过移动窗口方法生成样本图像吗?
最佳答案
一种方法是让 CVAE 将每个空间坐标的所有光谱特征的输入(和输出)值作为输入(和输出)值(图中红色圈出的堆栈)。因此,就您的图像而言,您将有 2500*2500 = 6250000 个输入数据样本,它们都是长度为 15 的向量。然后中间层的维度将是长度为 5 的向量。并且,而不是 2D通常沿图像的空间域使用的卷积,在这种情况下,在光谱域上使用一维卷积是有意义的(因为相邻波长的值也是相关的)。但我认为只使用全连接层也是有意义的。
作为免责声明,我以前从未见过以这种方式使用 CVAE,但是这样,您还将获得许多数据样本,这是学习泛化所必需的。
另一种选择确实是您所建议的 - 仅使用移动窗口生成样本(补丁)(可能步幅是补丁的一半大小)。即使您不一定会为 CVAE 获得足够的数据样本来在所有 HSI 图像上很好地概括,但我想这并不重要(如果它过拟合),因为您想在同一图像上使用它。
关于tensorflow - 为单个图像实现 CVAE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62604742/