4

我正在尝试为我的问题训练一个完全卷积网络。我正在使用实现https://github.com/shelhamer/fcn.berkeleyvision.org。我有不同的图像尺寸。

  1. 我不确定如何在“裁剪”图层中设置“偏移”参数。
  2. 'Offset' 参数的默认值是什么?
  3. 如何使用此参数裁剪中心周围的图像?
4

1 回答 1

8

根据Crop 层文档,它需要两个底部 blob 并输出一个顶部 blob。让我们将底部的 blob 称为AB,将顶部的 blob 称为T

A -> 32 x 3 x 224 x 224
B -> 32 x m x n x p

然后,

T -> 32 x m x n x p

关于轴参数,来自文档:

获取一个 Blob 并将其裁剪为第二个输入 Blob 指定的形状,在指定轴之后的所有维度上。

这意味着,如果我们设置axis = 1,那么它将裁剪尺寸 1、2、3。如果axis = 2,那么T将是尺寸32 x 3 x n x p。您还可以将轴设置为负值,例如-1,这意味着最后一个维度,在这种情况下为 3。

关于 offset 参数,我检查了 $CAFFE_ROOT/src/caffe/proto/caffe.proto (在第 630 行),我没有找到 offset 参数的任何默认值,所以我假设你必须提供该参数,否则它将导致错误。但是,我可能是错的。

现在,Caffe 知道您需要m在第一个轴上有一个大小的 blob。我们仍然需要告诉 Caffe 从哪里裁剪。这就是 offset 的用武之地。如果 offset 是10,那么你的 blob 大小m将被裁剪从开始到10结束10+m-1(总共 size m)。为 offset 设置一个值,以在所有维度中裁剪该数量(由 确定axis,还记得吗?在这种情况下1, 2, 3)。否则,如果要以不同方式裁剪每个维度,则必须指定偏移量等于要裁剪的维度数(在本例中为 3)。所以总结一下,

如果你有一个大小的 blob32 x 3 x 224 x 224并且你想裁剪一个 size 的中心部分32 x 3 x 32 x 64,那么你可以编写裁剪层如下:

layer {
  name: "T"
  type: "Crop"
  bottom: "A"
  bottom: "B"
  top: "T"
  crop_param {
      axis: 2
      offset: 96
      offset: 80
  }
}
于 2016-07-26T13:50:54.080 回答