我正在尝试为我的问题训练一个完全卷积网络。我正在使用实施https://github.com/shelhamer/fcn.berkeleyvision.org。 我有不同的图像大小。
答案 0 :(得分:8)
根据Crop layer documentation,它需要两个底部blob并输出一个顶部blob。我们将底部blob称为A
和B
,将顶部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
}
}