nncase
nncase copied to clipboard
分别使用nncase1.6和nncase0.2beta4版本编译tflite,在k210上跑通,但是nncase1.6的kmodel比nncase0.2beta4的kmodel慢2倍多
Describe the bug 分别使用nncase1.6和nncase0.2beta4版本编译tflite,在k210上都能跑通, 但是nncase1.6的kmodel耗时约为400ms,而nncase0.2beta4的kmodel大约150ms。
To Reproduce 为什么新版本的模型的运行时间会这么长呢?
Origin model and code 原始tflite模型为MobileFaceNet.tflite
Environment (please complete the following information):
- OS: Ubuntu20.04]
- nncase 1.6/0.2beta4
- DL Framework TensorFlow1.14
Additional context nncase1.6使用的编译转化脚本:tflite2kmodel.py nncase0.2beta使用的编译命令: \ncc.exe compile .\Models\MobileFaceNet.tflite MobileFaceNet.kmodel -i tflite -o kmodel -t k210 --inference-type uint8 --dataset .\datasets\face_recognition_images --input-mean 127.5 --input-std 128 --input-type uint8
同问呀
-
[ ] nncase v1 缺少kpu 调用后的自动transpose
- v0.2的时候并没有对输入layout进行选择, 如果是tflite模型,本身输入为nhwc的话,都会改成nchw的形式.
- 但是v1之后可选input layout会导致添加额外的transpose, 同时这里还不能打开pre process选项,打开之后会添加额外的sub div节点, 实际上应该是把min std参数透传到后面的量化节点. (这个问题比较麻烦, 除非是内部人员, 外部的用户会自然的认为需要加前处理.)
-
[x] nncase V1 pad多出了dequant节点
- v0.2的时候从fake kpu conv2d lower下去的时候就没有显式的dequant + pad, 但是pad 之后还是有quant节点的.
- v1 的时候行为不一致.
解决方案: 1. 因为dequat + pad 的motion没有被其他地方使用过, 所以直接改成老的方式进行匹配, 并且只添加在k210中.
- [ ] nncase V1 没有生产quantize binary
- v0.2 的时候会把左右先进行look up 1d,然后重新quant后进行quant binary
- v1的时候会先dequant到f32, 做完binary之后再quant. 
@wei8171023 1.6版本你跑的是510的么
[ ] nncase v1 缺少kpu 调用后的自动transpose
- v0.2的时候并没有对输入layout进行选择, 如果是tflite模型,本身输入为nhwc的话,都会改成nchw的形式.
- 但是v1之后可选input layout会导致添加额外的transpose, 同时这里还不能打开pre process选项,打开之后会添加额外的sub div节点, 实际上应该是把min std参数透传到后面的量化节点. (这个问题比较麻烦, 除非是内部人员, 外部的用户会自然的认为需要加前处理.)
[ ] nncase V1 pad多出了dequant节点
- v0.2的时候从fake kpu conv2d lower下去的时候就没有显式的dequant + pad, 但是pad 之后还是有quant节点的.
- v1 的时候行为不一致.
解决方案: 1. 因为dequat + pad 的motion没有被其他地方使用过, 所以直接改成老的方式进行匹配, 并且只添加在k210中.
[ ] nncase V1 没有生产quantize binary
- v0.2 的时候会把左右先进行look up 1d,然后重新quant后进行quant binary
- v1的时候会先dequant到f32, 做完binary之后再quant. 
没太明白你说的是什么意思,最终的解决方案是改用nncase0.2老版本吗?
@wei8171023 1.6版本你跑的是510的么
K210