×

签到

分享到微信

打开微信,使用扫一扫进入页面后,点击右上角菜单,

点击“发送给朋友”或“分享到朋友圈”完成分享

YOLO v7移植,量化屡次失败 已完结 terryuv2023-03-28 15:37:15 回复 3 查看 使用求助 社区交流
YOLO v7移植,量化屡次失败
分享到:

【硬件设备】:MLU270

【环境】:Ubuntu


量化代码,配在附件里,py文件不允许,故cv后改成了txt版本)

mlu_quant.txt



你好,我参考官方论坛上的教程进行【Pytorch Yolov7】Yolov7模型寒武纪200移植分享(下篇) - 寒武纪软件开发平台 - 开发者论坛 (cambricon.com)

模型训练的是自己的数据集,推理正常,在cpu上unzip后推理也正常,

甚至在量化一步中,先get_model()加载好state_dict,然后运用(1)

 quantized_net = mlu_quantize.quantize_dynamic_mlu(model,qconfig_spec=qconfig, dtype='int8', gen_quant=True).float().eval()

运用该quantized_net推理,结果也是正常的。


但是一旦用torch.save成pth文件之后,再运用(2)

 torch_mlu.core.mlu_quantize.quantize_dynamic_mlu(model)

进行加载pth,推理能正常运行,(但我甚至还没进行解码的后处理,先将结果打印+NMS后,与cpu跑unzip/ 量化时做的推理结果进行比对):

但是推理结果完全不对,不说测试集,甚至采用训练集的图片进行测试,只有6个物体的图片,能检测出了20+个框,而且每个框参数中心全都是0.几大小,甚至还有负值,挤在左上角,结果不对。(但是cpu跑unzip、量化时先推理再保存时候的推理结果都是正确的)


于是我怀疑torch.save时并未保存下来正确的参数,尝试跳过不保存,而是直接用(1)中的quantized_net进行MLU逐层,但报错如下:

rterror.png报的是替换成MLUConv2D的算子没有收到正确的输入,而且我通过打log确认,这出错出现在网络的第一层。。。。。。


没有办法,我只能沿用教程+手册里推荐的先save再load的方法,并尝试通过print模型+torchinfo查看模型结构,以及使用模拟MLU量化推理工具进行hook定位,但结果也并不如人意。相关的log我会稍后放在二楼进行详细描述。


想请问是我的量化过程出现问题了吗?还是说我总的长串流程里出现了什么问题呢?如何才能load正确的量化模型+逐层成功呢?

为了方便locate问题,有点啰嗦的把整个流程都描述了一遍,希望能有帮助,望不吝赐教!

===========================================

FYI,有额外值得注意的一些点:

  1. v7的最新版本里,最后一层的检测层用的是IDetect,而非教程里的Detect,这点是否会影响?

  2. IDetect层中的,Forward并没有修改,并没有采用v5_detect_output算子,但这点不应该在量化+逐层中导致如此大的偏差。

  3. 在量化+保存模型的过程中,我尝试了两种方法:

    1. 不喂输入直接load+save;

    2. 喂单张/多张图片,load+推理+save,结果只有此种方法能检出,a的方法NMS后一个框都没剩下(和喂的图片张数有关系吗)?

  4. load的时候,strict= Ture/False都尝试了,并无过多的不同?

版权所有 © 2024 寒武纪 Cambricon.com 备案/许可证号:京ICP备17003415号-1
关闭