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

2024-05-15 00:12

本文主要是介绍解决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:# AdaptiveAvgPool2dout_1 = self.global_avgpool(x)# AvgPool2dsize = 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模型文件)

这篇关于解决AdaptiveAvgPool2d部署算子不支持问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990254

相关文章

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at