检查失败:top_shape [j] == bottom [i]-> shape(j):用于3D数据中的Concat层

时间:2018-07-08 14:37:35

标签: caffe image-segmentation pycaffe matcaffe semantic-segmentation

我正在尝试在caffe中训练3D-Unet。不同体积的宽度,高度和深度是不同的。 HDF5数据集中第一个体积的输入形状为1 1 104 281 389(NxCxDxHxW),当其达到Concat layer(concat_d2c_u2a-b)时,将引发错误,它是与以下内容一起输入的两种形状:

  • 1 256 19 64 91 scaled2c_relu_d2c_0_split_1
  • 1 512 12 56 84 scaleu2a

如何解决此问题?是因为尺寸顺序?

I0708 22:19:59.811188 30282 layer_factory.cpp:74] Creating layer concat_d2c_u2a-b
I0708 22:19:59.811198 30282 net.cpp:185] Creating Layer concat_d2c_u2a-b
I0708 22:19:59.811200 30282 net.cpp:549] concat_d2c_u2a-b <- scaleu2a
I0708 22:19:59.811203 30282 net.cpp:549] concat_d2c_u2a-b <- scaled2c_relu_d2c_0_split_1
I0708 22:19:59.811208 30282 net.cpp:515] concat_d2c_u2a-b -> u2b
F0708 22:19:59.811223 30282 concat_layer.cpp:45] Check failed: top_shape[j] == bottom[i]->shape(j) (12 vs. 19) All inputs must have the same shape, except at concat_axis.
*** Check failure stack trace: ***

1 个答案:

答案 0 :(得分:0)

"Concat"操作将两个(或多个)Blob放在一起。例如,如果您有两个尺寸为10的一维Blob x1和尺寸为15的x2,则将它们连接起来将得到尺寸为25的一维矢量y
为了合并更高维的Blob,除了concat尺寸外,您必须使Blob的所有尺寸都相同。例如,如果要用n1 x c1 x h1来连接w1 x n1 x c2 x h2 Blob沿通道维度x w2,那么您必须具有n1==n2h1==h2w1==w2,而您的输出Blob将为n x (c1+c2) x h x w
请注意,如果任何非渠道尺寸都不匹配,则无法沿渠道尺寸合并。

在您的情况下,所有尺寸都不匹配,因此无法合并。您需要检查您的体系结构,并确保正确地填充/合并/跨步,以确保尺寸适合串联。