【问题标题】:semantic segmentation for large images大图像的语义分割
【发布时间】:2017-07-03 00:55:34
【问题描述】:

我正在处理数量有限的大尺寸图像,每个图像都可以有3072*3072 像素。为了使用 FCN 或 U-net 训练语义分割模型,我构建了一个大样本的训练集,每个训练图像是128*128。

在预测阶段,我所做的是将一个大图像切成小块,与128*128的训练集相同,并将这些小块输入到训练好的模型中,得到预测的掩码。之后,我只是将这些小块拼接在一起以获得整个图像的蒙版。这是对大图像执行语义分割的正确机制吗?

【问题讨论】:

  • 为什么不直接在3072 图像上直接训练模型?
  • 3072张大图只有100张左右。此外,对大图像的训练似乎非常缓慢。我尝试用 256*256、128*128 和 64*64 训练模型。随着补丁大小的增加,训练时间增加得非常快。

标签: machine-learning tensorflow computer-vision deep-learning caffe


【解决方案1】:

您的解决方案通常用于此类问题。但是,我认为这取决于数据是否真正有意义。让我举两个你仍然可以在 kaggle 上找到的例子。

如果您想屏蔽卫星图像的某些部分,您可能会在不降低准确性的情况下采用这种方法。这些图像具有高度重复性,分割区域与原始图像的拍摄位置之间可能没有相关性。

如果您想从背景中分割汽车,则不希望将其分割成块。在多个层上,网络将学习框架中汽车的全局分布。很有可能蒙版在图片中间是正片,在四角是负片。

由于您没有具体说明您要解决的问题,我只能给出一般性建议:尽量保持输入图像尽可能大。在许多情况下我宁愿对原始图像进行下采样,也不愿将其分解为补丁。

关于 curio1729 的推荐,我只能建议不要在小补丁上进行训练和在原始图像上进行测试。虽然由于完全卷积网络在技术上是可行的,但您正在将数据更改为扩展,这很可能会损害性能。 CNN 以提取局部特征而闻名,但有大量的全局信息是通过多层抽象来学习的。

【讨论】:

    【解决方案2】:

    输入图像数据: 我不建议将大图像 (3072x3072) 直接输入到 caffe 中。 一批小图像将更适合内存,并行编程也将发挥作用。 数据增强也是可行的。

    大图像的输出: 至于大图像的输出,最好在测试阶段将FCN的输入大小重铸为3072x3072。因为,FCN 层可以接受任何大小的输入。 然后你会得到 3072x3072 的分割图像作为输出。

    【讨论】:

    • 您好 Kishen,感谢您的回复。 “在测试阶段将 FCN 的输入大小重铸为 3072x3072”中的“重铸”是什么意思。即使完成训练过程,我是否必须更改 FCN 架构(特别是第一层形状)?我正在使用 Keras,通常它会在预测阶段加载训练好的权重。如果架构发生变化,负载权重将不起作用。
    • 谢谢你,这是我正在寻找的。顺便说一句,我们似乎可以为训练过程提供不同大小的图像,对吗?
    • 这也取决于你架构中的参数。您必须确保在经过几个卷积、池化、上采样和反卷积层之后,您将获得相同大小的分割图像。因此,对于给定的架构,只有选定的图像大小才会产生具有输入图像大小的输出。
    • 您是否建议在 128x128 图像上进行训练,然后在 3072x3072 图像上进行验证?
    猜你喜欢
    • 2017-04-12
    • 2019-08-09
    • 2022-01-04
    • 2020-05-12
    • 2017-03-31
    • 2020-01-31
    • 2017-07-24
    • 2020-06-01
    • 2022-10-17
    相关资源
    最近更新 更多