解决AdaptiveAvgPool2d部署算子不支持问题

一、Pytorch中AdaptiveAvgPool2d函数详解

torch.nn.AdaptiveAvgPool2d()接受两个参数,分别为输出特征图的长和宽,其通道数前后不发生变化。如以下:

self.global_avgpool = nn.AdaptiveAvgPool2d(1)     # 输出N*C*1*1
self.global_avgpool = nn.AdaptiveAvgPool2d((5,5)) # 输出N*C*5*5

参考:

官方AdaptiveAvgPool2d介绍

官方AvgPool2d介绍

自适应平均池化是一种池化方法,可以在不同大小的输入中自适应地对每个位置进行平均池化。不需要指定池化核的大小,而是通过输出的大小来决定池化的大小和步幅。实际上AdaptiveAvgPool2d就是AvgPool2d,但是相比之下AdaptiveAvgPool2d指定输出大小可以固定输出大小,在一些模型输入不固定大小的场景下确保了输出的大小(kernel变化),而AvgPool2d会由于输入的大小而导致输出不定(kernel固定)。

self.global_avgpool = nn.AvgPool2d(kernel_size, stride)

二、如何用AvgPool2d替换AdaptiveAvgPool2d

个人测试ncnn和Ascend端侧是不支持AdaptiveAvgPool2d算子的,这个时候如果直接转换是不行的,而根据上述,完全可以考虑把模型中的AdaptiveAvgPool2d更改为AvgPool2d,不过这时候需要根据输入计算一下kernel大小,stride默认是等于kernel。

    def __init__(self, channels: int, init_cfg: OptMultiConfig = None) -> None:
        super().__init__(init_cfg=init_cfg)
        self.global_avgpool = nn.AdaptiveAvgPool2d(1)
       
    def forward(self, x: Tensor) -> Tensor:
        # AdaptiveAvgPool2d
        out_1 = self.global_avgpool(x)
        
        # AvgPool2d
        size = x.shape[2:]
        k = [int(size[i]) for i in range(0, len(size))]
        out_2 = F.avg_pool2d(
            x,
            kernel_size=k,
        )

       return out_1, out_2

如我这里希望输出是(1,1)的大小,那么kernel就是input_size/output_size=input_size,即输入的大小,这样就可以完成等价替换了。通过netorn可以查看,且经过测试可以通过ncnn和Ascend端侧的模型转换(即转为.param&.bin或者.om模型文件)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AcWing166. 数独-DFS剪枝与优化

题目 思路 思考问题:搜索顺序->考虑剪枝搜索顺序:先随意选择一个空格子,枚举该格子可填写的数字,当所有格子都填完的时候,说明可以退出了剪枝: 优化搜索顺序:随意选择一个空格子&#xff1a…

【讲解下iCloud如何高效利用】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

C++实战演练---负载均衡在线oj项目 || 编译服务模块设计

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 前言 上一篇预热文章简单说过我们的编写思路,首先要实现的是编译功能,那么在编译功能版块中&…

Java面试八股之float和double的区别

Java中float和double的区别 存储空间与精度: double:占据64位(8字节)存储空间,属于双精度浮点数。它可以提供较高的精度,通常能够精确表示大约15到17位十进制数字,适合用于需要较高精度计算或…

SSM【Spring SpringMVC Mybatis】—— Spring(二)

如果对于Spring的一些基础理论感兴趣可见👇 SSM【Spring SpringMVC Mybatis】—— Spring(一) 目录 1、Spring中bean的作用域 1.1 语法 1.2 四个作用域 2、Spring中bean的生命周期 2.1 bean的生命周期 2.2 bean的后置处理器 2.3 添加后…

upload-labs靶场通关详解(1-15)

1.pass-01 查看源代码 是js,属于前端校验 可以通过禁用js来上传文件 2.pass-02 根据提示是MIME绕过 MIME:是设定某种扩展名的文件 用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来…

OpenAI发布新品GPT-4o,电影《HER》演绎的世界真的来了!

5月14日,OpenAI宣布推出最新旗舰生成式AI模型GPT-4o,它可以实时处理音频、视觉、并对文本进行推理。可以说这是一种全新的交互模式,它完美复刻电影《Her》的世界,标志着人工智能全感知时代的到来。 GpuMall智算云 | 省钱、好用、…

swiper 点击事件失效问题

在刚开始使用是 swiper 时,点击事件有时失效,这些个问题的原因是:swiper设置looptrue时,会生成虚拟slide进行填充,对这些虚拟slide元素进行操作是无效的。 简单粗暴的方法就是将 loop 置为 false ....................…

JVM面试题:85道JVM虚拟机面试题及答案

面试题 1 .简述Java堆的结构?什么是堆中的永久代(Perm Gen space)? JVM整体结构及内存模型 试题回答参考思路: 1、堆结构 JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自…

开发测试必须知道的 10种 常见软件架构模式

你是否想知道企业大规模系统是如何设计的? 在软件开发开始之前,我们必须选择一个合适的架构,能提供所需的功能和质量特性。因此,在将架构应用到我们的设计之前,我们应该了解各种不同架构的特点。 01 什么是架构模式 根据维基百…

一文分享:抖音外卖城市合伙人如何申请合作?

在当今数字化时代,外卖和团购业务蓬勃发展,商家们纷纷寻求在多个平台上拓宽销售渠道,以获取更多的订单和利润,这也给创业者提供创来机会。在这其中,抖音外卖作为一股新势力,自然吸引了众多创业者的目光&…

解锁客户需求密码:银行业数据分析在业务决策中的关键作用

一、引言 在数字化和大数据时代的浪潮下,银行业正经历着前所未有的变革。作为数据分析领域的资深专家,我深知数据分析在银行业务发展中的重要性和价值。本文将从银行业数据分析的角度出发,深入探讨相关业务场景下的数据分析应用,…

斥巨资!韩国力撑芯片产业

KlipC报道:韩国为加强本国半导体产业竞争力,将推进一项超过10万亿韩元的支持计划。 大型科技公司微软、亚马逊和谷歌为了保持自己大型语言模型的竞争力,投入了大量的资金,全球对可生成AI应用的需求在不断增长,市场上对…

Vision Mamba 代码调试---Pycharm+AutoDL

《AutoDL使用手册》 1. 服务器租用与配置 先上项目链接: GitHub - hustvl/Vim: Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 1.1 服务器租用与配置 根据环境要求,去租一个服务器:AutoDL算…

Ajax 学习

文章目录 1. 前置知识1.1 ajax 介绍1.2 XML 简介 2. AJAX 学习2.1 AJAX基础学习(1)AJAX的特点(2)AJAX 初体验(3)服务端响应json 数据 2.2 IE 缓存问题2.3 请求超时和网络异常2.4 手动取消请求2.5 重复请求2…

鸿蒙 DevEcoStudio:用户名密码获取保存

【使用首选项实现用户名密码保存获取】 打开src/main/ets/entryability路径下的EntryAbility.ts文件 在 export default class EntryAbility extends UIAbility {onCreate(want, launchParam) {hilog.info(0x0000, testTag, %{public}s, Ability onCreate);下边添加内容&…

【JVM】调优工具

这里简单介绍一下各种调优用到的工具 一,环境准备 首先我们需要准备好Java环境,和win上的jdk环境(图形化界面如jconsole只有jdk中有)。 有这样一个类Prolem,每个线程都会带来100个垃圾对象,线程new完100…

智慧公厕,提升公共厕所管理效率的信息化变革

现代社会中,公共厕所的管理成为一个不可忽视的问题。随着城市化进程的加快,人们对公厕的需求日益增加,但公厕的管理却面临诸多困难。为了解决这一问题,智慧公厕应运而生,通过信息化的变革,提高公厕的管理效…

QT函数整理

目录 1. 适应高分辨率函数 1. 适应高分辨率函数 自动适应调整设备安装QT的UI分辨率: QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 加载位置:

第四届辽宁省大学生程序设计竞赛

比赛经历:2024.5.14简单vp了一个小时只写出了签到题4个然后跑路了 补题:感觉其他题有点太抽象了主要补了一题,在区间问题中数据结构的使用 比赛链接[点我即可] 目录 A.欢迎来到辽宁省赛 B.胜率 F.隔板与水槽 H.取石子 L.区间与绝对值 …