2017-05-06 2 views
1

Je modifie le réseau FCN et crée un nouveau réseau, dans lequel j'utilise deux ImageData Couche comme paramètre d'entrée et espère que le réseau produit une image en sortie. voici le train_val.prototxt et deploy.prototxtcaffe: Echec de la vérification: target_blobs.size() == source_layer.blobs_size() (2 vs. 1) Nombre de blobs incompatibles pour la couche conv1

l'image originale et l'étiquette sont à la fois échelle de gris et les tailles sont 224 * 224. Je me suis entraîné un caffemodel et utiliser infer.py d'utiliser la caffemodel faire une segmentation, mais répondre à l'erreur:

F0505 06:15:08.072602 30713 net.cpp:767] Check failed: target_blobs.size() == source_layer.blobs_size() (2 vs. 1) Incompatible number of blobs for layer conv1 

est le fichier infer.py ici:

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') 

comment résoudre ce problème?

Répondre

1

Le problème est avec votre terme de biais dans conv1. Dans votre train.prototxt, il est défini sur false. Mais dans votre deploy.prototxt ce n'est pas le cas et par défaut c'est vrai. C'est pourquoi le loader de poids recherche deux blobs.

+0

Voici une autre erreur: 'F0508 03: 20: 57.777287 22515 base_conv_layer.cpp: 189] Vérification échouée: bottom [0] -> num_axes() == first_spatial_axis + num_spatial_axes_ (3 contre 4) bottom num_axes ne peut pas changer . 'Je suppose que c'est parce que le dim dans input_param devrait être 1,1,224,224, donc je le change mais rencontre une autre erreur:' Impossible de copier les poids param 0 à partir de la couche 'conv1'; inadéquation de forme. La forme du paramètre source est 64 3 7 7 (9408); la forme du paramètre cible est 64 1 7 7 (3136). Pour apprendre les paramètres de cette couche à partir de zéro plutôt que de copier à partir d'un réseau enregistré, renommer la couche »comment résoudre ce problème, s'il vous plaît? – StalkerMuse

+0

btw Je suis sûr que mes données de train et d'essai sont toutes deux des images à l'échelle de gris à 8 bits. – StalkerMuse

+0

Ce 2ème numéro concerne le nombre de canaux ('rgb vs gray'). Votre train et votre test devraient avoir le même nombre de canaux. Faites donc une conversion appropriée en fonction de vos besoins. – lnman