ncnn源码分析-001-blob

本文深入探讨了NCNN框架中Blob数据结构的作用与实现。Blob作为基本数据单元,连接了网络中的各层,负责传递计算过程中的数据。文章详细介绍了Blob的属性,包括名称、生产者和消费者,并解释了真正的数据存储位置。

ncnn也使用了类似caffe中的blob作为最基本的数据结构来存储计算过程中的各种数据。

1.blob结构体
class Blob
{
public:
    std::string name;
    int producer; // 指明该blob是哪个层的输出,同时说明,一个blob只能由一个层输出
    std::vector<int> consumers; // 指明该blob哪个层的输入,一个可以同时输入多个层

}

  由blob类结构可以看出blob类本身不存放具体的计算数据,只负责关联blob和相应层(该blob是哪个层的输出,哪个层的输入) 真正的blob数据存放在blob_mats里,索引与blob一致,而blob_mats存放在net.h中的Extractor结构体中。

在 Visual Studio 中配置和部署 ncnn 深度学习推理框架,主要涉及以下几个步骤: ### 1. 准备 ncnn 库文件 首先需要在 Windows 环境下编译或获取 ncnn 的库文件和头文件。可以通过源码编译的方式完成: - 安装 CMake 工具,并从 GitHub 获取 ncnn 源码。 - 使用 CMake 配置生成适用于 Visual Studio 的项目文件,例如使用 VS2017 或 VS2019 的构建器。 - 打开生成的 `.sln` 文件并进行编译(选择 Debug 或 Release 版本),最终生成的库文件和头文件会位于 `build-vs201x/install` 目录中 [^3]。 ### 2. Visual Studio 项目的配置 创建一个新的 C++ 控制台应用程序或其他适合的项目类型后,需要对项目属性进行以下设置: - **包含目录**:在“VC++ 目录”下的“包含目录”中添加 ncnn 头文件路径,例如: ``` D:\ncnn\build-vs2019\install\include\ncnn ``` 这样可以确保代码中能够正确引用 `#include "net.h"` 等头文件 [^5]。 - **库目录**:在“链接器 -> 常规 -> 附加库目录”中添加 ncnn 的 lib 文件存放路径,例如: ``` D:\ncnn\build-vs2019\install\lib ``` - **依赖项**:在“链接器 -> 输入 -> 附加依赖项”中添加 ncnn 的静态库文件名,例如: ``` ncnn.lib ``` ### 3. 部署动态链接库 (DLL) 如果使用的是带有动态链接库的构建版本,则需要将 ncnn 编译生成的 DLL 文件复制到可执行程序的输出目录(如 Debug 或 Release 文件夹)中,以确保运行时能够找到这些库文件。 ### 4. 示例代码测试 完成以上配置后,可以编写一个简单的示例程序来测试 ncnn 是否配置成功。例如加载一个模型并执行推理任务: ```cpp #include <iostream> #include "net.h" int main() { // 初始化 ncnn 的 net 对象 ncnn::Net model; // 加载模型 if (!model.load_param("path/to/model.param") || !model.load_model("path/to/model.bin")) { std::cerr << "Failed to load model." << std::endl; return -1; } // 创建输入图像 blob ncnn::Mat in = ncnn::Mat::from_pixels_resize(image_data, ncnn::Mat::PIXEL_BGR, image_width, image_height, target_size, target_size); // 设置输入 blob ncnn::Extractor ex = model.create_extractor(); ex.input("data", in); // 推理输出 ncnn::Mat out; ex.extract("output", out); // 输出结果处理... std::cout << "Model inference completed successfully!" << std::endl; return 0; } ``` 注意替换上述代码中的模型路径和图像数据为实际值。 ### 5. 调试与优化 在调试过程中,可以利用 Visual Studio 强大的调试功能,如断点、变量监视等来分析模型推理过程。同时也可以通过调整 ncnn 的线程数和其他参数来优化性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值