Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下caffe.proto文件。
在src/caffe/proto目录下有一个caffe.proto文件。proto目录下除了caffe.proto文件外,还有caffe.pb.h和caffe.pb.cc两个文件,此两个文件是根据caffe.proto文件内容自动生成的。
caffe.proto文件是一个消息格式文件,后缀名为proto. proto文件即消息协议原型定义文件,在该文件中可以通过使用描述性语言来定义程序中需要用到的数据格式。
proto文件是在Protobuf中定义使用的。Protobuf全称为Google Protocol Buffers,是Google的一个开源项目,它是一种结构化数据存储格式。要使用ProtoBuf库,首先需要自己编写一个.proto文件,定义我们程序中需要处理的结构化数据,在Protobuf中,结构化数据被称为Message。在一个.proto文件中可以定义多个消息类型。用Protobuf编译器(protoc.exe)将.proto文件编译成目标语言,会生成对应的.h文件和.cc文件,.proto文件中的每一个消息有(message)一个对应的类。关于Protobuf的更详细介绍可以参考http://blog.csdn.net/fengbingchun/article/details/49977903
编译caffe.proto,使其生成caffe.pb.h和caffe.pb.cc文件:利用Protobuf编译器protoc.exe,通过caffe.proto文件生成caffe.pb.h和caffe.pb.cc,步骤:将protoc.exe拷贝到src/caffe/proto目录下,打开命令提示符,执行:
protoc.exe caffe.proto --cpp_out=./
关于编译Protobuf源码的步骤可以参考:
http://blog.csdn.net/fengbingchun/article/details/47905907
caffe.proto文件:
(1)、定义了很多结构化数据,用于构建Caffe网络,即*.prototxt文件中的每个字段名要在caffe.proto中存在;
(2)、负责*.caffemodel数据文件的存储和读取;
(3)、每次向Caffe中增加新的层,相应的caffe.proto文件也需调整,并需重新生成caffe.pb.h/caffe.pb.cc文件;
(4)、注意选择Protobuf的版本要与Caffe中的一致,否则会产生Protobuf版本不一致的error。