CUSTOM :操作正在处理不受支持的数据类型 EDGETPU

问题描述

我正在尝试为 Coral USB 重新训练自定义对象检测器模型,并按照这些链接中的珊瑚 AI 教程进行操作; https://coral.ai/docs/edgetpu/retrain-detection/#requirements

重新训练 ssd_mobilenet_v2 模型后,使用 edge tpu 编译器转换 edge tpu 模型。 编译结果是这些;

操作员 计数 状态
自定义 1 操作正在处理不受支持的数据类型
添加 10 映射到边缘 TPU
物流 1 映射到边缘 TPU
连接 2 映射到边缘 TPU
重塑 13 映射到边缘 TPU
CONV_2D 55 映射到边缘 TPU
DEPTHWISE_CONV_2D 17 映射到边缘 TPU

并从 netron 可视化;

enter image description here

未映射“自定义”运算符。所有操作都映射并在 tpu 上工作,但“自定义”正在 cpu 上工作。 我在 ssd_mobilenet_v1 中看到了相同的操作员

如何将所有运算符转换为 edgetpu 模型?什么是自定义运算符? (您可以从此处找到支持的运算符 https://coral.ai/docs/edgetpu/models-intro/#supported-operations

解决方法

这是 SSD 型号的正确输出。 TFLite_Detection_PostProcess 是不在 EdgeTPU 上运行的自定义操作。如果您在 https://coral.ai/models/ 的默认 SSD 型号之一上运行 netron,在这种情况下,您会看到 PostProcess 在 CPU 上运行。

就您的模型而言,模型的每个部分都已成功转换。最后一个阶段(获取模型输出并将其转换为各种可用输出)是 TFLite 中的自定义实现,该实现已经针对速度进行了优化,但属于通用计算,而不是 EdgeTPU 加速的 TFLite 操作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...