ncnn icon indicating copy to clipboard operation
ncnn copied to clipboard

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

Open w8501 opened this issue 3 years ago • 2 comments

使用【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

w8501 avatar Aug 18 '22 03:08 w8501

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

w8501 avatar Aug 24 '22 09:08 w8501

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

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的结果 image 然后这是net.opt.use_packing_layout=True的结果 image

有人能帮帮我吗,谢谢!

w8501 avatar Aug 25 '22 05:08 w8501

windows上net.opt.use_packing_layout=True的时候ncnn使用sse近似求导,导致累计误差。

w8501 avatar Dec 07 '22 05:12 w8501