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

use*_*593 4 caffe matcaffe pycaffe

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

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

Par*_*kar 8

根据裁剪层文档,它需要两个底部blob并输出一个顶部blob.我们将底部blob称为AB顶部blob一样T.

A -> 32 x 3 x 224 x 224
B -> 32 x m x n x p
Run Code Online (Sandbox Code Playgroud)

然后,

T -> 32 x m x n x p
Run Code Online (Sandbox Code Playgroud)

关于轴参数,来自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在第一轴上有一个大小的斑点.我们仍然需要告诉Caffe从哪里裁剪.这就是偏移所在的位置.如果偏移是10,那么你的blob大小m将从开始10和结束时被裁剪10+m-1(总大小m).在所有维度中将偏移量设置为裁减一个值(由此确定axis,记住吗?在这种情况下1, 2, 3).否则,如果要以不同方式裁剪每个尺寸,则必须指定偏移数等于要裁剪的尺寸数(在本例中为3).总结一下,

如果你有一个大小的blob 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
  }
}
Run Code Online (Sandbox Code Playgroud)