ncnn教程

这篇博客详细介绍了如何用C++进行ncnn模型的加载和推理过程,包括定义模型、加载param和bin文件、处理输入数据、设置输出以及进行后处理步骤。通过这些步骤,可以将预训练的模型应用于实际图像识别任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写ncnn的C++步骤,基本分为五步:

1.定义模型:

ncnn:: Net  net;

2.load模型:

#由其他框架例如pytorch,tensorflow转化为ncnn的模型,包括两个文件.param和.bin

net.load_param("model.param");

net.load_model("model.bin");

3.定义输入数据:

cv::Mat bgr=cv::imread("path to image");

const int target_size = 300;//图像resize的大小

ncnn::Mat in=ncnn::Mat::from_pixels_resize(bgr.data,ncnn::Mat::PIXEL_BGR2RGB,bgr.cols,bgr.rows,target_size,target_size);

//归一化

const float mean_vals[3] = {123.675f, 116.28f, 103.53f};
const float norm_vals[3] = {1.0f, 1.0f, 1.0f};

in.substract_mean_normalize(mean_vals,norm_vals);

4.定义输出:

ncnn::Extractor ex=net.creator_extractor();

ex.set_num_threads(num_thread);//设置多线程

ex.input("input",in);

ncnn::Mat out;

ex.output("output",out);

5.后处理:

 std::vector<float>  cls_scores;

  // manually call softmax on the fc output
    // convert result into probability
    // skip if your model already has softmax operation
    {
        ncnn::Layer* softmax = ncnn::create_layer("Softmax");

        ncnn::ParamDict pd;
        softmax->load_param(pd);

        softmax->forward_inplace(out, shufflenetv2.opt);

        delete softmax;
    }

    out = out.reshape(out.w * out.h * out.c);

    cls_scores.resize(out.w);
    for (int j = 0; j < out.w; j++)
    {
        cls_scores[j] = out[j];
    }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值