QT 6.6.0 基于OpenCV加载.pth模型文件转换之后的ONNX模型文件,并且实现图像分类

部署运行你感兴趣的模型镜像

目录

思路:

OpenCV加载权重文件方式

重点函数详解

OpenCV拓展应用


 B站视频讲解

GitHub源码v1版本(归一化方式一)

GitHub源码v2版本(归一化方式二) 

关于ONNX的介绍

QT初学案例教程
QT6.6.0实现打开电脑摄像头或其他的外接摄像头(实现拍照功能)
QT6.6.0实现简单的录音器
QT6.6.0实现一个简单的视频和音频播放器
QT6.6.0实现简单的视频录制(包含语音录制)器
QT6.6.0关于QMediaMetaData功能以及列子说明使用方法
QT6.6.0实现QtCamera功能(拍照,录像以及图像和视频的相关配置)
T6.6.0实现更好的视频播放器(前期改进)
QT6.6.0实现图表如饼图,柱状图,散点图以及盒图等的基本使用
QT6.6.0实现客户端Socket编程以及socket测试软件通信
QT6.6.0 实现服务端Server和多个客户端Client通信以及socket测试软件通信
QT6.6.0 实现QNetworkAccessManager的基本应用以及其拓展使用
QT6.6.0 实现服务端Server和多个客户端Client互相发送文件信息
QT6.6.0和QT6.0以下的版本实现FTP文件上传和下载(过程详解)
QT6.6.0实现QNetworkInterface网络接口,QHostAddress网络地址IP以及域名解析等相关信息查询。
QT6.6.0基于QTcpSocket和QTcpServer实现多个客户端群聊
QT6.6.0实现基于UDP协议的简单通信(过程详解)
QT 6.6.0基于UDP协议实现广播和多播机制(过程详解)
QT 6.6.0基于UDP协议实现群聊功能(过程详解)
QT 6.6.0中OpenCV两种环境的配置方法以及基本使用例子
QT 6.6.0 中基于OpenCV的图像变换以及基于鼠标点击移动事件的图像绘制
QT 6.6.0 基于OpenCV对图像进行旋转,缩放和裁剪等操作
QT 6.6.0 基于OpenCV实现图像风格的改变(add和subtract)
PyTorch 训练之后的网络模型.pth转.onnx文件并对图像进行预测

本文主要是基于QT中OpenCV的使用以及深度学习中图像分类来实现的,建议读者先看之前QT 6.6.0中OpenCV的环境的配置(QT 6.6.0中OpenCV两种环境的配置方法以及基本使用例子)和图像分类算法实现(PyTorch实现一个简单的图像分类(代码详细))。

思路:

  • 图像分类模型训练得到权重文件.pth;

PyTorch 训练之后的网络模型.pth转.onnx文件并对图像进行预测

  • QT中使用OpenCV加载ONNX权重文件实现图像分类;

  • 通过QT界面来更加方便和直接对图像进行预测。

注:.pth和ONNX模型文件在GitHub源码中 

OpenCV加载权重文件方式

加载函数含义

cv::dnn::readNet

用于从文件中加载网络模型。它可以自动识别模型的框架(如Caffe, TensorFlow, Torch, Darknet等),前提是文件扩展名和/或内容符合特定框架的标准。它允许通过文件名直接加载模型,无需指定框架类型。

cv::dnn::readNetFromCaffe

专门用于从Caffe框架的.prototxt(网络结构描述文件)和.caffemodel(权重文件)中加载模型。

cv::dnn::readNetFromDarknet

用于从Darknet框架的.cfg(配置文件)和.weights(权重文件)中加载模型。

cv::dnn::readNetFromModelOptimizer

用于加载通过Intel的Model Optimizer工具优化后的模型。这些模型通常以.xml(网络结构)和.bin(权重)文件的形式存在。

cv::dnn::readNetFromONNX

用于加载ONNX(Open Neural Network Exchange)格式的模型。ONNX是一种开放格式,用于表示深度学习模型,支持多种框架。

cv::dnn::readNetFromTensorflow

专门用于加载TensorFlow框架的模型。它可以处理.pb(Protobuf格式)和.pbtxt(Protobuf文本格式)文件。

cv::dnn::readNetFromTorch

用于加载Torch(框架的模型。它支持.t7(Torch 7的模型文件)格式。

cv::dnn::readTensorFromONNX 和 cv::dnn::readTorchBlob

从.pb文件创建blob。参数为带输入张量的.pb文件的路径。

注意:由于本文图像分类算法采用PyTorch框架实现的,因此只用到cv::dnn::readNetFromONNX加载网络模型。


重点函数详解

归一化方式一: 

归一化方式二:

blobFromImage(InputArray image, OutputArray blob, 
                double scalefactor=1.0,const Size& size = Size(), 
                const Scalar& mean = Scalar(),bool swapRB=false, 
                bool crop=false, int ddepth=CV_32F);

参数含义
image:      输入图像(cv::Mat),可以是1、3或4通道的图像。
scalefactor:图像各通道数值的缩放比例。通常用于数据归一化。如果要将像素值从[0, 255]缩放到[0, 1],                
             则scalefactor应设置为1.0/255.0。
size:       输出图像的空间大小,格式为(width, height)。这个参数指定了返回的blob中数据的尺寸,即 
             神经网络输入层的尺寸。
mean:       用于各通道减去的值,以降低光照等因素的影响。这个参数是一个包含三个元素的向量(对于BGR 
             图像),分别对应B、G、R三个通道需要减去的均值。
swapRB:     是否交换R和B通道。由于OpenCV默认使用BGR格式,PyTorch搭建的神经网络框架使用RGB格式,    
             因此这个参数用于在必要时进行通道交换。
crop:       是否进行图像裁剪。当此参数为true时,函数会先按比例缩放图像,然后从中心裁剪成size指定 
             的尺寸。
ddepth:     输出的图像深度。这个参数指定了blob的数据类型,通常选择CV_32F(32位浮点数),因为DNN 
             中很多参数都是浮点数。

注:
缩放:scaled_image = image × scalefactor
均值减法:normalized_image = scaled_image − mean

注:关于model.forward("predictions")这个最后输出层的名称,要和转化为ONNX时指定的输出层名称相对应[PyTorch 训练之后的网络模型.pth转.onnx文件并对图像进行预测]。

void minMaxLoc(InputArray src, CV_OUT double* minVal,
               CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0,
               CV_OUT Point* maxLoc = 0, InputArray mask = noArray());


src:    输入的单通道数值数组。
minVal: 指向找到的最小值的指针。如果不需要,则为 NULL。
maxVal: 指向找到的最大值的指针。如果不需要,则为 NULL。
minLoc: 指向找到的最小值位置的指针(以图像坐标表示)。如果不需要,则为 NULL。
maxLoc: 指向找到的最大值位置的指针(以图像坐标表示)。如果不需要,则为 NULL。
mask:   可选的操作掩码,用于指定哪些元素需要考虑在内。它必须是单通道数组,
        与输入数组具有相同的尺 寸。非零元素表示相应的元素在 src 中被考虑。

注:对于本文最终输出的结果维度为[1,5],是一个二维矩阵的形式,那么得到最大值位置的指针之后,
    怎么才能得到对应的索引呢?由于maxLoc为Point类型,包含[x,y],x对应横轴,y对应纵轴;二维
    矩阵的行对应坐标的y轴,列对应坐标的x轴;而输出的[1,5]对应5个类别,因此只需要得到maxLoc的
    x坐标位置即可得到对应最大预测概率索引类别.

OpenCV拓展应用

OpenCV下的图形交互和媒体接口HighGUI
OpenCV中Mat类模板的一些基本操作(实例)
OpenCV下的Mat类模板基础(实例)
Opencv实现信用卡识别
Opencv实现停车位识别
Dlib+Opencv库实现疲劳检测
Dlib库实现人脸关键点检测(Opencv实现)
Opencv+YOLO-V3实现目标跟踪
YOLO-V3实时检测实现(opencv+python实现)——改进——>更加的易懂
YOLO-V3实时检测实现(opencv+python实现)
Opencv中使用Tracker实现物体跟踪
Opencv实现颜色检测
Opencv实现目标检测
Opencv实现对象跟踪
Opencv中的Canny边缘检测
Opencv级联分类器训练自己的.xml文件
visual studo 2022中使用Opencv人脸检测
Opencv进行人脸检测(第三版改进)
Opencv进行人脸检测(改进)
OpenCV进行人脸识别

QT 基于OpenCV加载ONNX模型文件实现图像分类

您可能感兴趣的与本文相关的镜像

PyTorch 2.7

PyTorch 2.7

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值