精度调优|conv+depth2space 替换 resize 指导

1.技术背景

在进行模型压缩与加速的过程中,量化技术成为了提升推理速度和降低计算资源消耗的重要手段。然而,在实际应用中,许多用户发现,采用 resize 操作时,仅能使用 int8 精度量化,这一限制导致了模型精度的显著下降。尽管 int8 精度在提升计算效率方面具有优势,但精度的丧失却使得模型的推理结果偏差增大,给实际应用带来了不少困扰。如何在保证性能的同时,最大程度地减少精度损失,成为了当前技术实现中的一个难题。 在当前工具链版本下(J6 3.0.31),resize 算子仅支持 int8 量化精度,不支持 int16,因此该类算子有一定概率触发精度下降问题。

针对这一问题,本文将介绍一种新的方法,可以有效提升上采样操作中的精度,解决传统 int8 精度量化带来的精度下降问题。通过巧妙地优化模型结构,能够在不显著影响计算效率的前提下,显著提高上采样的精度。 本文介绍的这种解决方案,在不影响模型权重(无需重训)的情况下,通过算子替换,使得上采样功能支持 int16 量化精度,以解决精度下降问题。 相信这一方案将为广大开发者带来帮助~

2.方案介绍

onnx 中的 resize 算子,在 pytorch 代码中常表现为 F.interpolate 函数。当 F.interpolate 的 mode 为 nearest 时,该函数的功能和 conv+depth2space 完全等效。而 conv 和 depth2space 均支持 int16 量化,因此可以通过算子替换的方式变相实现上采样的 int16 支持。

import torch
import torch.nn as nn
import torch.nn.functional as F
class Conv2DInterpolate(nn.Module):
    def 
__init__
(self, inputs_channel=1, scale_factor=2) -> None:
        super().
__init__
()
        self.co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值