Pytorch图像分类模型转ONNX(同济子豪兄学习笔记)

这篇具有很好参考价值的文章主要介绍了Pytorch图像分类模型转ONNX(同济子豪兄学习笔记)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

安装配置环境
代码运行云GPU平台:公众号 人工智能小技巧 回复 gpu
同济子豪兄 2022-8-22 2023-4-28 2023-5-8
安装 Pytorch

pip3 install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu113

安装 ONNX

pip install onnx -i https://pypi.tuna.tsinghua.edu.cn/simple

安装推理引擎 ONNX Runtime

pip install onnxruntime -i https://pypi.tuna.tsinghua.edu.cn/simple

安装其它第三方工具包

pip install numpy pandas matplotlib tqdm opencv-python pillow -i https://pypi.tuna.tsinghua.edu.cn/simple

验证安装配置成功

import torch
import onnx
import onnxruntime as ort
print('PyTorch 版本', torch.__version__)
print('ONNX 版本', onnx.__version__)
print('ONNX Runtime 版本', ort.__version__)

Pytorch图像分类模型转ONNX-ImageNet1000类
把Pytorch预训练ImageNet图像分类模型,导出为ONNX格式,用于后续在推理引擎上部署。
代码运行云GPU平台:公众号 人工智能小技巧 回复 gpu
同济子豪兄 2022-8-22 2023-4-28 2023-5-8

import torch
from torchvision import models
import onnx

device=torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print('device:',device)

# 载入ImageNet预训练PyTorch图像分类模型
model=models.resnet18(pretrained=True)
model=model.eval().to(device)
# 构造一个输入图像Tensor
x=torch.rand(1,3,256,256).to(device)
print(x.shape)
# 输入PyTorch模型推理预测,获得1000个类别预测结果
output=model(x)
print(output.shape)
# PyTorch模型转ONNX格式
with torch.no_grad():
    torch.onnx.export(
        model,                    # 要转换的模型
        x,                        # 模型的任意一组输入
        'resnet18_imagenet.onnx', # 导出的ONNX文件名
        input_names=['input'],    # 输入Tensor的名称(自己起名字)
        output_names=['output'],  # 输出Tensor的名称(自己起名字)
        opset_version=11,         # ONNX算子集版本
    )
# 验证onnx模型导出成功
# 读取ONNX模型
onnx_model=onnx.load('resnet18_imagenet.onnx')
# 检查模型格式是否正确
onnx.checker.check_model(onnx_model)
print('无报错,onnx模型导入成功!')
# 以可读的形式打印计算图
print(onnx.helper.printable_graph(onnx_model.graph))
#使用Netron可视化模型结构
#Netron:https://netron.app
#视频教程:https://www.bilibili.com/video/BV1TV4y1P7AP

PyTorch图像分类模型转ONNX-花分类

import torch
from torchvision import models
import onnx

device=torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print('device:',device)

# 导入训练好的模型
model=torch.load('MobileNetV2.pth')
model=model.eval().to(device)
# 构造一个输入图像Tensor
x=torch.rand(1,3,224,224).to(device)
print(x.shape)
# 输入PyTorch模型推理预测,获得N个类别预测结果
output=model(x)
print(output.shape)
# PyTorch模型转ONNX格式
with torch.no_grad():
    torch.onnx.export(
        model,                    # 要转换的模型
        x,                        # 模型的任意一组输入
        'mobilenetv2_flowers5.onnx', # 导出的ONNX文件名
        input_names=['input'],    # 输入Tensor的名称(自己起名字)
        output_names=['output'],  # 输出Tensor的名称(自己起名字)
        opset_version=11,         # ONNX算子集版本
    )
# 验证onnx模型导出成功
# 读取ONNX模型
onnx_model=onnx.load('mobilenetv2_flowers5.onnx')
# 检查模型格式是否正确
onnx.checker.check_model(onnx_model)
print('无报错,onnx模型导入成功!')
# 以可读的形式打印计算图
print(onnx.helper.printable_graph(onnx_model.graph))
# 登录netron.app在线模型可视化网页打开可视化模型结构

扩展阅读
【同济子豪兄】两天搞定图像分类、目标检测、语义分割、实例分割、关键点检测毕业设计:https://github.com/TommyZihao/Train_Custom_Dataset
ONNX主页: https://onnx.ai
ONNX Github主页: https://github.com/onnx/onnx
ONNX支持的深度学习框架:https://onnx.ai/supported-tools.html
ONNX支持的计算平台:https://onnx.ai/supported-tools.html
ONNX算子:https://onnx.ai/onnx/operators
模型在线可视化网站 Netron:https://netron.app
Netron视频教程:https://www.bilibili.com/video/BV1TV4y1P7AP
周奕帆博客
模型部署入门教程(一):模型部署简介 https://zhuanlan.zhihu.com/p/477743341
模型部署入门教程(二):解决模型部署中的难题 https://zhuanlan.zhihu.com/p/479290520
模型部署入门教程(三):PyTorch 转 ONNX 详解 https://zhuanlan.zhihu.com/p/498425043文章来源地址https://www.toymoban.com/news/detail-708258.html

到了这里,关于Pytorch图像分类模型转ONNX(同济子豪兄学习笔记)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习笔记 - PyTorch Image Models图像模型概览 (timm)

            PyTorch Image Models (timm)是一个用于最先进的图像分类的库,包含图像模型、优化器、调度器、增强等的集合;是比较热门的论文及代码库。         虽然越来越多的低代码和无代码解决方案可以轻松开始将深度学习应用于计算机视觉问题,但我们经常与希望寻求

    2024年02月12日
    浏览(35)
  • 图像分类:Pytorch图像分类之--ResNet模型

    前言  ResNet 网络是在 2015年 由微软实验室提出,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名。 原论文地址:Deep Residual Learning for Image Recognition(作者是CV大佬何凯明团队) ResNet创新点介绍 在ResNet网络中创新点

    2023年04月11日
    浏览(36)
  • 【深度学习】pytorch pth模型转为onnx模型后出现冗余节点“identity”,onnx模型的冗余节点“identity”

    onnx模型的冗余节点“identity”如下图。 首先,确保您已经安装了onnx-simplifier库: 然后,您可以按照以下方式使用onnx-simplifier库: 通过这个过程,onnx-simplifier库将会检测和移除不必要的\\\"identity\\\"节点,从而减少模型中的冗余。 请注意,使用onnx-simplifier库可能会改变模型的计算

    2024年02月09日
    浏览(45)
  • 【ONNX】使用 C++ 调用 ONNX 格式的 PyTorch 深度学习模型进行预测(Windows, C++, PyTorch, ONNX, Visual Studio, OpenCV)

    要使用 ONNX 模型进行预测,就需要使用 onnx runtime 首先到 ONNX 官网查询所需的版本 这里使用的 Windows,同时装了 CUDA 下面的链接可以进入到安装网址 https://www.nuget.org/packages/Microsoft.ML.OnnxRuntime.Gpu 安装命令为: 首先打开 Visual Studio 2019 新建一个用于测试的项目 右键点击项目,可

    2024年02月09日
    浏览(59)
  • 【AI】yolov5:数据下载、图像标注、训练、预测等,超详细笔记;pytorch转onnx再转TensorRT;训练识别口罩

    https://gitcode.net/mirrors/ultralytics/yolov5/ 1)安装pytorch 2)安装cudnn 3)下载yolov5源码: 4)安装yolov5依赖

    2024年02月15日
    浏览(49)
  • 人工智能(Pytorch)搭建模型1-卷积神经网络实现简单图像分类

    本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 目录 一、Pytorch深度学习框架 二、 卷积神经网络 三、代码实战 内容: 一、Pytorch深度学习框架 PyTorch是一个开源的深度学习框架,它基于Torch进行了重新实现,主要支持GPU加速计算,同时也可以在CPU上运行

    2024年02月03日
    浏览(66)
  • 【Pytorch】计算机视觉项目——卷积神经网络CNN模型识别图像分类

    在上一篇笔记《【Pytorch】整体工作流程代码详解(新手入门)》中介绍了Pytorch的整体工作流程,本文继续说明如何使用Pytorch搭建卷积神经网络(CNN模型)来给图像分类。 其他相关文章: 深度学习入门笔记:总结了一些神经网络的基础概念。 TensorFlow专栏:《计算机视觉入门

    2024年02月05日
    浏览(56)
  • 【图像分类】【深度学习】ViT算法Pytorch代码讲解

    ViT是由谷歌公司的Dosovitskiy, Alexey等人在《 An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale【ICLR2021】》【论文地址】一文中提出的模型,提出了一种基于transformer结构的模型,摒弃传统的CNN结构,直接将Transformer应用到图像块序列上一样可以达到非常好的性能。 论文

    2024年02月08日
    浏览(65)
  • 第62步 深度学习图像识别:多分类建模(Pytorch)

    一、写在前面 上期我们基于TensorFlow环境做了图像识别的多分类任务建模。 本期以健康组、肺结核组、COVID-19组、细菌性(病毒性)肺炎组为数据集,基于Pytorch环境,构建SqueezeNet多分类模型,因为它建模速度快。 同样,基于GPT-4辅助编程,这次改写过程就不展示了。 二、多

    2024年02月11日
    浏览(40)
  • 【NLP】一个使用PyTorch实现图像分类的迁移学习实例

    在特征提取中,可以在预先训练好的网络结构后修改或添加一个简单的分类器,然后将源任务上预先训练好的网络作为另一个目标任务的特征提取器,只对最后增加的分类器参数重新学习,而预先训练好的网络参数不被修改或冻结。 在完成新任务的特征提取时使用的是源任务

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包