pytorch2ONNX时,AdaptiveAvgPool2d的相关问题

1、torchvision.models.vgg11_bn

from torchsummary import summary
import torch
from torchvision import modelsdevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = models.vgg11_bn(num_classes=2).to(device)# 打印模型结构
backbone1 = summary(model, (3, 128, 128))
backbone2 = summary(model, (3, 224, 224))
  • 当图片输入尺寸为:(3, 224, 224),模型的输出结构如下:
----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Conv2d-1         [-1, 64, 224, 224]           1,792BatchNorm2d-2         [-1, 64, 224, 224]             128ReLU-3         [-1, 64, 224, 224]               0MaxPool2d-4         [-1, 64, 112, 112]               0Conv2d-5        [-1, 128, 112, 112]          73,856BatchNorm2d-6        [-1, 128, 112, 112]             256ReLU-7        [-1, 128, 112, 112]               0MaxPool2d-8          [-1, 128, 56, 56]               0Conv2d-9          [-1, 256, 56, 56]         295,168BatchNorm2d-10          [-1, 256, 56, 56]             512ReLU-11          [-1, 256, 56, 56]               0Conv2d-12          [-1, 256, 56, 56]         590,080BatchNorm2d-13          [-1, 256, 56, 56]             512ReLU-14          [-1, 256, 56, 56]               0MaxPool2d-15          [-1, 256, 28, 28]               0Conv2d-16          [-1, 512, 28, 28]       1,180,160BatchNorm2d-17          [-1, 512, 28, 28]           1,024ReLU-18          [-1, 512, 28, 28]               0Conv2d-19          [-1, 512, 28, 28]       2,359,808BatchNorm2d-20          [-1, 512, 28, 28]           1,024ReLU-21          [-1, 512, 28, 28]               0MaxPool2d-22          [-1, 512, 14, 14]               0Conv2d-23          [-1, 512, 14, 14]       2,359,808BatchNorm2d-24          [-1, 512, 14, 14]           1,024ReLU-25          [-1, 512, 14, 14]               0Conv2d-26          [-1, 512, 14, 14]       2,359,808BatchNorm2d-27          [-1, 512, 14, 14]           1,024ReLU-28          [-1, 512, 14, 14]               0MaxPool2d-29            [-1, 512, 7, 7]               0
AdaptiveAvgPool2d-30            [-1, 512, 7, 7]               0Linear-31                 [-1, 4096]     102,764,544ReLU-32                 [-1, 4096]               0Dropout-33                 [-1, 4096]               0Linear-34                 [-1, 4096]      16,781,312ReLU-35                 [-1, 4096]               0Dropout-36                 [-1, 4096]               0Linear-37                    [-1, 2]           8,194
================================================================
Total params: 128,780,034
Trainable params: 128,780,034
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 182.02
Params size (MB): 491.26
Estimated Total Size (MB): 673.85
----------------------------------------------------------------
  • 当图片输入尺寸为:(3, 128, 128),模型的输出结构如下:
----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Conv2d-1         [-1, 64, 128, 128]           1,792BatchNorm2d-2         [-1, 64, 128, 128]             128ReLU-3         [-1, 64, 128, 128]               0MaxPool2d-4           [-1, 64, 64, 64]               0Conv2d-5          [-1, 128, 64, 64]          73,856BatchNorm2d-6          [-1, 128, 64, 64]             256ReLU-7          [-1, 128, 64, 64]               0MaxPool2d-8          [-1, 128, 32, 32]               0Conv2d-9          [-1, 256, 32, 32]         295,168BatchNorm2d-10          [-1, 256, 32, 32]             512ReLU-11          [-1, 256, 32, 32]               0Conv2d-12          [-1, 256, 32, 32]         590,080BatchNorm2d-13          [-1, 256, 32, 32]             512ReLU-14          [-1, 256, 32, 32]               0MaxPool2d-15          [-1, 256, 16, 16]               0Conv2d-16          [-1, 512, 16, 16]       1,180,160BatchNorm2d-17          [-1, 512, 16, 16]           1,024ReLU-18          [-1, 512, 16, 16]               0Conv2d-19          [-1, 512, 16, 16]       2,359,808BatchNorm2d-20          [-1, 512, 16, 16]           1,024ReLU-21          [-1, 512, 16, 16]               0MaxPool2d-22            [-1, 512, 8, 8]               0Conv2d-23            [-1, 512, 8, 8]       2,359,808BatchNorm2d-24            [-1, 512, 8, 8]           1,024ReLU-25            [-1, 512, 8, 8]               0Conv2d-26            [-1, 512, 8, 8]       2,359,808BatchNorm2d-27            [-1, 512, 8, 8]           1,024ReLU-28            [-1, 512, 8, 8]               0MaxPool2d-29            [-1, 512, 4, 4]               0
AdaptiveAvgPool2d-30            [-1, 512, 7, 7]               0Linear-31                 [-1, 4096]     102,764,544ReLU-32                 [-1, 4096]               0Dropout-33                 [-1, 4096]               0Linear-34                 [-1, 4096]      16,781,312ReLU-35                 [-1, 4096]               0Dropout- ==**当图片输入尺寸为:(3, 128, 128),模型的输出结构如下:**==
-36                 [-1, 4096]               0Linear-37                    [-1, 2]           8,194
================================================================
Total params: 128,780,034
Trainable params: 128,780,034
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.19
Forward/backward pass size (MB): 59.69
Params size (MB): 491.26
Estimated Total Size (MB): 551.14
----------------------------------------------------------------

2、对比发现

  • 两种尺寸图片都可以正常训练,224是torch官方使用的尺寸,训练imagenet训练,并且提供了训练权重。当模型属输入尺寸为128时,仍然可以使用预训练权重,但是可以看到MaxPool2d到AdaptiveAvgPool2d时,输出尺寸发生了变化,这是因为AdaptiveAvgPool2d可以动态的调整输入尺寸的大小和stride。可以更好的适应不同的输入出尺寸。
  • 在训练模型时,这些层在前向传播过程中可以产生输出,但是在反向传播过程中并不影响梯度的计算。因此,尽管在导出到ONNX格式时可能会遇到一些限制或错误,但模型仍然可以继续通过梯度下降算法进行训练。

3、结论

  • 在ONNX导出时,当AdaptiveAvgPool2d的输入尺寸和输出尺寸不对应时,就会提示错误:
raise errors.SymbolicValueError(
torch.onnx.errors.SymbolicValueError: Unsupported: ONNX export of operator adaptive_avg_pool2d, output size that are not factor of input size. Please feel free to request support or submit a pull request on PyTorch GitHub: https://github.com/pytorch/pytorch/issues  [Caused by the value '100 defined in (%100 : Long(2, strides=[1], device=cpu) = onnx::Constant[value= 7  7 [ CPULongType{2} ]]()
)' (type 'Tensor') in the TorchScript graph. The containing node has kind 'onnx::Constant'.] 
  • 所以需要修改AdaptiveAvgPool2d,以正确的导出模型
  • 在导出onnx的过程中,很多动态层都不支持,需要改为固定输出
  • 在 PyTorch 的模型中,通常在使用 torchsummarysummary 函数时,如果没有指定 batch size,它会默认使用一个 batch size 为 2 来生成模型的 summary。这是因为在实际训练和推理过程中,通常会使用 mini-batch 处理数据,而选择 batch size 为 2 是一种常见的默认设置。

因此,当你调用 summary(model, (3, 128, 128)) 时,torchsummary 库会假定 batch size 为 2,然后将输入尺寸 (3, 128, 128) 传递给模型,以便计算模型的结构和参数数量。

如果你希望使用不同的 batch size,可以在调用 summary 函数时显式指定,例如:

backbone1 = summary(model, input_size=(3, 128, 128), batch_size=4)

通过提供 batch_size 参数,你可以自定义用于生成 summary 的 batch size。这样可以更好地了解模型在不同 batch size 下的行为和参数量。

4、模型修改

from torchsummary import summary
import torch
from torchvision import models
from torch import nndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = models.vgg11_bn(num_classes=2)
model.avgpool = nn.AdaptiveAvgPool2d((4, 4))
model.classifier = nn.Sequential(nn.Linear(512 * 4 * 4, 4096),nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, 4096),nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, 2),)
model.to(device)   # 模型修改之后,再搞到GPU上,不然报错# 打印模型结构
backbone1 = summary(model, (3, 128, 128))
backbone2 = summary(model, (3, 224, 224))
  • 当图片输入尺寸为:(3, 224, 224),模型的输出结构如下:
----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Conv2d-1         [-1, 64, 224, 224]           1,792BatchNorm2d-2         [-1, 64, 224, 224]             128ReLU-3         [-1, 64, 224, 224]               0MaxPool2d-4         [-1, 64, 112, 112]               0Conv2d-5        [-1, 128, 112, 112]          73,856BatchNorm2d-6        [-1, 128, 112, 112]             256ReLU-7        [-1, 128, 112, 112]               0MaxPool2d-8          [-1, 128, 56, 56]               0Conv2d-9          [-1, 256, 56, 56]         295,168BatchNorm2d-10          [-1, 256, 56, 56]             512ReLU-11          [-1, 256, 56, 56]               0Conv2d-12          [-1, 256, 56, 56]         590,080BatchNorm2d-13          [-1, 256, 56, 56]             512ReLU-14          [-1, 256, 56, 56]               0MaxPool2d-15          [-1, 256, 28, 28]               0Conv2d-16          [-1, 512, 28, 28]       1,180,160BatchNorm2d-17          [-1, 512, 28, 28]           1,024ReLU-18          [-1, 512, 28, 28]               0Conv2d-19          [-1, 512, 28, 28]       2,359,808BatchNorm2d-20          [-1, 512, 28, 28]           1,024ReLU-21          [-1, 512, 28, 28]               0MaxPool2d-22          [-1, 512, 14, 14]               0Conv2d-23          [-1, 512, 14, 14]       2,359,808BatchNorm2d-24          [-1, 512, 14, 14]           1,024ReLU-25          [-1, 512, 14, 14]               0Conv2d-26          [-1, 512, 14, 14]       2,359,808BatchNorm2d-27          [-1, 512, 14, 14]           1,024ReLU-28          [-1, 512, 14, 14]               0MaxPool2d-29            [-1, 512, 7, 7]               0
AdaptiveAvgPool2d-30            [-1, 512, 4, 4]               0Linear-31                 [-1, 4096]      33,558,528ReLU-32                 [-1, 4096]               0Dropout-33                 [-1, 4096]               0Linear-34                 [-1, 4096]      16,781,312ReLU-35                 [-1, 4096]               0Dropout-36                 [-1, 4096]               0Linear-37                    [-1, 2]           8,194
================================================================
Total params: 59,574,018
Trainable params: 59,574,018
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 181.89
Params size (MB): 227.26
Estimated Total Size (MB): 409.73
----------------------------------------------------------------
  • 当图片输入尺寸为:(3, 128, 128),模型的输出结构如下:
----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Conv2d-1         [-1, 64, 128, 128]           1,792BatchNorm2d-2         [-1, 64, 128, 128]             128ReLU-3         [-1, 64, 128, 128]               0MaxPool2d-4           [-1, 64, 64, 64]               0Conv2d-5          [-1, 128, 64, 64]          73,856BatchNorm2d-6          [-1, 128, 64, 64]             256ReLU-7          [-1, 128, 64, 64]               0MaxPool2d-8          [-1, 128, 32, 32]               0Conv2d-9          [-1, 256, 32, 32]         295,168BatchNorm2d-10          [-1, 256, 32, 32]             512ReLU-11          [-1, 256, 32, 32]               0Conv2d-12          [-1, 256, 32, 32]         590,080BatchNorm2d-13          [-1, 256, 32, 32]             512ReLU-14          [-1, 256, 32, 32]               0MaxPool2d-15          [-1, 256, 16, 16]               0Conv2d-16          [-1, 512, 16, 16]       1,180,160BatchNorm2d-17          [-1, 512, 16, 16]           1,024ReLU-18          [-1, 512, 16, 16]               0Conv2d-19          [-1, 512, 16, 16]       2,359,808BatchNorm2d-20          [-1, 512, 16, 16]           1,024ReLU-21          [-1, 512, 16, 16]               0MaxPool2d-22            [-1, 512, 8, 8]               0Conv2d-23            [-1, 512, 8, 8]       2,359,808BatchNorm2d-24            [-1, 512, 8, 8]           1,024ReLU-25            [-1, 512, 8, 8]               0Conv2d-26            [-1, 512, 8, 8]       2,359,808BatchNorm2d-27            [-1, 512, 8, 8]           1,024ReLU-28            [-1, 512, 8, 8]               0MaxPool2d-29            [-1, 512, 4, 4]               0
AdaptiveAvgPool2d-30            [-1, 512, 4, 4]               0Linear-31                 [-1, 4096]      33,558,528ReLU-32                 [-1, 4096]               0Dropout-33                 [-1, 4096]               0Linear-34                 [-1, 4096]      16,781,312ReLU-35                 [-1, 4096]               0Dropout-36                 [-1, 4096]               0Linear-37                    [-1, 2]           8,194
================================================================
Total params: 59,574,018
Trainable params: 59,574,018
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.19
Forward/backward pass size (MB): 59.56
Params size (MB): 227.26
Estimated Total Size (MB): 287.01
----------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepMind的首席执行官Demis Hassabis表示,未来一到两年内,能够独立完成复杂任务的AI代理将成为现实

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

根据指标体系数重排序算法

指标体系数 例子&#xff1a; 2 2.3 2.3.1 2.3.4 2.4 2.4.3 2.4.5 public static void changeOrderValueWithNaturalNumber(List<ExportAnnualDataDto> resultList) {if (org.apache.commons.collections4.CollectionUtils.isEmpty(resultList)){return;}// 序号按点分割…

会计之友杂志社投稿信箱邮箱

《会计之友》杂志杂志投稿信箱&#xff1a;kjzyzzhsh126.com 《会计之友》杂志杂志投稿信箱&#xff1a;kjzyzzhsh126.com 咨询电话&#xff1a;13356222771 咨询电话&#xff1a;13356222771 咨询电话&#xff1a;18366155179 咨询电话&#xff1a;18366155179 编辑在…

网络安全复习

概述 重要性 网络安全威胁 OSI安全体系结构 信息与网络安全目标 机密性完整性可用性 五类安全服务 八类安全机制 网络安全体系结构 基本安全设计原则 数据加密技术 2.1数据加密技术概述 2.2经典加密 2.3对称秘钥加密 2.4公开秘钥加密 Diffie-Hellman秘钥交换 对称…

MySQL入门学习-数据类型.文本字符串类型

MySQL中的文本字符串类型主要包括CHAR、VARCHAR、TEXT和BLOB四种类型。 一、文本字符串的特点、使用方法以及与其他类型的比较&#xff1a; 1. CHAR&#xff1a; - 特点&#xff1a;固定长度&#xff0c;最多可以存储255个字符。 - 使用方法&#xff1a;使用时需要指定长度&a…

【DDR 终端稳压器】Sink and Source DDR Termination Regulator [B]

正式从这里开始 TI 的选型&#xff1b; tps54116-q1 tps51200a-q1 TPS53317 典型电路 pin功能EN对于 DDR VTT 应用&#xff0c;请将 EN 连接到 SLP_S3 对于任何其他应用&#xff0c;请使用 EN 作为 ON/OFF 功能 始终保持 EN 电压等于或低于 VIN 电压GND信号接地 连接到输…

2024年成都市标杆场景项目申报条件对象、奖励和认定材料流程

一、申报条件 &#xff08;一&#xff09;申报主体需注册成立两年以上&#xff0c;具备独立法人资格&#xff0c;在成都有固定经营或者生产场地&#xff0c;上两年度主营业务收入年均1000万元以上或上两年度主营业务收入增长率年均10%以上&#xff1b; &#xff08;二&#x…

深度优先搜索(Depth-First Search, DFS)

深度优先搜索&#xff08;Depth-First Search, DFS&#xff09;是一种用于遍历或搜索树形结构&#xff08;如树、图等&#xff09;的算法。它沿着树的深度方向尽可能深地搜索&#xff0c;只有当当前分支无法继续深入时才回退到前一个节点&#xff0c;并尝试其他未被访问的分支。…

活字格中读取粘贴板中的内容:剪切板cp,我手机就吃这一亲!

哟,小伙伴们,今天我们来聊聊一个有趣的小功能吧! 你们应该都熟悉"复制粘贴"这个操作了吧?用CtrlC和CtrlV就可以将文字或图片等内容从一处复制到另一处,方便极了。但是,如果你的设备没有键盘,就没法使用快捷键了,那可怎么办呢? 别急,我们有解决办法!开发应用的时候…

【复利思维 + 项目成功方程式】用1年,超越别人38年!

复利思维—每天进步1%。 一年后会比现在的自己优秀38倍。在做任何事情时都要考虑&#xff0c;这件事是否能随着时间不断积累扩大&#xff0c;不能积累价值的事情要及时调整和止损。 在这个过程中&#xff0c;千万不要陷入心理暗示的陷阱&#xff0c;尤其是越想得到的&#xf…

JVM调参实践总结

JVM调优–理论篇从理论层面介绍了如何对JVM调优。这里再写一篇WIKI&#xff0c;尝试记录下JVM参数使用的最佳实践&#xff0c;注意&#xff0c;这里重点介绍HotSpot VM的调参&#xff0c;其他JVM的调参可以类比&#xff0c;但不可照搬。 Java版本选择 基于Java开发应用时&…

政安晨:【Keras机器学习示例演绎】(四十二)—— 使用 KerasNLP 和 tf.distribute 进行数据并行训练

目录 简介 导入 基本批量大小和学习率 计算按比例分配的批量大小和学习率 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在…

Excel日期数字转化成时间格式

1、5位数字转化成yyyy/mm/dd 要考虑闰年的小细节 // 输入数字转成日期&#xff08;5位&#xff0c;excel表格日期&#xff09;&#xff0c;默认转换成YYYY-MM-DD export function numberToDate(number, format) {if (number ! undefined) {let date new Date((number - 1) *…

IDEA中的常见注解

下面是对每个注解的详细解释&#xff1a; Override&#xff1a;这个注解用于标记一个方法覆盖或实现了父类或接口中的方法。如果一个方法标记为Override&#xff0c;但实际上没有覆盖或实现父类或接口中的方法&#xff0c;编译器会报错。 Deprecated&#xff1a;这个注解用于标…

机器学习求数组的迹

机器学习求数组的迹、也叫求矩阵的迹。 矩阵的迹&#xff0c;也称为迹数&#xff0c;是矩阵主对角线上所有元素的和。矩阵的迹具有以下重要性质&#xff1a;- 不变性&#xff1a;矩阵的迹在转置、加法、乘法等运算下保持不变。- 特征值关系&#xff1a;一个方阵的迹等于其所有特…

微服务全局异常处理

1.使用两个注解RestControllerAdvice 和 Excetionhandler(valueExcetption.class) 2.第一个注解RestcontrollerAdvice用于注解类&#xff0c;RestControllerAdvice可以捕获整个应用程序中抛出的异常&#xff0c;并对它们进行处理。这样可以实现在整个应用程序范围内统一处理异…

高标准农田建设项目天空地一体化智慧监管平台

一、建设背景 党中央、国务院高度重视高标准农田建设。国务院办公厅印发的《关于切实加强高标准农田建设提升国家粮食安全保障能力的意见》 明确提出&#xff0c;大力推进高标准农田建设&#xff0c;到2022年&#xff0c;建成10亿亩高标准农田&#xff0c;以此稳定保障1万亿斤以…

《C语言文件处理:从新手到高手的跃迁》

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

寻找最大价值的矿堆 - 矩阵

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、Java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布一些解题思路&#xff0c;希望大家多指教 一、题目描述 给你一个由’0’(空地)、‘1’(银矿)、‘2’(金矿)组成的地图…

Spring Cloud Gateway 全局过滤器

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 全局过滤器作用于所…