我正在尝试为我的问题训练一个完全卷积网络。我正在使用实现https://github.com/shelhamer/fcn.berkeleyvision.org。我有不同的图像尺寸。
- 我不确定如何在“裁剪”图层中设置“偏移”参数。
- 'Offset' 参数的默认值是什么?
- 如何使用此参数裁剪中心周围的图像?
我正在尝试为我的问题训练一个完全卷积网络。我正在使用实现https://github.com/shelhamer/fcn.berkeleyvision.org。我有不同的图像尺寸。
根据Crop 层文档,它需要两个底部 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
关于轴参数,来自文档:
获取一个 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 从哪里裁剪。这就是 offset 的用武之地。如果 offset 是10
,那么你的 blob 大小m
将被裁剪从开始到10
结束10+m-1
(总共 size m
)。为 offset 设置一个值,以在所有维度中裁剪该数量(由 确定axis
,还记得吗?在这种情况下1, 2, 3
)。否则,如果要以不同方式裁剪每个维度,则必须指定偏移量等于要裁剪的维度数(在本例中为 3)。所以总结一下,
如果你有一个大小的 blob32 x 3 x 224 x 224
并且你想裁剪一个 size 的中心部分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
}
}