【问题标题】:Large image slicing for tensorflow pipeline用于张量流管道的大图像切片
【发布时间】:2019-04-13 13:04:42
【问题描述】:

我正在使用大型卫星 .JP2 图像进行图像分割。

  • 图像形状:(10000, 10000, 13) 因为有 13 个波段(同一区域有 13 个不同波长的观测值)

  • uint32

我想构建最高效的张量流管道,但我没有太多经验。

我想轻松调整用于训练的波段数量(RGB 用于第一次训练,然后我会尝试添加更多波段,看看它是否会提高性能)

我想象了两条不同的管道:

  • 我的 .JP2 转换为 (10000 x 10000 x 13) numpy 数组。 然后管道被提供所需的切片(例如,如果我想要 RGB 图像,则为 128x128x3)

  • 或者,我将我的大图像预处理到 13 个不同的文件夹(13 个波段) 然后输入管道使用所需的数据集构建 128 x 128 x (1-13) 输入图像

获取一张大图像并根据需要将其切片,直接进入 tensorflow 管道更方便,因为我只需要一个 10000x10000x13 的 numpy 数组作为训练集。但我不知道它是否相关/优化/可能......

解决我的 pb 的最优化方法是什么? (我有一个 11Gb 1080 GPU)

【问题讨论】:

  • “先RGB,然后再添加IR”到底是什么意思?你想在不同的学习阶段有不同的投入吗?或者只是能够改变输入的形状?我会坚持后者,您将能够测试不同的组合。第二个问题,如果您对原始图像进行切片,您将如何处理标签?你打算使用什么网络架构?
  • 我只是希望能够轻松更改我的训练数据(使用更多或更少的波段)。我将使用具有 (128 x 128 x nb_desired_bands) 输入形状的 Unet 模型

标签: tensorflow image-segmentation tensorflow-datasets


【解决方案1】:

最有效的方法几乎总是迭代改进的产物。因此,作为一个坚实的开始,让我们考虑示例。出于演示目的,我使用了一个带有随机色块的玩具数组,将其分成 13 个波段并仅连接 3 个波段。为batch_size 添加了第一个维度

init_image = np.random.randint(0,255,(1, 4, 4, 13))
bands = np.split(d, 13, axis=3)
image = np.concatenate((d_s[0], d_s[1], d_s[2]), axis=3)

首先,我们从数据集中创建一张大图像以从中提取补丁。

dataset = tf.data.Dataset.from_tensor_slices(image)
dataset = dataset.batch(1)
#This, if evaluated inside session, outputs array of shape (1, 4, 4, 3)

然后我们应用一个映射函数来提取补丁。这是通过tf.image.extract_image_patches 完成的,参数ksizes、strides 和rates 定义了补丁的几何属性。你可以找到一个很好的解释here。在这种情况下,我们将采用大小为 2x2 的补丁,彼此直接相邻。所以总共4个补丁。 extract_image_patches 会将所有补丁放入最后一维,o reshape 用于获得形状为 2x2 的 3 个通道图像的 4 个补丁的所需输出。

def parse_func(image):
    ksizes = [1, 2, 2, 1]
    strides = [1, 2, 2, 1]
    rates = [1, 1, 1, 1]
    patches = tf.image.extract_image_patches(image, ksizes, strides, rates, 'SAME')
    image_tensor = tf.reshape(patches, [-1, 2, 2, 3])
    return image_tensor

然后我们将此函数应用于数据集,然后我们将输出取消批处理以打乱它并从补丁创建一个新批处理。在这种情况下,batch size 和 shuffle buffer size 等于 patch 的数量。

dataset = dataset.map(pf)
dataset = dataset.apply(tf.data.experimental.unbatch())
dataset = dataset.shuffle(4).batch(4)

这将输出一批形状(4, 2, 2, 3)。如您所见,输出包含 4 个形状的补丁 (2, 2, 3)。如果未应用随机播放,则将按从左上角到右下角的顺序排列。

另外,看看官方输入管道performance guide

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 2018-03-15
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2018-03-27
    • 2019-03-20
    相关资源
    最近更新 更多