如何将 Landsat 图像裁剪成更小的块进行训练,然后在原始图像上进行预测

Posted

技术标签:

【中文标题】如何将 Landsat 图像裁剪成更小的块进行训练,然后在原始图像上进行预测【英文标题】:How do I crop a Landsat image into smaller chunks for training and then predict on the original image 【发布时间】:2020-06-18 15:46:54 【问题描述】:

我正在考虑使用 Landsat 图像来训练 CNN 以进行无监督的逐像素语义分割分类。也就是说,我一直无法找到一种方法,可以让我从较大的 Landsat 图像中裁剪图像进行训练,然后在原始图像上进行预测。基本上这就是我想要做的:

原始 Landsat 图像(5,000 x 5,000 - 这是任意尺寸,不能完全确定实际尺寸) -> 将图像裁剪成 (100 x 100) 块 -> 在这些裁剪图像上训练模型 - > 输出原始(未裁剪)图像中每个像素的预测。

也就是说,我不确定是否应该在裁剪后的图像上进行预测并在预测后将它们拼接在一起,或者我是否可以在原始图像上进行预测。

任何澄清/代码示例将不胜感激。作为参考,我同时使用了 pytorch 和 tensorflow。

谢谢! 兰斯D

【问题讨论】:

【参考方案1】:

借用Ronneberger et al.,我们一直在做的是将输入的 Landsat 场景和相应的地面实况掩码拆分为重叠的瓦片。获取原始图像并用重叠边距填充(我们使用反射进行填充),然后分割成图块。这是使用 scikit-image 的代码 sn-p:

import skimage as sk
patches = sk.util.view_as_windows(image,
  (self.tile_height+2*self.image_margin,
  self.tile_width+2*self.image_margin,raster_value['channels']),
  (self.tile_height,self.tile_width,raster_value['channels'])

我不知道您将什么用于无监督分割的损失函数。在我们的监督学习案例中,我们裁剪最终的分割预测以匹配地面实况输出形状。在 Ronneberger 的论文中,由于使用了有效的填充,他们依赖于收缩。 对于预测,您将执行相同的操作(拆分为重叠的图块)并拼接结果。

【讨论】:

以上是关于如何将 Landsat 图像裁剪成更小的块进行训练,然后在原始图像上进行预测的主要内容,如果未能解决你的问题,请参考以下文章

PIL TypeError:无法处理此数据类型 - 取决于图像大小

将巨大的(95Mb)JSON 数组拆分成更小的块?

将 PL/pgSQL 函数分解成更小的部分

分解成更小的查询

如何防止 Node.js 将套接字消息拆分成更小的块

在 Java 中生成更小的 code-128 条码