TensorFlow Lite - 对象检测 API YOLOv3

Posted

技术标签:

【中文标题】TensorFlow Lite - 对象检测 API YOLOv3【英文标题】:TensorFlow Lite - Object Detection API YOLOv3 【发布时间】:2019-11-14 00:20:10 【问题描述】:

我想为 android 实现一个基于 YOLOv3 的 TFLite 分类器。我是 tensorflow lite 对象检测代码的小菜鸟...

我想从Object Detection TFLite 的这个实现开始。我尝试使用 Yolo Classifier 将此代码与其他实现合并,但在使用 lite 版本调整非精简代码时遇到了很多问题。

我的问题是:我可以从 TFLite 示例开始实现基于 Yolov3 的分类器吗? 我认为TFLiteObjectDetectionAPIModel 是我必须修改的类..这是正确的吗?或者这个API可以用来调用我自己写的一个YoloClassifier Implementation?

我想详细了解如何使用 API 来生成和应用我自己的基于 yolo 的分类器。我必须实现一个与 API.java 文件接口的新类 YoloClassifier.java,或者我只能在 API 上工作以适应新的分类器?

在此先感谢大家,我希望我是清楚的:)

【问题讨论】:

【参考方案1】:

很遗憾,您目前无法将 complete YOLOv3 模型转换为 tensorflow lite 模型。这是因为 YOLOv3 通过引入一些额外的层(也称为 YOLOv3 头部)扩展了 YOLO 和 YOLOv2 使用的原始暗网后端,在为 tflite 准备模型时似乎没有正确处理(至少在 keras 中)转换。

您可以在没有模型的“头部”部分的情况下将 YOLOv3 转换为 .tflite(参见此处:https://github.com/benjamintanweihao/YOLOv3),但是您必须在 Java 代码中实现缺失的部分(如此处建议的:https://github.com/wics1224/yolov3-android-tflite)。如果这样做,请确保您有正确的锚框尺寸。第二个链接有望回答您问题的第二部分。

如果您打算让事情变得简单,您的其他选择是为您的应用程序使用 SSD-mobilenet 或 yolov2-tiny。它们将为您提供更实时的体验。

我目前正在从事一个类似的项目,涉及在 Flutter/tflite 中进行对象检测,所以如果我发现任何新内容,我会及时通知您。

编辑:

在https://github.com/benjamintanweihao/YOLOv3 中,您需要更改导入库的方式,因为 lite 库已从 contrib 从 tensorflow 1.14 开始移出。

【讨论】:

【参考方案2】:

尝试https://github.com/zldrobit/onnx_tflite_yolov3,但NMS 不在 TensorFlow 计算图中。你必须在你的 JAVA 代码中实现你自己的NMS。 这个 repo 的另一个问题是它需要 ONNX 和 PyTorch。如果您不熟悉它们,可能会花费您一些时间。

【讨论】:

以上是关于TensorFlow Lite - 对象检测 API YOLOv3的主要内容,如果未能解决你的问题,请参考以下文章

小白学习tensorflow教程四使用 tfhub中的模型EfficientDet-Lite2 进行对象检测

小白学习tensorflow教程四使用 tfhub中的模型EfficientDet-Lite2 进行对象检测

社区说 |今晚直播! 使用 TensorFlow Lite 构建和部署自定义对象检测模型

社区说 |今晚直播! 使用 TensorFlow Lite 构建和部署自定义对象检测模型

社区说 |今晚直播! 使用 TensorFlow Lite 构建和部署自定义对象检测模型

社区说 |今晚直播! 使用 TensorFlow Lite 构建和部署自定义对象检测模型