量化后的模型在推理的时候net.opt.use_packing_layout的开关会导致结果不一致
使用【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
同一个模型,量化前net.opt.use_packing_layout不会改变最终结果,但是量化后net.opt.use_packing_layout=True的结果却会收到印象导致acc很低
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的结果

有人能帮帮我吗,谢谢!
windows上net.opt.use_packing_layout=True的时候ncnn使用sse近似求导,导致累计误差。