TNN源码阅读笔记(二)

首先从一个例子看起,在example文件夹下有检测和分类的例子,但是又封装了几层接口,这里我把主要的流程代码提出来了,这是可以单独load模型跑起来的代码,如下:

    //创建模型
    TNN_NS::TNN tnn;
    //创建模型配置
    TNN_NS::ModelConfig model_config;
    //load模型文件
    auto proto_tnn = fdLoadFile(model_param);
    auto model_tnn = fdLoadFile(model);
    //模型配置
    model_config.model_type = TNN_NS::MODEL_TYPE_TNN;
    model_config.params = {proto_tnn, model_tnn};
    //配置初始化
    tnn.Init(model_config);
    //创建网络配置
    TNN_NS::NetworkConfig config;
    config.device_type = TNN_NS::DEVICE_ARM;
    TNN_NS::Status error;
    //设置输入归一化参数
    TNN_NS::MatConvertParam input_cvt_param;
    input_cvt_param.scale = {1.0 / (255 * 0.229), 1.0 / (255 * 0.224), 1.0 / (255 * 0.225), 0.0};
    input_cvt_param.bias  = {-0.485 / 0.229, -0.456 / 0.224, -0.406 / 0.225, 0.0};
    //创建实例instance
    auto net_instance = tnn.CreateInst(config, error);
    //设置实例的输入
    auto status = net_instance->SetInputMat(input_mat, input_cvt_param);
    RETURN_ON_NEQ(status, TNN_NS::TNN_OK);
    //实例前向推理
    status = net_instance->ForwardAsync(nullptr);
    RETURN_ON_NEQ(status, TNN_NS::TNN_OK);
    //声明Mat存放输出
    std::shared_ptr output_mat = nullptr;
    //取到输出
    status = net_instance->GetOutputMat(output_mat);
    RETURN_ON_NEQ(status, TNN_NS::TNN_OK);

带注册器的模板工厂模式

在看源码之前先大致了解一下C++最常用的设计模式——工厂模式,而且是带注册器的模板工厂模式https://www.cnblogs.com/xiaolincoding/p/11524401.html

你可能感兴趣的:(TNN源码阅读笔记(二))