今天使用caffe训练resnet50的一个二分类模型,在模型训练好后,打算用Python脚本加载网络定义文件deploy.prototxt测模型输出的准确率时,出现了如下错误,折腾了好久才解决,在此记录一下,为同样碰到此问题的人提供一个trouble shooting的思路。
[libprotobuf ERROR google/protobuf/text_format.cc:274] Error parsing text-format caffe.NetParameter: 25:26: Message type "caffe.LayerParameter" has no field named
"batch_norm_param". WARNING: Logging before InitGoogleLogging() is written to STDERR F1113 00:15:43.599743 701 upgrade_proto.cpp:928] Check failed: ReadProtoFromTextFile(param_file, param) Failed to parse NetParameter file: /home/****/ResNet50/deploy.prototxt *** Check failure stack trace: *** 已放弃 (核心已转储)
分析:
①首先,根据打出的日志,找到deploy.prototxt文件出错的位置,如下:
再查看使用的caffe版本是否含有该层及参数,路径及文件如下:
打开该文件,若找不到错误显示的参数则是caffe版本的原因(缺少该层的定义文件,下载更新版本的caffe再编译安装);
若找到该参数,说明使用的caffe没有问题(和我一样),如下:
②检查使用的caffe是否编译了Python接口,建议输入以下命令进行重新编译一遍,
make clean make all -j4 make test -j4 make runtest sudo make pycaffe
③检查Python脚本是否添加了caffe的Python接口到系统变量,如下:
caffe_root = '/home/*****/ssd-caffe/' # 修改成你的Caffe项目路径 sys.path.append(caffe_root + 'python') import caffe
④如果还未解决问题,则检查你的计算机是否编译了多个版本的caffe,此时我们需要查看~/.bashrc文件,我们在脚本中即使添加了使用的caffe到Python系统环境变量,系统还是会调用~/.bashrc文件中的Python默认路径,打开该文件,export出你使用的caffe的Python环境路径,如下:
vi ~/.bashrc
source ~/.bashrc
OK,问题解决!重新run一下,程序顺利跑通。