如何确保 Caffe 分割网络输出大小与输入相同?

Posted

技术标签:

【中文标题】如何确保 Caffe 分割网络输出大小与输入相同?【英文标题】:How to ensure Caffe segmentation network output size is the same as input? 【发布时间】:2018-02-12 14:31:11 【问题描述】:

我正在使用 U-net 架构训练分割模型。输入图像尺寸为 250x250。

目前,我手动调整了一些卷积层的填充,以确保模型输出的大小相同,即 250x250。

但当我输入不同尺寸的图像时,例如 500x500 的图像,输出尺寸为 506x506。

如何确保所有尺寸的输出尺寸与输入尺寸相同?

【问题讨论】:

【参考方案1】:

您可以使用"Crop" 层来强制输出形状相同。 对于 U-net,我建议在每次上采样后使用裁剪层,而不仅仅是在最后,以避免累积填充错误。

关于“填充错误”: 假设您有一个形状为 100x100 的输入,您将其采样 3 倍,如果为 2,您将得到 13x13 的特征图。 现在,如果你每次上采样 3 次 x2

13x13 --> 26x26 --> 52x52 --> 104x104

由于填充/舍入,您有“额外的”4 个像素(在您的问题中,您有 6 个)。 但是,如果您在每次上采样后"Crop"

13x13 --> 26x26 \crop 25x25 --> 50x50 --> 100x100

您会看到,只有在第一次上采样之后,才会出现非平凡的裁剪,并且在该级别只有 1 个像素错误,而不是 4 个。

【讨论】:

填充错误到底是什么意思?我只是在最后一个上采样层之后添加了一个裁剪层以匹配大小,它似乎工作正常。有什么问题吗? 感谢您的编辑,但我怎么知道在中间层中需要裁剪多大尺寸? (假设我的输入大小不固定) @shubhamgoel27 "Crop" 层获得第二个输入 ("bottom") 用作“参考”形状。您需要提供下采样特征的 blob 名称。例如,如果"pool_x2" 是下采样的输出 blob,它可以用作 x2 上采样层的参考。 知道了。非常感谢您提供如此准确和快速的回​​复。 :)

以上是关于如何确保 Caffe 分割网络输出大小与输入相同?的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow与caffe中卷积层feature map大小计算

Caffe框架GPU与MLU计算结果不一致请问如何调试?

Caffe框架GPU与MLU计算结果不一致请问如何调试?

如何调用caffe已经训练好的net

图像每像素场景标注输出问题(使用 FCN-32s 语义分割)

通道交换需要与 caffe 中的输入通道错误具有相同的维数