ncnn 量化后的模型在推理的时候net.opt.use_packing_layout的开关会导致结果不一致

lp0sw83n  于 2022-10-22  发布在  其他
关注(0)|答案(2)|浏览(287)

使用【ncnn20220729】版本,在linux下量化,linux和windows平台推理均出现以下情况:
模型在量化后net.opt.use_packing_layout默认开启的时候,在量化数据集上结果acc只有0.14的
各种调整数据集以及量化的method后,量化数据集的acc连0.3都达不到。
但是将net.opt.use_packing_layout=False后,acc就正常了。
附件是int8的param,模型的输入是1121123的输入。麻烦up帮忙看一下,谢谢!@nihui
param.zip

bqucvtff

bqucvtff1#

同一个模型,量化前net.opt.use_packing_layout不会改变最终结果,但是量化后net.opt.use_packing_layout=True的结果却会收到印象导致acc很低

a2mppw5e

a2mppw5e2#

debug发现在convolutiondepthwise_x86_fma.cpp里当out_g_elempack<out_elempack
的时候top_blob_unpacked会create。

在下面forward的时候

opt_g.blob_allocator = top_blob.allocator
但是top_blob.allocator已经与top_blob_unpacked.allocator不一致了。
导致forward里top_blob_g会进行create。
然后top_blob_g的地址已经与top_blob_unpacked的不一样了。使得top_blob_unpacked并未进行forward产生了错误的结果。

但是我将 代码改成opt_g.blob_allocator=top_blob_unpacked.allocator后。
net.opt.use_packing_layout=True和False的最终结果还是有差异。
这是net.opt.use_packing_layout=False的结果

然后这是net.opt.use_packing_layout=True的结果

有人能帮帮我吗,谢谢!

相关问题