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

最低0.47元/天 解锁文章
1831

被折叠的 条评论
为什么被折叠?



