我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++ ncnn模型验证精度如何实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++ ncnn模型验证精度如何实现

本篇内容主要讲解“C++ ncnn模型验证精度如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ ncnn模型验证精度如何实现”吧!

验证ncnn模型的精度

1、进行pth模型的验证

得到ncnn模型的顺序为:.pth–>.onnx–>ncnn

.pth的精度验证如下:

如进行的是二分类:

    model = init_model(model, data_cfg, device=device, mode='eval')    ###.pth转.onnx模型    # #---    # input_names = ["x"]    # output_names = ["y"]    # inp = torch.randn(1, 3, 256, 128) ##错误示例    inp = np.full((1, 3, 160, 320), 0.5).astype(np.float) #(160,320) = (h,w)    inp = torch.FloatTensor(inp)    out = model(inp)    print(out)

没有经过softmax层,out输出为±1的两个值。

2、转为onnx后的精度验证

   sess = onnxruntime.InferenceSession("G:\\pycharm_pytorch271\\pytorch_classification\\main\\sim.onnx", providers=["CUDAExecutionProvider"])  # use gpu    input_name = sess.get_inputs()[0].name    print("input_name: ", input_name)    output_name = sess.get_outputs()[0].name    print("output_name: ", output_name)    # test_images = torch.rand([1, 3, 256, 128])    test_images = np.full((1, 3, 160, 320), 0.5).astype(np.float) #(160,320) = (h,w)    test_images = torch.FloatTensor(test_images)    print("test_image", test_images)    prediction = sess.run([output_name], {input_name: test_images.numpy()})    print(prediction)

3、ncnn精度验证

首先保证mean、norm输出的值与onnx保持一致,因为onnx直接输入值0.5,ncnn模型经过mean、norm计算后的结果与0.5一致就行。

然后就是ncnn模型的计算输出

- 查看输出结果是否是0.5,首先得将输入值1给到img

 ```cpp     constexpr int w = 320;     constexpr int h = 160;     float cbuf[h][w];     cv::Mat img(h, w, CV_8UC3,(float *)cbuf);     //BYTE* iPtr = new BYTE[128 * 256 * 3];     BYTE* iPtr = new BYTE[h * w * 3];     for (int i = 0; i < h; i++)     {         for (int j = 0; j < w; j++)         {             for (int k = 0; k < 3; k++)             {                 //iPtr[i * 256 * 3 + j * 3 + k] = img.at<cv::Vec3f>(i, j)[k];                 img.at<cv::Vec3b>(i, j)[k] = 1;             }         }     } ``` - 经过上面的赋值,通过了mean、norm计算后,得到的结果进行查看,值为0.5则正确转换。得到的结果送入下面的代码进行输出。 ncnn结果为mat,因此采用该方法进行遍历查看。 ```cpp //输出ncnn mat void ncnn_mat_print(const ncnn::Mat& m) {     for (int q = 0; q < m.c; q++)     {         const float* ptr = m.channel(q);         for (int y = 0; y < m.h; y++)         {             for (int x = 0; x < m.w; x++)             {                 printf("%f ", ptr[x]);             }             ptr += m.w;             printf("\n");         }         printf("------------------------\n");     } } ``` 将mat给到模型进行推理得到结果。

4、结果确认

一般情况下,pth模型与onnx模型结果相差不大,ncnn会有点点损失,千分位上的损失,这样精度基本上是一致的。

若不一致,看哪一步结果相差太大,如果是ncnn这一步相差太大,检查是否是值输入有问题,或者是输入的(h,w)弄反了。

到此,相信大家对“C++ ncnn模型验证精度如何实现”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++ ncnn模型验证精度如何实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++ ncnn模型验证精度如何实现

本篇内容主要讲解“C++ ncnn模型验证精度如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ ncnn模型验证精度如何实现”吧!验证ncnn模型的精度1、进行pth模型的验证得到n
2023-07-05

C++ncnn模型验证精度实现代码

这篇文章主要介绍了C++ncnn模型验证精度实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-02-24

Laravel中如何实现密码强度验证

本篇内容主要讲解“Laravel中如何实现密码强度验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Laravel中如何实现密码强度验证”吧!laravel 密码强度验证需求希望 laravel
2023-07-05

C++如何实现验证二叉搜索树

本文小编为大家详细介绍“C++如何实现验证二叉搜索树”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现验证二叉搜索树”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。验证二叉搜索树Example 1:In
2023-06-19

如何在C++中实现用户身份验证和授权?

在 c++++ 中实现用户身份验证和授权涉及以下步骤:安全地存储用户名和密码,并对密码进行哈希处理。在用户登录时验证其密码,并允许对应用程序的访问。根据用户的角色或权限授予他们不同的功能。如何在 C++ 中实现用户身份验证和授权用户身份验
如何在C++中实现用户身份验证和授权?
2024-05-12

利用Java+Selenium+OpenCV模拟如何实现网页滑动验证

本篇文章给大家分享的是有关利用Java+Selenium+OpenCV模拟如何实现网页滑动验证,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。目前很多网页都有滑动验证,目的就是防
2023-06-26

如何利用 C++ 函数模板实现泛型编程?

泛型编程通过函数模板实现,允许创建通用的代码处理不同类型的数据,无需修改源代码。函数模板的基本语法为:template returntype functionname(t arg1, t arg2, ...),其中 t 为类型参数。通过实
如何利用 C++ 函数模板实现泛型编程?
2024-04-15

C#模拟试验中如何实现的弹性物体碰撞

这篇文章将为大家详细讲解有关C#模拟试验中如何实现的弹性物体碰撞,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。无聊之际用C#写了一个弹性物体碰撞模拟玩玩。这个想法源自与前几天上机课有人想我在
2023-06-17

如何使用 C++ 函数模板实现参数化类型?

使用 c++++ 函数模板实现参数化类型简介函数模板可以处理不同类型的通用函数。参数化类型使函数模板更进一步,可以接受不同类型的参数。代码示例: 1. 定义函数模板 print_pair(t, u) 处理不同类型对。 2. 在主函数中调
如何使用 C++ 函数模板实现参数化类型?
2024-04-15

如何在C++项目中实现模板中的非类型参数

这篇文章给大家介绍如何在C++项目中实现模板中的非类型参数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。非类型模板参看,顾名思义,模板参数不限定于类型,普通值也可作为模板参数。在基于类型的模板中,模板实例化时所依赖的是
2023-06-06

C++并发编程:如何实现高效的异步编程模型?

异步编程提高了响应能力,在 c++++ 中可通过以下方式实现:协程:轻量级协作任务,使用协程库(如 folly)创建和管理。future:表示异步操作结果,使用 future 库(如 std::future)创建和管理。非阻塞模型:协程和
C++并发编程:如何实现高效的异步编程模型?
2024-05-01

如何使用 C++ 函数模板实现函数指针的泛型化?

c++++ 函数模板允许泛化函数指针,支持不同类型参数的函数指针。具体步骤如下:声明带有函数指针的函数模板,其中 t 为模板类型参数。将要泛化的函数指针作为参数传递给模板函数。模板函数返回泛型函数指针。使用 C++ 函数模板实现函数指针的泛
如何使用 C++ 函数模板实现函数指针的泛型化?
2024-04-15

C++并发编程:如何实现基于事件驱动的并发模型?

基于事件驱动的并发模型是 c++++ 中一种流行的并发编程范式,它使用事件循环处理来自不同来源的事件。事件循环是一个无限循环,检索和处理事件队列中的事件,通常通过调用回调函数。在 c++ 中,可以使用 libevent 或操作系统 api
C++并发编程:如何实现基于事件驱动的并发模型?
2024-05-06

如何在Python中进行数据可靠性验证和模型评估的最佳实践和算法选择

如何在Python中进行数据可靠性验证和模型评估的最佳实践和算法选择引言:在机器学习和数据分析领域,验证数据的可靠性和评估模型的性能是非常重要的工作。通过验证数据的可靠性,可以保证数据的质量和准确性,从而提高模型的预测能力。而对模型进行评估
2023-10-27

C++ 函数继承详解:如何使用模板继承来实现泛型代码复用?

c++++ 函数继承通过模板继承实现泛型代码复用,允许创建通用函数模板,然后继承更具体的函数,定制不同的数据类型行为。代码示例包括打印容器函数,通过继承定制打印整数和字符串容器。函数继承增强代码复用、可读性、可维护性,以及通过继承类轻松扩展
C++ 函数继承详解:如何使用模板继承来实现泛型代码复用?
2024-05-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录