使用AIMET进行qat量化模型后,其onnx转换为dlc后发现dlc有异常

bhnuihbui 2025-04-21 09:44:42

你好,

由于公司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运行验证

我的编译工具链:

 官方注释说明:

 

 

 

 

 

 

 

...全文
248 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

你好, 感谢你的提问。 我们看正在下载看看这个模型,尝试复现问题。
另外也想了解下模型在没有量化前是可以转换DLC成功吗?

bhnuihbui 04-23
  • 举报
回复
@Ricky技术随想 好的,感谢回复,这边没有使用aimet进行qat量化,其pytorch导出的onnx模型可以转换dlc成功。未使用AIMET进行QAT导出的onnx模型及dlc见网盘:https://pan.baidu.com/s/1LYbjtA38jyBx9VCZW90ctQ?pwd=ihdb,注:此模型可能和上述问题描述时的模型有细微区别,我在导出此模型的时候网络减了两层batchnorm,应该无伤大雅
bhnuihbui 04-23
  • 举报
回复
@Ricky技术随想 但是转换成功后,其部分层invalid tensor data size也会出现

2,849

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧