问题描述
我正在尝试为 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 可视化;
未映射“自定义”运算符。所有操作都映射并在 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 操作。