首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >量化模型给出了负精度后,从火火炬到ONNX。

量化模型给出了负精度后,从火火炬到ONNX。
EN

Stack Overflow用户
提问于 2022-03-05 13:50:05
回答 1查看 614关注 0票数 0

我试图训练一个量化模型,并将其转化为ONNX。我在pytorch_quantization软件包的帮助下使用了量化感知训练技术.我使用以下代码将我的模型转换为ONNX:

代码语言:javascript
复制
from pytorch_quantization import nn as quant_nn
from pytorch_quantization import calib
from pytorch_quantization.tensor_quant import QuantDescriptor
from pytorch_quantization import quant_modules
import onnxruntime 
import torch
import torch.utils.data
from torch import nn
import torchvision

def export_onnx(model, onnx_filename, batch_onnx, per_channel_quantization):
    model.eval()
    quant_nn.TensorQuantizer.use_fb_fake_quant = True # We have to shift to pytorch's fake quant ops before exporting the model to ONNX

    if per_channel_quantization:
        opset_version = 13
    else:
        opset_version = 12

    # Export ONNX for multiple batch sizes
    print("Creating ONNX file: " + onnx_filename)
    dummy_input = torch.randn(batch_onnx, 3, 224, 224, device='cuda') #TODO: switch input dims by model
    input_names = ['input']
    output_names = ['Linear[fc]']  ### ResNet34
    dynamic_axes = {'input': {0: 'batch_size'}}

    try:
        torch.onnx.export(model, dummy_input, onnx_filename, input_names=input_names,
                          export_params=True, output_names=output_names, opset_version=opset_version,
                          verbose=True, enable_onnx_checker=False, do_constant_folding=True)

    except ValueError:
        warnings.warn(UserWarning("Per-channel quantization is not yet supported in Pytorch/ONNX RT (requires ONNX opset 13)"))
        print("Failed to export to ONNX")
        return False
    return True

转换后,我会收到以下警告:

warnings.warn(“enable_onnx_checker”被弃用和忽略),它将在“W0305 12:39:40.472136 140018114328384 tensor_quantizer.py:280]中删除,使用Pytorch的本机实验假量化。/usr/local/lib/python3.8/dist-packages/pytorch_quantization/nn/modules/tensor_quantizer.py:285: TracerWarning:将张量转换为Python数字可能会导致跟踪不正确。我们无法记录Python值的数据流,因此这个值在将来将被视为常量。这意味着跟踪可能不会泛化到其他输入!

而且,对于ONNX模型,该精度是无效的!

代码语言:javascript
复制
Accuracy summary:
+-----------+-------+
| Stage     |  Top1 |
+-----------+-------+
| Finetuned | 38.03 |
| ONNX      | -1.00 |
+-----------+-------+

更多信息在这里:

代码语言:javascript
复制
pytorch 1.10.2+cu102
torchvision 0.11.3+cu102 
TensorRT  8.2.3-1+cuda11.4
ONNX 1.11.0
ONNX Runtime 1.10.0
cuda 11.6
python 3.8

ONNX转换有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-06 07:24:25

经过几次尝试,我发现存在版本冲突。我相应地修改了版本:

代码语言:javascript
复制
onnx == 1.9.0
onnxruntime == 1.8.1
pytorch == 1.9.0+cu111
torchvision == 0.10.0+cu111
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71362729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档