caffe fully convolutional cnn - 如何使用裁剪参数

caffe fully convolutional cnn - how to use the crop parameters

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

  1. 我不确定如何在 'Crop' 层中设置 'Offset' 参数。
  2. 'Offset' 参数的默认值是多少?
  3. 如何使用此参数裁剪中心周围的图像?

根据Crop layer documentation,它需要两个底部 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

关于轴参数,来自文档:

Takes a Blob and crop it, to the shape specified by the second input Blob, across all dimensions after the specified axis.

这意味着,如果我们设置 axis = 1,那么它将裁剪维度 1、2、3。如果 axis = 2,那么 T 的大小将是 32 x 3 x n x p.您还可以将轴设置为负值,例如 -1,这表示最后一个维度,即本例中的 3。

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

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

如果你有一个大小为 32 x 3 x 224 x 224 的 blob 并且你想要裁剪大小为 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
  }
}