ncnn推理总结

   

第一步:

设定类型和norm_val归一化值:

const float mean_vals[3] = { 0.f, 0.f, 0.f };
const float norm_vals[3] = { 1 / 255.f, 1 / 255.f, 1 / 255.f };

第二步:

归一化,第一行是做hwc ->chw的转换并创造 ncnn::Mat类型,第二行是转换类型和归一化

 ncnn::Mat in = ncnn::Mat::from_pixels(bgr2_resize.data, ncnn::Mat::PIXEL_BGR, bgr2_resize.cols, bgr2_resize.rows);
 in.substract_mean_normalize(mean_vals, norm_vals);

第三步:

推理

    // 推理
    ncnn::Extractor ex = m_Net_lipid->create_extractor();
    ex.set_light_mode(false);//是否轻量化
    ex.set_num_threads(8);//推理的核数

第四步

输出

  // 将输出转换为 cv::Mat
  float* out_data = (float*)out.data;
  cv::Mat o_roi(400, 400, CV_32FC1, out_data);

其他总结

假如我们处理一个语义分割,直接就可以调用output类型的方法

 cv::Mat argmax_mat(1280, 1280, CV_8UC1);

 // 遍历每个像素位置,找到在第0维度(通道)上的最大值索引
 for (int y = 0; y < 1280; ++y) {
     for (int x = 0; x < 1280; ++x) {
         float max_val = std::numeric_limits<float>::lowest();
         int max_index = 0;
         for (int c = 0; c < 4; ++c) {
             float val = out.channel(c).row(y)[x];
             if (val > max_val) {
                 max_val = val;
                 max_index = c;
             }
         }
         argmax_mat.at<uchar>(y, x) = static_cast<uchar>(max_index);
     }
 }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值