use*_*593 4 caffe matcaffe pycaffe
我正在尝试为我的问题训练一个完全卷积网络.我正在使用https://github.com/shelhamer/fcn.berkeleyvision.org的实现.我有不同的图像大小.
根据裁剪层文档,它需要两个底部blob并输出一个顶部blob.我们将底部blob称为A和B顶部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)