【问题标题】:FCN with patches creates boundary带有补丁的 FCN 创建边界
【发布时间】:2020-02-17 19:50:38
【问题描述】:

我正在尝试训练一个 Unet 模型来对图像进行每像素回归预测。为此,我将我的大图像 (1000x1000) 分成 200x200 像素的正方形。然后使用它来训练具有线性最终层的 FCN 模型。损失函数是 MSE 损失。在预测阶段,我提取相同的框,但将它们拼接在一起并获得最终的输出图像。当我这样做时,我遇到的问题是框的边界之间存在不连续性。 (我可以清楚地看到盒子)

我尝试通过将 250x250 的框输入到我的 FCN 并计算 200x200 中心区域的损失来解决这个问题。我对预测状态执行相同的过程。提取 250x250 补丁裁剪 200x200 中心区域并将图像重新缝合在一起。请看下面的一些代码:

损失函数:

criterion = nn.MSELoss()
optimizer = optim.Adam(self.model.parameters(), lr=LR)
for inputs, labels in train_loader:
    inputs, labels = inputs.to(device), labels.to(device)
    optimizer.zero_grad()
    output = model(inputs)
    output = output.squeeze()
     _, dimx, dimy = output.shape
     loss = criterion(output[:,25:dimx-25, 25:dimy-25], labels[:,25:dimx-25, 25:dimy-25])
     loss.backward()
     optimizer.step()

我的预测代码如下:

pred = np.zeros((height, width))
for i in range(25, height, 200):
    for j in range(25, width, 200):
        patch = img[:, i-25:i+225, j-25:j+225]
        patch = torch.from_numpy(patch)
        patch = patch.unsqueeze(dim=0).to(device)
        out = model(patch)
        out = out[0,0,25:225, 25:225]
        pred[i:i+200, j:j+200] = out.cpu().numpy()

我不确定我的问题是否完全合理。如有必要,我可以提供更多说明,但我已经坚持了一段时间了。

【问题讨论】:

    标签: python machine-learning computer-vision conv-neural-network pytorch


    【解决方案1】:

    在边界附近有不连续性是有意义的,因为在训练期间网络不需要跨框进行平滑预测。

    我假设您的 GPU 内存有限,因此您一次只需要 200x200 像素作为输入;因此,我建议以下两种可能的解决方法。

    首先,您可以使用torchvision.transform.RandomCrop 生成 200x200 的裁剪区域作为训练的输入。在测试阶段,您直接输入整幅图像进行预测。直觉是该模型可以看到图像的全分辨率,这与测试数据相同,同时在训练期间消耗的 GPU 内存更少。在这种情况下,您还希望模型需要更多时间来学习所有训练数据模式,因为它一次只能看到部分数据。

    第二,您可以简单地对训练数据进行下采样,例如 0.5x,并保持输出大小,即 1x。例如,在您的情况下,在将输入图像下采样为 200x200 后,模型将其用于预测 1000x1000 像素级标签(您可以使用双线性上采样或反卷积层)。此变通方法已在某些分段实现中使用(AdaptSegDISE)。

    【讨论】:

      【解决方案2】:

      经过一些故障排除后,我意识到我遇到了这个问题,因为我在每个卷积层之间执行批量标准化。删除该步骤解决了不连续性问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-09
        • 2013-08-02
        • 2013-04-06
        • 2011-09-02
        • 1970-01-01
        • 2018-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多