关于google protocol buffer(PB)的优缺点和一些个人的理解

来源:互联网 发布:编程培训机构推荐 编辑:程序博客网 时间:2024/06/04 19:22
由于caffe的神经模型通过protocol buffer定义,所以自己搜刮了一些资料,加上自己的一些理解,如下:

protocol buffer用一句话概括就是一个数据传输协议,用来将你程序中需要保存的数据以结构化的形式保存起来,并以相应的的格式读取.有人会问,直接用C++的读写文件函数不就行了么,为什么还要用这个工具.这主要是因为当你需要存取的数据量很大时,系统提供的方法效率很低,根本不能满足我们的需求,因此就需要一个高效的读写工具,这就是protocol buffer的优势,相应的网站是:
https://code.google.com/p/protobuf/downloads/list


总结一下优缺点:
优点:
(1)性能好/效率高
有人做过测试,xml比protobuf慢3-4倍
测试:100000个对象

(2)代码生成机制
 我们拿深度学习训练系统来说(假设用C++实现),假设神经网络的卷积层包含如下参数:
--------------------------------
  网络名称:name
  网络类型:type
  卷积层参数:convolution_param
--------------------------------
  如果使用protobuf实现,首先要写一个proto文件(不妨叫VGG.prototxt):
--------------------------------
layers{
  name: "conv2"
  type: CONVOLUTION
  convolution_param {
num_output: 192
kernel_size: 5
stride: 1
weight_filler {
 type: "xavier"
}
bias_filler {
 type: "constant"
 value: 0.1
}
  }
  bottom: "eltwise1"
  top: "conv2"
}
--------------------------------
接着利用protobuf内置的编译器编译这个文件,重点可以看这个文件solver.hpp。
有了protocol 我们就不用自己写协议去解析这些文件了,是不是很方便
还有一个好处是:如果通讯双方使用不同的语言,使用protocol 可以有效确保两边的模块对于协议的处理是一致的。

缺点:

XML 的通用性比Protobuf 好一些,毕竟Protobuf 没有开源前只是 Google 内部使用的工具
最大的问题是保存的数据以二进制形式读取,调试的时候没办法查看内容。。。






0 0
原创粉丝点击