我正在开发CNN来分割生物医学图像。
作为输入,我有572x572x3图像,我的标签是具有基本事实的图像。
这是我的数据层:
layer {top: 'image' name: 'loadMydata_image' type: 'HDF5Data' hdf5_data_param { source: '/home/alexandra/Documents/my-u-net/my_data.txt' batch_size: 1} include: { phase: TRAIN }}
layer {top: 'anno' name: 'loadMydata_anno' type: "HDF5Data" hdf5_data_param { source: '/home/alexandra/Documents/my-u-net/my_data.txt' batch_size: 1} include: { phase: TRAIN }}
问题是,最后我的输出小于标签图像,欧几里德损失层无法工作。 这是我的最后一层:
layer { name: 'label_reshape' type: 'Reshape' bottom: 'anno' top: 'anno_reshaped' reshape_param { shape : {dim:0 dim:-1 dim:0 dim:0} }}
layer { bottom: 'score' bottom: 'anno_reshaped' top: 'loss' name: 'loss_tune' type: "EuclideanLoss" include: { phase: TRAIN }}
我有这个错误:
F0722 10:43:42.478071 10809 euclidean_loss_layer.cpp:12] Check failed: bottom[0]->count(1) == bottom[1]->count(1) (980000 vs. 981552) Inputs must have the same dimension.
我尝试使用reshape图层,但我无法获得完全相同的尺寸..
有谁知道如何解决这个问题?
答案 0 :(得分:2)
大多数情况下,尺寸不匹配是由卷积层引起的。如果你没有在卷积层中设置填充,那么边框就会丢失。
例如,对3x3内核的32x32输入将提供30x30的输出。
要解决此问题,您可以在所有卷积图层中使用填充,也可以裁剪标签图像以匹配输出的大小。
或者,如果您的尺码不匹配是因为您使用了一些合并图层(这会在空间上缩小图像)并且未在后续图层中升级,那么您需要调整标签图像的大小以匹配输出中的大小。
注意:重塑图层不会调整图像大小。它习惯于重塑"重塑"数据。重塑层后,值的总量保持不变。