2015-06-12 9 views
5

Sto usando caffe in python per classificare. Ricevo il codice da here. Qui, mi basta usare semplice codice comeErrore durante l'utilizzo della classificazione in caffe

plt.rcParams['figure.figsize'] = (10, 10) 
plt.rcParams['image.interpolation'] = 'nearest' 
plt.rcParams['image.cmap'] = 'gray' 
mean_filename='./mean.binaryproto' 
proto_data = open(mean_filename, "rb").read() 
a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data) 
mean = caffe.io.blobproto_to_array(a)[0] 
age_net_pretrained='./age_net.caffemodel' 
age_net_model_file='./deploy_age.prototxt' 
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained, 
mean=mean, 
channel_swap=(2,1,0), 
raw_scale=255, 
image_dims=(256, 256)) 

Tuttavia, ho ottenuto l'errore come

Traceback (most recent call last): 
File "cnn_age_gender_demo.py", line 25, in 
image_dims=(256, 256)) 
File "/home/john/Downloads/caffe/python/caffe/classifier.py", line 34, in init 
self.transformer.set_mean(in_, mean) 
File "/home/john/Downloads/caffe/python/caffe/io.py", line 255, in set_mean 
raise ValueError('Mean shape incompatible with input shape.') 
ValueError: Mean shape incompatible with input shape. 

Potresti aiutarmi a reslove esso? Grazie

risposta

14

Lasciate andare alla linea 253-254 in caffe/python/caffe/io.py Sostituire

if ms != self.inputs[in_][1:]: 
    raise ValueError('Mean shape incompatible with input shape.') 

Con

if ms != self.inputs[in_][1:]: 
    print(self.inputs[in_]) 
    in_shape = self.inputs[in_][1:] 
    m_min, m_max = mean.min(), mean.max() 
    normal_mean = (mean - m_min)/(m_max - m_min) 
    mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min 
    #raise ValueError('Mean shape incompatible with input shape.') 

Rigenera. La speranza è aiutare

1

ho avuto lo stesso problema, con sede nel IMAGEnet web demo ho modificato lo script utilizzando in questo modo per caricare il file media in linea 95

mean = np.load(args.mean_file).mean(1).mean(1)

0

Io sono abbastanza paura per ricostruire il codice come installazione di caffe non mi è stato facile. Ma per risolvere, la soluzione per ridimensionare significano richiedere in_shape (risposta di user8264), che si trova internamente in caffe/classifier.py

Comunque, ho il debug e trovato il valore per in_shape = (3, 227, 227) per age_net.caffemodel

Così il modello utilizzato per l'età e la previsione genere sarebbe la seguente modifica:

age_net_pretrained='./age_net.caffemodel' 
age_net_model_file='./deploy_age.prototxt' 
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained, 
        mean=mean, 
        channel_swap=(2,1,0), 
        raw_scale=255, 
        image_dims=(227, 227)) 

Ma bisogni medi da modificare prima:

m_min, m_max = mean.min(), mean.max() 
normal_mean = (mean - m_min)/(m_max - m_min) 
in_shape=(227, 227) 
mean = caffe.io.resize_image(normal_mean.transpose((1,2,0)),in_shape) 
          .transpose((2,0,1)) * (m_max - m_min) + m_min 

Questo eliminerà "ValoreErrore: forma media incompatibile con la forma di input". Ma non sono sicuro della precisione. A quanto pare, per me saltare parametro media ha dato una migliore previsione età :)

0

Modifica deploy_gender.prototxt e impostare: input_dim: 256 input_dim: 256

Non so perché è stato scritto male ...

Problemi correlati