2015-06-12 24 views
5

Używam caffe w Pythonie do sklasyfikowania. Dostaję kod od here. Tutaj, po prostu użyć prostego kodu, takich jakBłąd podczas korzystania z klasyfikuj w 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)) 

Jednak mam błąd taki jak

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. 

mógłbyś mi pomóc go reslove? Dzięki

Odpowiedz

14

Puść do linii 253-254 w caffe/python/caffe/ io.py Wymień

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

Przez

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

odbudować. Nadzieję, że to pomoże

1

miałem ten sam problem, z siedzibą w demo IMAGEnet internetowej zmodyfikowałem skrypt korzystając w ten sposób, aby załadować plik średnie w wierszu 95

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

0

Jestem bardzo boi się odbudować kod jak instalacja caffe nie przychodził mi łatwo. Ale rozwiązać, roztwór do rozmiaru znaczy wymagać in_shape (odpowiedź user8264'S), która jest tworzona wewnętrznie w caffe/classifier.py

Zresztą debugowany i znaleźć wartość dla in_shape = (3, 227, 227) do age_net.caffemodel

Więc model stosowany do wieku i przewidywania płci będzie następujące zmiany:

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

Ale średnie musi zostać zmodyfikowany pierwszy:

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 

Spowoduje to usunięcie "ValueError: Średni kształt niezgodny z kształtem wejściowym". Ale nie jestem pewien co do dokładności. Najwyraźniej dla mnie pomijanie średni parametr dał lepsze prognozy na wiek :)

0

Edycja deploy_gender.prototxt i ustawić: input_dim: 256 input_dim: 256

nie wiem dlaczego został napisany źle ...

Powiązane problemy