如何确保 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大小计算