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

本文探讨了Google Protocol Buffer(PB)相对于XML的优缺点。虽然XML具有更好的通用性,但PB在效率和数据大小上有优势。然而,PB的二进制格式在调试时带来了挑战,无法直接查看内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于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 内部使用的工具
最大的问题是保存的数据以二进制形式读取,调试的时候没办法查看内容。。。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值