嗨,我转换了一个“resnet-like”.tflite模型(由int 8量化),发现与cpu相比,它在六边形上有一定的精度损失,然后我打印了输出概率,它们确实不同。
我曾经发现了你们提供的“inference_diff”工具(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/tools/evaluation/tasks/inference_diff),现在用它进行测试,结果如下:
./run_eval --model_file=resnet_quantized.tflite --delegate=hexagon
INFO: Initialized TensorFlow Lite runtime.
loaded libcdsprpc.so
Hexagon delegate created.
INFO: TfLiteHexagonDelegate delegate: 34 nodes delegated out of 36 nodes with 1 partitions.
VERBOSE: Replacing 34 node(s) with delegate (TfLiteHexagonDelegate) node, yielding 3 partitions.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
native : lite/tools/evaluation/stages/inference_profiler_stage.cc:78 Test interpreter has been initialized.
native : lite/tools/evaluation/stages/tflite_inference_stage.cc:146
native : lite/tools/evaluation/stages/inference_profiler_stage.cc:92 Reference interpreter (1 thread on CPU) has been initialized.
Num evaluation runs: 50
Reference run latency: avg=240374(us), std_dev=142248(us)
Test run latency: avg=19779(us), std_dev=5008(us)
OutputDiff[0]: avg_error=0.000274915, std_dev=4.89316e-05
看起来差别不大,但一般来说,量化模型的输出概率大多为0,所以这可能没有多大意义。然后我删除模型末尾的softmax操作,并重试:
./run_eval --model_file=resnet_quantized_without_softmax.tflite --delegate=hexagon
INFO: Initialized TensorFlow Lite runtime.
loaded libcdsprpc.so
Hexagon delegate created.
INFO: TfLiteHexagonDelegate delegate: 33 nodes delegated out of 35 nodes with 1 partitions.
VERBOSE: Replacing 33 node(s) with delegate (TfLiteHexagonDelegate) node, yielding 3 partitions.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
native : lite/tools/evaluation/stages/inference_profiler_stage.cc:78 Test interpreter has been initialized.
native : lite/tools/evaluation/stages/tflite_inference_stage.cc:146
native : lite/tools/evaluation/stages/inference_profiler_stage.cc:92 Reference interpreter (1 thread on CPU) has been initialized.
Num evaluation runs: 50
Reference run latency: avg=234793(us), std_dev=146766(us)
Test run latency: avg=19949.9(us), std_dev=5333(us)
OutputDiff[0]: avg_error=2.66955, std_dev=0.73623
现在差别更大了,我想知道这些是否正常,模型的准确度损失大概在什么水平,我上传了这两个模型,分别命名为resnet_quantized. tflite. tar. gz和resnet_quantized_without_softmax. tflite。
谢谢你
resnet_quantized.tflite.tar.gz
resnet_quantized_without_softmax.tflite.tar.gz
4条答案
按热度按时间dy1byipe1#
你好@GinHIT!
与resnet_quantized_without_softmax. tflite相比,resnet_quantized lite模型预计具有更快的推理时间/更低的延迟。您是说这两种模型分别会导致CPU和DSP六边形代理的不同行为吗?
您能否提供CPU和DSP GPU代表的两种型号的性能指标评测结果。附上相关的thread供参考。
谢谢你,谢谢你
hec6srdp2#
您好,@GinHIT!与resnet_quantized_without_softmax. tflite相比,resnet_quantized lite模型预计具有更快的推理时间/更低的延迟。您是说这两种模型会分别导致CPU和DSP六边形代理的不同行为吗?
您能否提供CPU和DSP GPU代表的两种型号的性能指标评测结果。附上相关的thread供参考。
谢谢你,谢谢你
非常感谢您发送编修。
实际上resnet_quantized_without_softmax.tflite比resnet_quantized.tflite快,但这不是我关心的,我按照你的建议编译了“benchmark_model”,然后在hexagon上测试,打印出来的结果好像是模型在推理过程中每一个op的耗时,而我困惑的是模型输出值的差异。
再次感谢!
7lrncoxx3#
@萨钦帕萨!
请你看看这个问题。
谢谢你,谢谢你
xxslljrj4#
在我们的例子中,一些构建块,例如残差类转换构建块,可能导致TFLite中的独立ReLU运算符。
当这类运算符出现在图中时,在CPU和Hexagon上的结果通常是不同的。
您也可以 checkout #54481。