我想为我的问题训练完全卷积网络。我正在使用执行https://github.com/shelhamer/fcn.berkeleyvision.org。 我有不同的图像大小。咖啡完全卷积cnn - 如何使用作物参数
- 我不知道如何在'Crop'图层中设置'Offset'参数。
- 'Offset'参数的默认值是多少?
- 如何使用此参数来裁剪中心周围的图像?
我想为我的问题训练完全卷积网络。我正在使用执行https://github.com/shelhamer/fcn.berkeleyvision.org。 我有不同的图像大小。咖啡完全卷积cnn - 如何使用作物参数
根据Crop layer documentation,它需要两个底部斑点并输出一个顶部斑点。我们称底部斑点为A
和B
,顶部斑点为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和裁剪,由第二输入斑点指定的形状,在所有尺寸后指定的轴。
这意味着,如果我们设置axis = 1
,那么它会裁剪尺寸1,2,3,如果axis = 2
,然后T
本来大小32 x 3 x n x p
的。您还可以将轴设置为负值,如-1
,这意味着最后一个维度,即在这种情况下为3。
关于偏移量参数,我检出了$ CAFFE_ROOT/src/caffe/proto/caffe.proto(在630行),我没有找到任何偏移量参数的默认值,所以我假设你必须提供该参数否则会导致错误。但是,我可能是错的。
现在,Caffe知道你需要第一个轴上的大小为m
的斑点。我们仍然需要告诉Caffe从哪里收获。这是抵消来的地方。如果抵消是10
,那么您的斑点大小m
将从10
开始裁剪,并在10+m-1
(总大小为m
)结束。在所有维度(由axis
确定,请记住?在这种情况下为1, 2, 3
)中设置一个偏移量值以裁剪该量。否则,如果要以不同方式裁剪每个尺寸,则必须指定等于正被裁剪的尺寸数量(在此情况下为3)的偏移量数量。所以总结了所有,
如果你有大小32 x 3 x 224 x 224
的BLOB和您要裁剪尺寸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
}
}
感谢您的回答。似乎裁剪是在https://github.com/BVLC/caffe/blob/master/python/caffe/coord_map.py中实现的。由于我对Python不太熟悉,因此我并不了解所有内容。但似乎默认参数在那里。在我的理解中,完全卷积CNN需要一个固定大小的输入。如果输入尺寸不同,则处理裁剪参数时会出现问题。我对么? – user570593
@ user570593我不确定FCNN是如何工作的。但是,作物层需要两个底部斑点。如果其中一个大小不一,另一个大小(上面例子中的参考blob,“B”)的大小是固定的,那么不同大小的blob将被剪裁成与“B”大小一样。这应该不会造成问题。当然,你在裁剪时会丢失一些信息。所以FCNN必须有一些处理方式。我认为当他们编写'params.get('offset',0)'(在[line 46](github.com/BVLC/caffe/blob/master/python/caffe/coord_map.py))时,我认为他们分配默认值= 0来抵消。 –
我相信默认值确实是'0',即从一开始的角落。但是正确的参考可能是[here](https://github.com/BVLC/caffe/blob/master/src/caffe/layers/crop_layer.cpp#L50),它将该值初始化为0。 – wlnirvana