Python 为什么net.blob[';fc7';]数据[0]都是零
我想从人们的照片中提取面部描述符。这就是我到目前为止所做的:Python 为什么net.blob[';fc7';]数据[0]都是零,python,opencv,neural-network,deep-learning,caffe,Python,Opencv,Neural Network,Deep Learning,Caffe,我想从人们的照片中提取面部描述符。这就是我到目前为止所做的: 首先使用python中的opencv库从照片中检测人脸 将这些面保存在另一个图像中 接下来我要从人脸图像中提取描述符 为此,我从这里下载了vgg face caffemodelCNN: 要提取描述符,首先我执行以下操作: net = caffe.Net('CAFFE_FACE_deploy.prototxt','CAFFE_FACE.caffemodel',caffe.TEST) img = caffe.io.load_image
vgg face caffemodel
CNN:
要提取描述符,首先我执行以下操作:
net = caffe.Net('CAFFE_FACE_deploy.prototxt','CAFFE_FACE.caffemodel',caffe.TEST)
img = caffe.io.load_image( "detectedface.jpg" )
img = img[:,:,::-1]*255.0
avg = np.array([129.1863,104.7624,93.5940])
img = img - avg
img = img.transpose((2,0,1))
img = img[None,:]
out = net.forward_all( data = img )
但它给出了维度不匹配错误,即数据应该是维度(50,3224224)
,而不是(50,3490490)
然后我试了一下:
# input preprocessing: 'data' is the name of the input blob == net.inputs[0]
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1)) # mean pixel
transformer.set_raw_scale('data', 255) # the reference model operates on images in [0,255] range instead of [0,1]
transformer.set_channel_swap('data', (2,1,0)) # the reference model has channels in BGR order instead of RGB
net.blobs['data'].reshape(50,3,224,224)
net.blobs['data'].data[...] = transformer.preprocess('data', caffe.io.load_image('detectedface.jpg'))
out = net.forward()
feats = net.blobs['fc7'].data[0]
在这里,当我打印专长时,它显示所有零。为什么会这样?您是否检查过任何层是否都具有零权重?当prototxt中的图层名称与权重文件不同时,会发生这种情况。否,因为它是一个预训练的网络,并且经过测试。请帮助。对于net.params.keys()中的k:print(net.params[k][0].data),这将迭代层并打印权重。如果你得到一个所有权重都为零的层,那么在加载预先训练好的权重的过程中出现了一些问题。网络定义中的图层名称与培训期间使用的prototxt中使用的名称之间经常不匹配。您是否检查了任何图层是否都具有零权重?当prototxt中的图层名称与权重文件不同时,会发生这种情况。否,因为它是一个预训练的网络,并且经过测试。请帮助。对于net.params.keys()中的k:print(net.params[k][0].data),这将迭代层并打印权重。如果你得到一个所有权重都为零的层,那么在加载预先训练好的权重的过程中出现了一些问题。网络定义中的图层名称与培训期间使用的prototxt中使用的名称之间通常不匹配。