2,849
社区成员




你好,
由于公司ocr产品需求,普通的一个ptq量化模型无法满足多个场景的检测需求。因此准备尝试使用aimet的QAT进行微调。目前正在按照https://github.com/quic/aimet/blob/develop/Examples/torch/quantization/quantization_aware_training.py#L177的QAT流程,尝试微调一个经典的densenet+crnn的ocr识别模型,并在设备端进行测试,验证其可行性。以下所属流程的相关文件见网盘:https://pan.baidu.com/s/1nlPp5MCVHKCjS6o6cqDg5Q?pwd=wiw3
AIMET-pytorch:2.2.0
pytorch:2.1.2
onnx:1.16.1
SNPE or QNN:2.26
设备型号:qcs6490
aimet端:已成功按照https://github.com/quic/aimet/blob/develop/Examples/torch/quantization/quantization_aware_training.py#L177示例完成微调,代码并未有根本性改动,仅修改了相关网络,微调数据集及迭代时的优化器。eval下的pth模型验证显示正常,train下的pth模型验证显示异常,导出的onnx模型验证数据显示正常。导出onnx后,同时生成了两个encoding文件。
qairt转换dlc,按照aimet官方示例On-target inference - AIMET进行转换:
模型转换后,使用netron查看dlc文件发现有部分层权重如下图所示
经此模型使用snpe-net-run验证发现所有输出特征均错。
然后继续按照On-target inference - AIMET使用此dlc模型进行量化:
模型量化后,使用netron查看dlc文件发现部分层权重依然异常如下图所示:
另外,由于发现量化后绝大部分权重为float32,因此按照下图再次量化一遍,发现同样的地方还是异常:
经此模型使用snpe-net-run验证发现所有输出特征依然均为错。
不知是哪步出现了问题,或是那配置错误了。请帮忙具体看下,感谢!!
另外经qnn文档所注释说明QNN运行dlc仅支持aarch-android和linuxx86,我的编译工具链不支持,因此目前没有尝试qnn-net-run运行验证
我的编译工具链:
官方注释说明:
你好, 感谢你的提问。 我们看正在下载看看这个模型,尝试复现问题。
另外也想了解下模型在没有量化前是可以转换DLC成功吗?