使用图像作为CNN与Caffe的标签

时间:2016-07-22 09:32:50

标签: neural-network protocol-buffers caffe labels

我正在开发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图层,但我无法获得完全相同的尺寸..

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

大多数情况下,尺寸不匹配是由卷积层引起的。如果你没有在卷积层中设置填充,那么边框就会丢失。

例如,对3x3内核的32x32输入将提供30x30的输出。

要解决此问题,您可以在所有卷积图层中使用填充,也可以裁剪标签图像以匹配输出的大小。

或者,如果您的尺码不匹配是因为您使用了一些合并图层(这会在空间上缩小图像)并且未在后续图层中升级,那么您需要调整标签图像的大小以匹配输出中的大小。

注意:重塑图层不会调整图像大小。它习惯于重塑"重塑"数据。重塑层后,值的总量保持不变。