使用【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
2条答案
按热度按时间bqucvtff1#
同一个模型,量化前net.opt.use_packing_layout不会改变最终结果,但是量化后net.opt.use_packing_layout=True的结果却会收到印象导致acc很低
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的结果
有人能帮帮我吗,谢谢!