0

0

如何将PyTorch ResNet50模型导出为支持动态batch size的ONNX格式?

花韻仙語

花韻仙語

发布时间:2025-03-10 11:36:14

|

720人浏览过

|

来源于php中文网

原创

如何将pytorch resnet50模型导出为支持动态batch size的onnx格式?

本文阐述如何将PyTorch ResNet50模型导出为支持动态batch size的ONNX格式。 我们将解决导出过程中可能遇到的与动态batch size相关的难题。 原始代码中存在一些问题,例如imageretrievalnet类中未使用的self.lwhiten属性和gem类中使用parameter类型的self.p属性,这些都可能导致ONNX导出失败。

ONNX导出对动态形状和特定PyTorch操作符的处理有限制。gem类中self.p作为可学习参数,以及imageretrievalnet类中冗余属性,会增加导出复杂度,导致形状推断错误。

为了解决这些问题,我们需要修改代码:移除imageretrievalnet类中无用的self.lwhiten属性,并将gem类中的self.p属性改为常量赋值。 修改后的代码如下:

Skybox AI
Skybox AI

一键将涂鸦转为360°无缝环境贴图的AI神器

下载
import torch
import torch.nn as nn
from torchvision import models

class gem(nn.Module):
    def __init__(self, p=3, eps=1e-6):
        super(gem, self).__init__()
        self.p = p  # p设置为常量
        self.eps = eps

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        return torch.pow(torch.mean(torch.pow(x, self.p), dim=1, keepdim=True) + self.eps, 1/self.p)

class l2n(nn.Module):
    def __init__(self):
        super(l2n, self).__init__()

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        return x / torch.norm(x, p=2, dim=1, keepdim=True)

class ImageRetrievalNet(nn.Module):
    def __init__(self, dim: int = 512):
        super(ImageRetrievalNet, self).__init__()
        resnet50_model = models.resnet50()
        features = list(resnet50_model.children())[:-2]
        self.features = nn.Sequential(*features)
        self.pool = gem()
        self.whiten = nn.Linear(2048, dim, bias=True)
        self.norm = l2n()

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        o: torch.Tensor = self.features(x)
        pooled_t = self.pool(o)
        normed_t: torch.Tensor = self.norm(pooled_t)
        o: torch.Tensor = normed_t.squeeze(-1).squeeze(-1)
        if self.whiten is not None:
            whitened_t = self.whiten(o)
            normed_t: torch.Tensor = self.norm(whitened_t)
            o = normed_t
        return o.permute(1, 0)

通过这些修改,我们解决了ONNX导出过程中遇到的动态形状和参数类型不匹配问题。 现在,可以使用以下代码将修改后的模型导出为支持动态batch size的ONNX格式:

model = ImageRetrievalNet()
batch_size = 1  # 使用1进行测试,实际部署时batch size可变
input_shape = (batch_size, 3, 224, 224)
input_data = torch.randn(input_shape)
torch.onnx.export(
    model,
    input_data,
    "resnet50.onnx",
    input_names=["input"], output_names=["output"],
    opset_version=12,
    dynamic_axes={"input": {0: "batch_size"}, "output": {0: "batch_size"}}
)

修改后的代码能够成功导出ONNX模型并支持动态batch size,主要是因为消除了阻碍动态形状推断的因素,从而使ONNX导出过程顺利完成。 请确保已安装必要的库:torch, torchvision, onnx.

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

pytorch是干嘛的
pytorch是干嘛的

pytorch是一个基于python的深度学习框架,提供以下主要功能:动态图计算,提供灵活性。强大的张量操作,实现高效处理。自动微分,简化梯度计算。预构建的神经网络模块,简化模型构建。各种优化器,用于性能优化。想了解更多pytorch的相关内容,可以阅读本专题下面的文章。

433

2024.05.29

Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习
Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习

PyTorch 是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习。 使用Python 编写,因此对于大多数机器学习开发者而言,学习和使用起来相对简单。 PyTorch 的独特之处在于,它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。

24

2025.12.22

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

0

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

0

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

0

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

0

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

19

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

16

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号