caffe学习第一天--Google Protocol Buffers(1)--基础

caffe源码学习(一) google protocol buffer caffe源码学习 protocol buffer 阅读详情

前言

从头开始自学caffe,首先是把整个工程放在CLion里面编译,方便查看调试跳转代码。

正文

根据对网上的资料(包括但是不局限于其他博主发表的文章)学习,以及对于caffe.proto和caffe.pb.h观察发现:
1.在caffe.proto设定了caffe中各个基础类的参数
2.类的结构在caffe.proto中的格式是

message classname
{
    optional Parameter1Type Parameter1=1;
    repeated string input = 3
    required Parameter3Type Parameter3=20;
                 ...
    ...      ParameterNType ParameterN=100;
}

 上面这个结构中的字段可以这么理解第一个字段可以是optional,repeated,required 第二个字段是数据类型,第三个是变量名称,最后=后面的数字可以理解为ID好,在这个message中每个Parameter的ID是唯一的。生成后这些Parameter就是这个类的成员变量的名字了。然后第一个字段的三个限定词的区别是:optional表示一个普通的字段,可以有初始值,也可以不设置,不重复(生成后是一个单一的成员变量);repeated表示一个重复的字段,类似于数组的形式,所以他生成后的操作函数会有index这个参数;required也表示一个单一的字段(生成后也是一个单一的成员变量),与optional的区别就是它必须要有初始值。
3. 类的结构在生成后在caffe.pb.h中的结构是这样子的

class classname : public ::google::protobuf::Message//看来还顺便继承了一波它的基类
{
public:
    classname();
    virtual ~classname();
    classname(const classname& from);
    inline classname& operator=(const classname& from)
    {
      CopyFrom(from);
      return *this;
    }

    ......//此处省略类初始化的一些函数
    
    // optional Parameter1Type Parameter1= 1;
    bool has_Parameter1() const;
    void clear_Parameter1();
    static const int kParameter1FieldNumber = 1;
    const Parameter1Type& Parameter1() const;
    void set_Parameter1(const Parameter1Type& value);
    Parameter1Type* mutable_Parameter1();
    Parameter1Type* release_Parameter1();
    void set_allocated_Parameter1(Parameter1Type* Parameter1);
    
    // repeated string input = 3;
    int input_size() const;
    void clear_input();
    static const int kInputFieldNumber = 3;
    const ::std::string& input(int index) const;
    ::std::string* mutable_input(int index);
    void set_input(int index, const ::std::string& value);
    void set_input(int index, const char* value);
    void set_input(int index, const char* value, size_t size);
    ::std::string* add_input();
    void add_input(const ::std::string& value);
    void add_input(const char* value);
    void add_input(const char* value, size_t size);
    const ::google::protobuf::RepeatedPtrField< ::std::string>& input() const;
    ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_input();

    ...//此处省略余下参数的操作函数,仅仅以上者两个例子做说明
}

可以根据上述代码片段判断,如果是optional开头和required开头的话,那么就会生成类似与has_  clear_ set_ 等操作函数。感觉还挺厉害的。如果是repeated开头,增加了set_input和add_input,并且对于其中的成员来说多了一个index的参数,说明它在逻辑上是类似于数组的形式。
4.另外值得说明的一点是,这个proto的生成过程是严格按照id来的,从小到大生成。

5.并且,proto生成.pb.h的过程中也会对一些一只的诸如std::string构造对应输入char*的操作函数。

参考

https://blog.youkuaiyun.com/fengbingchun/article/details/49977903

https://blog.youkuaiyun.com/haima1998/article/details/78950106

https://blog.youkuaiyun.com/fengbingchun/article/details/55267162?utm_source=blogxgwz0

感谢上述博客博主的无私奉献。

Caffe: Convolutional Architecture for Fast Feature Embedding 相同的模型可以在各种硬件上以CPU或GPU模式运行:Caffe将表示与实际实现分离,异构平台之间的无缝切换进一步促进了开发和部署Caffe甚至可以在云中运行。虽然Caffe最初是为视觉而设计的,但它已被语音识别,机器人,神经科学和天文学用户采用和改进。 阅读详情

相关推荐

别再浪费NFC了!手把手教你用Android手机模拟门禁卡(Mifare Classic破解教程)

本文深入探讨Android NFC技术的核心原理与创新应用,教你如何利用手机模拟门禁卡(Mifare Classic破解教程),解锁智能生活的无限可能。涵盖NFC标签类型解析、HCE开发实战及安全实践,让你的Android设备成为数字生活的万能钥匙。

weixin_29239661的博客 230

protobuf中 repeated[Ptr]Field的序列化

序列化时, 按的形式

aalbertini的专栏 9616

学术类PPT制作总结

本文分享了科技类PPT的制作技巧,希望相关的信息能帮助到读者。

奇妙水果的技术博客,欢迎交流技术~ 2880

caffe源码 数据结构 google protobuf

caffe的数据结构,除了使用blob作为数据块,大部分的数据结构都用proto文件来定义。我们为表达网络结构所写prototxt文件就是protobuf读取的文件,从其中,protobuf可以获取层、参数的设置,反馈NetParameter、LayerParameter等重要初始化信息用于网络、层的建立和设置。caffe编译时,第一个编译的就是caffe.proto,它是所有文件的基础。什么是p...

小小码农的博客 1614

RK3568部署YOLOv8的7种方法对比:量化vs非量化的性能实测与优化建议

本文针对RK3568平台,深度对比了YOLOv8模型的七种部署方法,重点分析了量化与非量化策略的性能差异。通过实测数据,详细评估了不同方法在推理速度、CPU占用、内存消耗及模型精度上的表现,并提供了从模型结构调整到系统级优化的具体建议,为边缘AI部署选型提供实用参考。

weixin_29099217的博客 527

Pinocchio 结合 CasADi 进行 IK 逆运动学及 Mujoco 仿真

摘要:本视频演示了如何利用Pinocchio和CasADi实现机械臂逆运动学(IK)求解,并在Mujoco中进行仿真。通过构建优化问题(最小化位姿误差),结合IPOPT求解器对机械臂关节角度进行优化。代码支持导入URDF/MJCF模型,并以so100机械臂为例,实现了末端执行器位置跟踪的仿真测试。关键步骤包括:建立平移/旋转误差函数、设置约束条件、调用CasADi求解,最终在Mujoco中实时更新关节状态完成运动控制。

darcsdn 1002

6-google::protobuf命名空间下常用的C++ API----repeated_field.h

这些类与STL的vector非常相似,但包含了许多优化,这些优化被发现特别适用于协议缓冲区的情况。RepeatedPtrField与STL vector特别不同,因为它管理它所包含的指针的所有权。通常,用户不需要直接访问RepeatedField对象,而应该使用protocol编译器自动生成的访问器函数。所生成的协议消息类使用RepeatedField和RepeatedPtrField来操作重复字段。

搬砖人的自我修养 721

uniapp - 鸿蒙真机运行报错hvigor ERROR: Failed :entry:default@CompileArkTS...,hvigor ERROR: default@CompileAr

uniapp鸿蒙报错> hvigor ERROR: Failed :entry:default@CompileArkTS... hvigor ERROR: default@CompileArkTS watch work[0] failed. 【HarmonyOS】工程编译后报错hvigor ERROR: Failed :entry:default@CompileArkTS,uniAPP鸿蒙开发无法编译运行启动报错,工程编译后报错,运行不起来,删除掉项目entry下的build和.preview缓存文件后重新

🏆 前端领域优质创作者 4790

Google Protocol Buffer

什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交

rongrong0206的专栏 1408

SAP Fiori Launchpad 自定义层文本翻译实战:精准修正 Tile、Catalog 与 Group 标题

SAP Fiori 项目中,入口层(tile/catalog/group)的翻译问题常被忽视,但其直接影响用户体验。与前端i18n不同,这些文本属于平台配置数据,需通过ABAP标准翻译流程(SE63)处理。关键步骤包括:使用/UI2/FLC定位Text ID和Configuration ID,根据前缀区分Main/Property WD Config Key,在SE63中锁定WDY_CONF_USERT2表对象进行翻译。操作时需注意使用系统源语言环境,翻译完成后可能需要清理缓存。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 170

2025年GESP3月认证C++五级真题解析

小 A 有 2n 件物品,小 B 和小 C 想从小 A 手上买走这些物品。对于第 i 件物品,小 B 会以 bi 的价格购买,而小 C 会以 ci 的价格购买。对于所有测试点,保证 1 <= T <= 100, 2 <= g < p <= 10^9, g, p 为整数, p 为质数。对于所有测试点,保证 1 <= n <= 10^5, 0 <= bi, ci <= 10^9, bi, ci 为整数。对于另外 50 % 的测试点,保证 n <= 100000, 0 <= bi, ci <= 10^9。

lan_in的博客 1035

C++ Protocol Buffer RepeatedPtrField 类型遍历及成员函数

Protocol Buffer Repeated 对应类型为 ::google::protobuf::RepeatedPtrField 如果想要遍历该类型,可以使用 iterator typedef ::google::protobuf::RepeatedPtrField<Person> ptrf; // classmates is repeated type ptrf ...

qq_34385263的博客 1万+

硬件测试有哪些?

硬件单元测试(UT)是验证电路功能与可靠性的关键环节,主要分为电源测试和信号测试两大模块。电源测试需验证输入电压范围、高低压极限、短路保护等功能,确保供电稳定性;信号测试则聚焦时钟、总线、存储等接口的时序与完整性。测试要求统一标准、可追溯数据、问题闭环处理,通过开发与测试协同确保质量。规范的单元测试能有效降低后期集成风险,提升产品可靠性,其核心始终是在最小单元上确保稳健性,为系统级可靠性奠定基础。

硬核科技 244

caffe数据格式(Google Protocol Buffers)

caffe该不该看底层的代码,看个人兴趣,个人觉得是一个设计的非常好的平台,值得学习学习。不知道从哪方面开始学习,caffe用到的知识太多了,对于我这样的新手基本一个配置就搞得头疼啊,接触了这么久caffe,打算开始学习一下caffe的源码了。那就先从数据格式开始学习喽。 找了很久资料,终于找到一个比官网容易学习的博文。按照博文介绍一步步理解了。 =======================

深藏功与名 7396

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ubuntu 16.04 cpu only 安装caffe

python caffe报错:No module named google.protobuf.internal: http://blog.youkuaiyun.com/wuzuyu365/article/details/52431062 caffe支持pycaffe的安装:ImportError: No module named google.protobuf.internal : http://blog.

Nicholas_Liu2017的博客 1821

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Google Protocol Buffers 之.Net应用

吴剑 2011-2-22 转载请注明出处:http://www.cnblogs.com/wu-jian 前言     最近接到一个跨平台的测试项目,服务端Linux,是Java开发的一系列Socket接口,客户端Windows,所以准备用.Net。本想这种跨主流平台的Socket通信应该不成问题,但随着代码进程,随着一次次反复调试,我发现我错了。花了一周时间至今两者仍呈现北方网通和南方电信的

flyingleo1981的专栏 1665

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【caffe】Google Protocol Buffer

简介 Protocol Buffers 又简称为 Protobuf、PB。是 Google 推出的一种数据交换格式。注意,这是二进制的交换数据。 Protobuf 有自己的编译器,在 Linux 中叫做 protoc ,可以解释.proto 文件并且生成对应语言的源文件。目前 Google 提供了三种语言:Java, C++, Python。后面我们就以 C++ 来说明,其他语言类似。 总...

yuanCruise 657

ubuntu16.04+cuda8.0+caffe安装

参照文章 没装opencv \matlab\cudnn 安装caffe之前 安装 Protocol Buffers: cd ~ git clone https://github.com/google/protobuf.git sudo apt-get install autoconf automake libtool curl make g++ unzip cd

camille靖的博客 3790

caffe的protocol buffer使用例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+] 上一篇学习了google的数据描述语言,然后在caffe配置好的基础上进行一个简单的编码例子测试。 可能大家开始不太好找protobuf的编译器默认的安装位置,我直接使用/usr/bin/protoc命令进行操作。 开始建一个proto文件文件名一般按照 packageName.MessageName

haoji007的博客 610

自问自答系列-caffe源码学习之总体学习

1.Caffe的主要等级有哪些? blob:存储相关数据。layer:从底层数据到顶层数据。net:许多layer,计算梯度,前向,反向。solver:利用梯度更新权重。, 2.Protoclo Buffers: Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过...

weixin_33874713的博客 77

caffe源码学习——1.熟悉protobuf,会读caffe.proto

要想学习caffe源码,首当其冲的要阅读的,就是caffe.proto这个文件。它定义了caffe中用到的许多结构化数据。caffe采用了Protocol Buffers的数据格式。那么,Protocol Buffers到底是什么东西呢?简单说: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。 更多有关Protocol Buffer

qiusuoxiaozi的博客 5783

caffe源码阅读——caffe.proto

********************分阶段写********************1.什么是protocol buffer先给出几个链接,google官方api链接:https://developers.google.com/protocol-buffers/其它参考:https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ https://...

iMuMu的博客 586

Caffe中的Protobuf版本问题

1 关于Protobuf的介绍 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系...

yeler082的博客 4279
上一篇: ubuntu18.04+caffe-ssd+cuda9.2+cudnn7.3.1+opencv4.0.0α编译
下一篇: error: token '''_CUDACC_VER_ is no longer suppored. Use _CUDACC_VER_MAJOR_, _CUDACC_VER_MINOR_....
seekforcode
博客等级 码龄12年 9粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值