caffe完全卷积cnn - 如何使用裁剪参数

时间:2016-07-26 11:41:06

标签: caffe pycaffe matcaffe

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

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

1 个答案:

答案 0 :(得分:8)

根据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

关于轴参数,来自docs:

  

采用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从哪里裁剪。这就是偏移量所在的位置。如果偏移量为10,那么您的大小为m的blob将从10开始裁剪,并在10+m-1结束(对于总大小m)。在所有维度(由axis确定)中,为偏移量设置一个值,然后记住?在这种情况下1, 2, 3)。否则,如果要以不同方式裁剪每个尺寸,则必须指定偏移数等于要裁剪的尺寸数(在本例中为3)。总而言之,

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