【问题标题】:TFLite model accuracy worse on AndroidAndroid 上的 TFLite 模型精度更差
【发布时间】:2021-11-25 04:35:46
【问题描述】:

我有一个自定义语音识别模型,它转换为 TFLite,在 PC 上的 python 中表现出色。在 Android 上使用相同的 TFLite 模型运行推理时,准确性会下降。所有处理都发生在 TFLite 模型层(特征提取等)中,因此 Android 中没有代码可以产生影响。在 python 和 Android 中,模型的输入是波形,输出是 logits。我已经仔细检查过,Android 上的麦克风输入质量很好,但模型的性能比 PC 上的差很多。

我的模型中有批量标准化层,我怀疑它们可能是问题所在。我不确定为什么Android和python之间会出现不一致。有没有其他人遇到过这个问题?

我排除的事情:

  1. 麦克风 - 我在 Android 和 PC 上使用相同的 BT 耳机
  2. 模型架构 - 我尝试了两种不同的模型架构(DeepSpeech 和 Jasper),结果都相同 Android 上的准确性下降,但它们在 PC 上运行完美
  3. 量化 - 我的模型已量化,但效果很好,在 PC 上没有精度损失

【问题讨论】:

  • 相反...对于在python或android中使用的特定音频文件,输出完全相同。所以基本上在两个实现中都使用特定的音频文件,并尝试调试错误在哪里。

标签: python android speech-recognition tensorflow2.0 tensorflow-lite


【解决方案1】:

如果没有进一步调查,我无法给出任何硬性和快速的答案,但是 想到的几个可能的原因:

量化: 如果您要比较转换为 TFLite 之前和之后的网络性能,那么根据您的量化设置,性能会有所下降。但是,如果您也从 python 运行 TFLite 解释器,那不应该是原因。 (reference for Quantisation)

领域转移: 仅仅因为两个麦克风质量都很好并不意味着它们的输出是相同的。压缩、噪声分布等都可能不同。这意味着您的输入数据可能来自稍微不同的域,这会降低性能。 要对此进行测试,请尝试保存记录(从任一设备)并将其输入到输入中。输出应该是相同的,如果不是你有一些其他的错误。 要解决此问题,请在训练网络时使用手机中的录音作为验证数据(并使用手机中的一些录音进行训练),并使用手机中的录音作为与 python 的比较点。

性能问题: 如果在设备上运行网络导致速度变慢,您可以更改有效采样率,即使麦克风相同。如果您已经修复了域转移错误,那么这是我最后的猜测。它再次有效地导致域转移,但更难补偿。有了这个,最好优化你的代码,这样它就不会导致速度变慢,或者如果你的实现允许,记录样本并“离线”运行推理,而不是与数据收集并行。

数据处理错误: 如果您从麦克风到网络的管道不同(这似乎可能是在 android 上而不是在 PC 上的 python),那么数据如何到达网络可能存在错误,无论是丢失数据包还是其他东西这可能会导致规范化问题。

【讨论】:

  • 我确实量化了我的模型,但它在 python 中完美运行。我的数据集由 12 个不同的扬声器组成,记录在 12 个不同的麦克风上。我在 android 上使用的麦克风是 BT 耳机,当我将同一个耳机连接到我的 PC 时,模型效果很好。我还尝试了不同的模型架构(DeepSpeech 和 Jasper),它们在 Android 上都有相同的问题,所以我想这也与模型无关。 Android准确度和python之间最明显的区别在于“二”、“三”、“五”之类的短词。像“一二三五”这样的较长序列的工作原理与在 python 中一样好。
  • @TomislavMedved 在我看来,这听起来像是你可能会剪裁你输入的数据略短(可能在开始或结束时缺少一两个条目)。您可以尝试将每个输入记录到您的网络,然后查看整个消息是否通过。
  • 也不是这样。我已将输入保存到设备存储并在音频编辑器中检查它们。没有任何剪辑,水平很好。我认为这可能与归一化(批量归一化层或特征归一化)有关。除了批量归一化层外,我还使用它们各自的均值和标准值对输入进行归一化,这在 PC 上运行良好,但在 Android 上也没有
  • 您可能希望更改您的程序以提供 wav 文件输入并将输出与 PC 版本和 Android 版本进行比较。如果它们不同,您可以使用 Interpreter::PreserveAllTensorsExperimental() 来比较中间张量。 github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/…
  • @Stephen 不是这样,整个话语都进入了,我仔细检查了。
猜你喜欢
  • 2018-10-01
  • 2022-01-06
  • 2019-03-18
  • 2020-09-15
  • 1970-01-01
  • 2018-01-06
  • 2021-08-03
  • 2018-11-29
  • 1970-01-01
相关资源
最近更新 更多