Neural network caffe:检查失败:底部[0]->;num_axes()==第一个空间轴+;num_空间_轴(3对4)底部num_轴可能不会更改

Neural network caffe:检查失败:底部[0]->;num_axes()==第一个空间轴+;num_空间_轴(3对4)底部num_轴可能不会更改,neural-network,computer-vision,deep-learning,caffe,pycaffe,Neural Network,Computer Vision,Deep Learning,Caffe,Pycaffe,我修改了FCN网络并设计了一个新的网络,其中我使用两个ImageData层作为输入参数,并希望网络生成一幅图片作为输出。 这是和 原始图片和标签均为灰度图片,尺寸为224*224。 我已经训练了一个caffemodel,并使用infer.py使用caffemodel进行分割,但遇到了以下错误: Check failed: bottom[0]->num_axes() == first_spatial_axis + num_spatial_axes_ (3 vs. 4) bottom num

我修改了FCN网络并设计了一个新的网络,其中我使用两个ImageData层作为输入参数,并希望网络生成一幅图片作为输出。 这是和

原始图片和标签均为灰度图片,尺寸为224*224。 我已经训练了一个caffemodel,并使用infer.py使用caffemodel进行分割,但遇到了以下错误:

 Check failed: bottom[0]->num_axes() == first_spatial_axis + num_spatial_axes_ (3 vs. 4) bottom num_axes may not change.
以下是infer.py文件:

import numpy as np
from PIL import Image
caffe_root = '/home/zhaimo/' 
import sys
sys.path.insert(0, caffe_root + 'caffe-master/python')

import caffe
im = Image.open('/home/zhaimo/fcn-master/data/vessel/test/13.png')
in_ = np.array(im, dtype=np.float32)
#in_ = in_[:,:,::-1]
#in_ -= np.array((104.00698793,116.66876762,122.67891434))
#in_ = in_.transpose((2,0,1))


net = caffe.Net('/home/zhaimo/fcn-master/mo/deploy.prototxt', '/home/zhaimo/fcn-master/mo/snapshot/train/_iter_200000.caffemodel', caffe.TEST)
net.blobs['data'].reshape(1, *in_.shape)
net.blobs['data'].data[...] = in_
net.forward()
out = net.blobs['score'].data[0].argmax(axis=0)

plt.axis('off')
plt.savefig('/home/zhaimo/fcn-master/mo/result/13.png')

如何解决这个问题?

您的网络需要4D输入的形状
1xhxw
。这是一个具有单个图像的批处理,其中只有一个通道具有高度和宽度
HxW
。因此,输入有两个单态前导维度。 您为您的网络提供的是一个带有单个2D图像的批处理,即您的
in
形状
仅为
HxW
-您缺少通道维度的单个维度。
要解决问题,需要显式添加singleton维度:

 net.blobs['data'].reshape(1, 1, *in_.shape)

至于您得到的
键错误
,您没有任何名为
'score'
的blob,您有
'upscore1'
'prob'

 out = net.blobs['prob'].data[0].argmax(axis=0)

您的输入图像
im
是否可能是2D形状而不是3D(带有“通道”的单一尺寸)?很抱歉,我无法理解您的意思,请您说清楚一点好吗?您的网络需要4D输入:
1xHxW
我怀疑您为其提供了
1xHxW
输入(即,您省略了“通道”)维度)。你能看出
1xHxW
3D数组和
HxW
2D数组之间的区别吗?我在测试阶段提供了一个8位灰度图片作为输入,因为我认为灰度图片占用了一个通道。那么如何更改输入来解决这个问题呢?如果你更改为
net.blobs['data']。重塑(1,1,*in_uuuuxw.shape)
。它能奏效吗?