Использование графического процессора, несмотря на установку CPU_Only, выдачу неожиданного аргумента ключевого слова

Я устанавливаю Caffe на виртуальный сервер Ubuntu 14.04 с установленным CUDA (без драйвера), используя для этого https://github.com/BVLC/caffe/wiki/Ubuntu-14.04-VirtualBox-VM. В процессе установки я отредактировал MakeFile, чтобы включить "CPU_ONLY := 1" прежде чем строить это. Тем не менее, похоже, что Caffe все еще пытается использовать графический процессор. Когда я пытаюсь запустить тестовый пример, я получаю следующую ошибку:

python python/classify.py examples/images/cat.jpg foo
Traceback (most recent call last):
  File "python/classify.py", line 130, in <module>
    main(sys.argv)
  File "python/classify.py", line 103, in main
    channel_swap=channel_swap)
TypeError: __init__() got an unexpected keyword argument 'gpu'

Как я могу это исправить и работать полностью на процессоре?

4 ответа

Решение

Я добавлю несколько слов к ответу Майлердаймона.

Я следовал руководству по установке ( https://github.com/BVLC/caffe/wiki/Ubuntu-14.04-VirtualBox-VM), чтобы настроить Caffe на моей бродячей виртуальной машине. К вашему сведению, виртуальные машины НЕ поддерживают ускорение графического процессора. Вернемся к делу, после того, как я исправлю "переключение CPU / GPU в примерах сценариев" ( https://github.com/BVLC/caffe/pull/2058) и добавил опции "--print_results --labels_file" ( https://github.com/jetpacapp/caffe/blob/master/python/classify.py) в 'python/classify.py', эта команда './python/classify.py ./examples/images/cat.jpg foo --print_results'по-прежнему выдает следующую ошибку:

  Traceback (most recent call last):
  File "./python/classify.py", line 175, in <module>
    main(sys.argv)
  File "./python/classify.py", line 129, in main
    channel_swap=channel_swap)
  File "/home/vagrant/caffe/python/caffe/classifier.py", line 38, in __init__
    self.transformer.set_mean(in_, mean)
  File "/home/vagrant/caffe/python/caffe/io.py", line 267, in set_mean
    raise ValueError('Mean shape incompatible with input shape.')
  ValueError: Mean shape incompatible with input shape.

Затем я выбрасываю форму "среднее" (3*256*256) и "вход" (3*227*227). Очевидно, что эти две формы несовместимы. Но старые версии set_mean() НЕ выдают ошибку, поэтому я копаюсь в коде python и выясняю, что старая функция set_mean() выглядит следующим образом (python/caffe/pycaffe.py, строка 195-202, https://github.com/jetpacapp/caffe/):

if mode == 'elementwise':
    if mean.shape != in_shape[1:]:
        # Resize mean (which requires H x W x K input in range [0,1]).
        m_min, m_max = mean.min(), mean.max()
        normal_mean = (mean - m_min) / (m_max - m_min)
        mean = caffe.io.resize_image(normal_mean.transpose((1,2,0)),
                in_shape[2:]).transpose((2,0,1)) * (m_max - m_min) + m_min

Но в последней версии Caffe авторы инкапсулируют set_mean() и другие функции преобразования в класс Transformer. Новая функция set_mean() выглядит следующим образом (python/caffe/io.py, строка 253-254, https://github.com/BVLC/caffe/):

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

Господи, как эти двое могли выполнять одну и ту же функцию? Поэтому я изменяю новый set_mean(), закомментирую предложение об ошибке и добавляю процедуру изменения размера фигуры, как в старом set_mean().

if ms != ins:
    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.')
    '''

Вуаля, проблема решена.

Classifying 1 inputs.
Done in 1.17 s.
[('tabby', '0.27933'), ('tiger cat', '0.21915'), ('Egyptian cat', '0.16064'), ('lynx', '0.12844'), ('kit fox', '0.05155')]

Есть некоторые проблемы в настоящее время из-за большого количества изменений интерфейса, внесенных разработчиками caffe. Python Wrapper еще не обновлен с этими изменениями.

Смотрите этот PR, который решает проблему: https://github.com/BVLC/caffe/pull/1964

Та же ошибка была решена в другой группе Google: -

Все, что вам нужно сделать, это изменить это:

 mean=np.load(mean_file)

к этому:

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

Группа Google: средняя форма несовместима с формой ввода

Только одна опечатка от пользователя 2696499

if ms != 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.')
    '''
Другие вопросы по тегам