Для этой программы требуется библиотека времени выполнения Protocol Buffer версии 3.2.0, но установлена ​​версия 2.6.1.

Я пытаюсь обучить модель Caffe. В моем файле .prototxt используются пользовательские слои Python Data и Loss.

Однако, когда я выполняю обучающую команду в терминале, возникает эта ошибка:

[libprotobuf FATAL google/protobuf/stubs/common.cc:61] This program requires version 3.2.0 of the Protocol Buffer runtime library, but the installed version is 2.6.1.  Please update your library.  If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library.  (Version verification failed in "google/protobuf/descriptor.pb.cc".)
terminate called after throwing an instance of 'google::protobuf::FatalException'

В моем диспетчере пакетов Python (pip) установлена ​​версия 3.2.0 protobuf, но системная версия 2.6.1 для пакета с именем libprotoc. Я не уверен, как указать, что версия pip protobuf — это та, которую я хочу использовать для caffe.

На другом компьютере с версией protobuf 3.3.0, установленной на pip, и версией 2.6.1 для системной версии, у меня была такая же ошибка, за исключением того, что в ней говорилось, что программе требуется версия 3.3.0, а не версия 3.2.0.

Лучший.


person Eric He    schedule 06.07.2017    source источник
comment
Нам нужно больше информации. Сколько разных версий Python у вас есть? Используете ли вы виртуальные среды? Что это значит? В моем диспетчере пакетов Python (pip) установлена ​​версия 3.2.0 protobuf? Какой питон (если у вас больше 1 питона)?   -  person phd    schedule 06.07.2017
comment
я работаю в докер-конрайнере с python 2.7. однако на другом компьютере я работал на Linux, без виртуального контейнера и все еще получал ошибку, поэтому я не верю, что ошибка связана с этим.   -  person Eric He    schedule 09.07.2017


Ответы (2)


Сегодня я столкнулся с точно такой же проблемой. Обходной путь, который сработал для меня, заключался в том, чтобы начать обучение с интерфейса caffe python, а не запускать его непосредственно из оболочки. Пример:

import caffe

weights = '../ilsvrc-nets/vgg16-fcn.caffemodel'
caffe.set_device(0)
caffe.set_mode_gpu()

solver = caffe.SGDSolver('solver.prototxt')
solver.net.copy_from(weights)

for _ in range(25):
    solver.step(4000)

Конечно, вышеприведенное — это всего лишь пример/очень просто, вам придется самостоятельно обрабатывать набор проверки, но интерфейс pycaffe довольно гибкий и позволяет вам делать все это. Вы можете найти более подробную информацию о том, как использовать это здесь:

http://christopher5106.github.io/deep/learning/2015/09/04/Deep-learning-tutorial-on-Caffe-Technology.html

person Kosta    schedule 06.07.2017
comment
спасибо за предложение, я попробую, когда вернусь к работе, и сообщу здесь о результате. - person Eric He; 09.07.2017
comment
нет проблем. Кстати, вышеприведенное также будет работать с набором тестов (поэтому вам не нужно делать это самостоятельно), если вы настроили его в файле решателя. Более простой способ сделать это, если вам на самом деле не нужен детальный контроль цикла for, — просто выполнить solver.solve(). - person Kosta; 10.07.2017
comment
Привет, Коста, твое решение сработало и для меня. Большое спасибо! - person Eric He; 18.07.2017

Я обошел это, установив ту же версию protobuf через pip, что и из apt-get.

pip install protobuf==2.6

Альтернативой (которой я хотел избежать) была установка protobuf из исходников.

https://github.com/google/protobuf/blob/master/src/README.md

person Mircea    schedule 19.01.2018