如何将 flex ops 包含到微控制器解释器的 tensorflow lite 中?

How to include flex ops to the tensorflow lite for microcontrollers interpreter?

下午好,

我正在尝试使用用于微控制器的 tensorflow lite (TFLM) 在 DE10-nano 板(2xCortex-A9、armv7-a)上实现变压器网络。

我使用 python 训练网络并将其转换为 .tflite 格式。这样做时,我收到警告:

"TFLite interpreter needs to link Flex delegate in order to run the model since it contains the following Select TFop(s):
Flex ops: FlexEinsum"

当我使用 AllOpsResolver 在开发板上部署模型时,出现错误:

Failed to get registration from op code CUSTOM

当我检查我的网络使用的操作时,flexEinsum 确实在列表中:

=== TFLite ModelAnalyzer ===
Subgraph#0 main(T#0, T#1) -> [T#79]
  Op#0 CAST(T#1) -> [T#21]
  Op#1 GATHER(T#9, T#21) -> [T#22]
  Op#2 MUL(T#22, T#18) -> [T#23]
  Op#3 FlexEinsum(T#23, T#5) -> [T#24]
  Op#4 ADD(T#24, T#3) -> [T#25]
  Op#5 FlexEinsum(T#23, T#4) -> [T#26]
  Op#6 ADD(T#26, T#3) -> [T#27]
  Op#7 MUL(T#27, T#11) -> [T#28]
  Op#8 FlexEinsum(T#25, T#28) -> [T#29]
  Op#9 SOFTMAX(T#29) -> [T#30]
  Op#10 FlexEinsum(T#23, T#2) -> [T#31]
  Op#11 ADD(T#31, T#3) -> [T#32]
  Op#12 FlexEinsum(T#30, T#32) -> [T#33]
  Op#13 FlexEinsum(T#33, T#6) -> [T#34]
  Op#14 ADD(T#34, T#7) -> [T#35]
...

**据我了解,TFLM 尚不支持某些操作,我需要直接使用 TF 中实现的 einsum。我的问题是:我该怎么做? **从转换模型时tensorflow发送的错误来看,我需要'link the flex delegate'但我不明白这是什么意思...

为了提供更多背景信息,我在 DS-5 上使用 Altera 裸机 GCC 工具链在电路板上进行编译和部署。为了在我的项目中包含 TFLM,我生成了 'hello world' 项目,然后将生成的 'tensorflow' 和 'third_party' 文件夹用作我项目中的库 在 flex ops 出现之前,这非常有效...

有人对此问题有解决方案或想法吗?

祝你有美好的一天!

Flex 委托在 TFLM 中不可用:https://groups.google.com/a/tensorflow.org/g/micro/c/b4v-84f8J5Q。要做的就是修改网络以避免使用它。

此外,有些操作在 TFLM 和 TFLite 之间不兼容,如果您遇到这种情况,请遵循本指南:https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/docs/porting_reference_ops.md