本仓库中使用的是 NXP 在 ptq 之后发布的 Google FaceMesh 模型:
nxp-demo-experience-demos-list/downloads.json 位于 lf-6.12.3_1.0.0 · nxp-imx-support/nxp-demo-experien...
但该模型基于谷歌旧的 FaceMesh 模型,该模型有 468 个地标点。
现在我们想升级到谷歌新的 FaceMesh 模型,它有 478 个地标点。我们希望在 iMX 95 FRDM 板 NPU 上运行此程序。所以,我们想把它量化。我们使用的是NXP的eIQ-neutron-sdk-linux-3.1.3量化该模型。
经过量化之后,我们发现模型性能显著下降,几乎无法实际使用。
最初我们使用 MIN-MAX 选项对其进行量化。那个模型根本没法用。然后我们尝试使用百分位数选项,发现将百分位数设置为 95 时性能更好(即使这是回归器的输出)。
但这仍然无法带来理想的性能。
1)NXP为旧版FaceMesh(468)模型创建ptq文件时,使用了MIN-MAX选项吗?或者百分位数?
2)量化后性能急剧下降时,我们还需要检查其他方面吗?
3) 我们使用 CelebA 数据集进行性能分析,在 scripts 目录中使用 serialize_image.py 脚本并设置了模型特定选项。我们应该运行完整的媒体管道并创建校准数据集,还是应该修改 serialize 脚本?
提供的选项
serialize_image.py :
-i //218 x 178 正面 RGB 图像
-o
-f bin
-t float32
-m 0到1
-s 256,256
-布局 NHWC
-co RGB
tflite-profiler:
--input
--dataset
--输出
tflite-quantizer:
--input
--profile
--quantize-inputs=false
--quantize-outputs=false
--quantization-calibration-method= //最小值、最大值或百分位数
嗨@dhilshad ,
感谢您联系恩智浦技术支持!
1)很遗憾,我们目前没有相关信息。
2)这种行为是预期的。量化只是部署过程的一部分;将模型转换为嵌入式硬件上执行并进行优化还涉及几个额外的步骤,例如图优化、运算符映射、硬件特定的转换和运行时验证。因此,即使模型已经量化,模型的行为和性能也可能发生变化。
对于新的设计和评估,我建议使用 eIQ Olive,因为它为 NXP i.MX 平台上的模型优化和部署提供了一个更现代化的框架。它包括更新的工作流程和对当前机器学习部署场景的改进支持。
更多信息请参考以下教程和文档:
https://eiq.nxp.com/learning-hub/tools/olive/index.html
这些资源涵盖了在 i.MX 设备上部署机器学习模型的推荐工作流程和最佳实践。
此致,
查维拉