2015-06-12 3 views
5

Я использую caffe в python для классификации. Я получаю код от here. Здесь, я просто использовать простой код, такой какОшибка при использовании классификации в 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)) 

Однако я получил ошибку, таких как

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. 

Не могли бы вы помочь мне reslove это? Благодаря

ответ

14

Отпусти на линию 253-254 в Caffe/Python/CAFFE/io.py Заменить

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

По

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

Перестроить. Надеюсь, что это поможет

1

У меня была та же проблема, основанная в imagenet веб-демо я изменил скрипт, используя этот способ, чтобы загрузить средний файл в строке 95

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

0

Я очень напугана, чтобы восстановить код как установка caffe не стал легким для меня. Но исправить решение, чтобы изменить размер означает требовать in_shape (ответ user8264 в), который устанавливается внутри в CAFFE/classifier.py

Во всяком случае, я отлажена и нашел значение для in_shape = (3, 227, 227) для age_net.caffemodel

Так модель, используемая для возраста и пола предсказания будут следующие изменения:

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

Но средние потребности быть изменены первым:

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 

Это избавится от «ValueError: средняя форма, несовместимая с формой ввода». Но я не уверен в точности. По-видимому, для меня пропуск средний параметр дал лучший возраст прогноз :)

0

Редактировать deploy_gender.prototxt и установить: input_dim: 256 input_dim: 256

Не знаю, почему это было написано неправильно ...

Смежные вопросы