先下载一个想要测试的图片,放到运行目录下,比如:

代码如下:
import torch, cv2
import numpy as np
import torch.nn.functional as F
from torchvision import models
import matplotlib.pyplot as plt
import os
import onnxruntime as ort
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
def preict_one_img(img_path):
img = cv2.imdecode(np.fromfile(img_path, dtype=np.uint8), 1)
img = cv2.resize(img, (224, 224))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
print(img.shape)
img = np.transpose(img,(2,0,1))
img = np.expand_dims(img, 0)
img = img.astype(np.float32)
img /= 255
print(img.shape)
outputs = ort_session.run(
None,
{"actual_input_1": img.astype(np.float32)},
print(np.max(outputs[0]))
print(np.argmax(outputs[0]))
out = torch.tensor(outputs[0],dtype=torch.float64)
out = F.softmax(out, dim=1)
proba, class_id = torch.max(out, 1)
proba = float(proba[0])
class_id = int(class_id)
img = img.squeeze(0)
new_img = np.transpose(img, (1, 2, 0))
plt.imshow(new_img)
plt.title("predicted class: %s . probability: %3f" % (classes[class_id], proba))
plt.show()
if __name__ == '__main__':
classes = models.AlexNet_Weights.IMAGENET1K_V1.value.meta["categories"]
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
img_path = "./cat_224x224.jpg"
model_path = "./alexnet.onnx"
ort_session = ort.InferenceSession(model_path, providers=['CUDAExecutionProvider'])
preict_one_img(img_path)
测试结果如下:

预测结果是一只波斯猫
1. 搭建自己的简单二分类网络,使用pytorch训练和测试;
2. 将pytorch训练的pth模型转换成ONNX,并编码测试;
3. 含训练和测试数据,含训练ok的pth模型和ONNX模型,含完整python和C++实现;
4. 使用方法:首先运行“TrainTestConvertOnnx.py”执行“训练数据读入、模型训练、模型测试、导出onnx”,再运行“TestOnnx.cpp”测试onnx(需要配置OpenCV);
tvm官网中,对从ONNX预训练模型中加载模型的教程说明
教程来自于:https://docs.tvm.ai/tutorials/frontend/from_onnx.html#sphx-glr-tutorials-frontend-from-onnx-py
首先我对教程进行了一些修改,很多东西没有必要,比如不是每次都需要从网上下载图片和模型,super_resolution.onnx和cat...
def init(self):
# 加载预训练模型
self.tokenizer = AutoTokenizer.from_pretrained("../all-MiniLM-L6-v2")
self..
使用 C++ 的 OpenCV 接口调用 ONNX 格式的 PyTorch 深度学习模型进行预测(Windows, C++, PyTorch, ONNX, Visual Studio, OpenCV)
编辑ONNX的python代码一、ONNX模型的基本操作1,加载ONNX模型2,保存ONNX模型3,OP节点列表4,输入节点名称5,输出节点名称6,参数节点二、ONNX模型的修改1,修改内部的变量2,创建tensor3,增加OP节点4,增加输入\输出tensor节点5,增加参数节点6,特殊节点-constant增加7,读取ONNX的参数tensor格式,转换为numpy三、例程得到第一个Conv的节点信息注意:在运行程序的时候,记得安装onnx的环境,在pycharm里面切换到onnx的解释器。关于onnx
在部署大规模深度学习应用的时候,要想满足应用需求或者压榨模型的性能,C++可能是比python更好的选择方案。基于此,特地记录最近的C++的学习经历。其实以终为始来思考为什么学习C++,首先是为了能够很好地提升模型的性能,满足应用场景中的高可用,高并发,低时延等要求。为了提升模型的性能,需要用到一些推理框架,如TensorRT、NCNN或者Openvino(本文中以TensorRT作为案例)。TensorRT在8.0以上的版本都支持Python的API了,但还是有必要学习C++。ONNX模型转换和优化。..
知道你们在催更,这不,模型部署入门系列教程来啦~
在前二期的教程中,我们带领大家成功部署了第一个模型,解决了一些在模型部署中可能会碰到的困难。今天开始,我们将由浅入深地介绍 ONNX 相关的知识。ONNX 是目前模型部署中最重要的中间表示之一。学懂了 ONNX 的技术细节,就能规避大量的模型部署问题。
在把 PyTorch 模型转换成 ONNX 模型时,我们往往只需要轻松地调用一