首先從一個例子看起梨撞,在example文件夾下有檢測和分類的例子,但是又封裝了幾層接口香罐,這里我把主要的流程代碼提出來了卧波,這是可以單獨(dú)load模型跑起來的代碼,如下:
//創(chuàng)建模型
TNN_NS::TNN tnn;
//創(chuàng)建模型配置
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);
//創(chuàng)建網(wǎng)絡(luò)配置
TNN_NS::NetworkConfig config;
config.device_type = TNN_NS::DEVICE_ARM;
TNN_NS::Status error;
//設(shè)置輸入歸一化參數(shù)
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};
//創(chuàng)建實(shí)例instance
auto net_instance = tnn.CreateInst(config, error);
//設(shè)置實(shí)例的輸入
auto status = net_instance->SetInputMat(input_mat, input_cvt_param);
RETURN_ON_NEQ(status, TNN_NS::TNN_OK);
//實(shí)例前向推理
status = net_instance->ForwardAsync(nullptr);
RETURN_ON_NEQ(status, TNN_NS::TNN_OK);
//聲明Mat存放輸出
std::shared_ptr<TNN_NS::Mat> output_mat = nullptr;
//取到輸出
status = net_instance->GetOutputMat(output_mat);
RETURN_ON_NEQ(status, TNN_NS::TNN_OK);
帶注冊器的模板工廠模式
在看源碼之前先大致了解一下C++最常用的設(shè)計(jì)模式——工廠模式庇茫,而且是帶注冊器的模板工廠模式https://www.cnblogs.com/xiaolincoding/p/11524401.html
港粱。