在编译ncnn前,需要编译好protobuf。这篇文章将记录protobuf的编译方法。
什么是protobuf
Protocol Buffers是一种轻量级、高效的数据交换格式,它可以用于结构化数据的序列化,适用于通信协议、数据存储等领域。
-
优点:
- 高效性:Protocol Buffers生成的数据序列化后体积小,速度快。
- 跨语言支持:支持多种编程语言,可以在不同语言之间进行数据交换。
- 可扩展性:支持向后兼容性和向前兼容性,可以轻松地更新数据结构。
-
使用方式:
- 定义消息类型:使用.proto文件定义数据结构和消息类型。
- 生成代码:使用Protocol Buffers编译器将.proto文件编译生成对应语言的代码。
- 序列化和反序列化:使用生成的代码将数据序列化为二进制格式或反序列化为对象。
protobuf与ncnn
protobuf在ncnn中通常用于模型的序列化和反序列化。在ncnn中,可以使用protobuf格式来保存和加载模型结构及权重参数,以便在不同平台或系统之间方便地共享和部署模型。
具体来说,ncnn使用protobuf格式来定义模型的网络结构(如层类型、连接方式等)和权重参数。通过将模型保存为protobuf格式,可以实现模型的跨平台和跨语言共享,同时保持模型结构的一致性。这种方式也有助于模型的版本控制和管理。
在 ncnn 中,可以使用类似以下的方法来加载和使用protobuf格式的模型,
#include "net.h"
ncnn::Net net;
net.load_param("model.param");
net.load_model("model.bin");
编译protobuf
首先去官网(https://github.com/protocolbuffers/protobuf/releases/tag/v21.12)下载压缩包,这里推荐的是21.12版本
随后,
mkdir build_vs2017
cd build_vs2017
配置构建项目所需文件,
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
## 如果需要指定系统的架构, 则
cmake -A x64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
cmake -A Win32 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
构建项目并安装到指定目录,
cmake --build . --config Release -j 2
cmake --build . --config Release --target install