1. 磐创AI首页
  2. Medium

基于TF lite模型生成器的边缘目标检测


有时你需要一个快速的解决方案。它可能是针对原型的,也可能是针对非关键任务的。您需要一个快速但仍然准确的解决方案。像YoloV5或Detectron2这样的框架是很好的选择,但它们需要一些努力来设置它们,而且在™上部署它们的模型通常不那么容易。

幸运的是,TensorFlow团队得到了我们的支持,他们创建了一个非常棒的新工具,对象检测模型生成器API。

TensorFlow Lite造型机

目前支持6个任务:图像分类、目标检测、文本分类、BERT问答、音频分类和推荐系统。

尽管它目前支持的预先训练的模型有限,但它是非常有用的,您应该可以预期它在接下来的几个月里会变得更大。

您可以在此链接中找到文档。link

现在让-Euro™s开始建造吧!

我们将使用Model Maker对象检测API来构建一个可以区分杂草和西兰花的网络。关于型号,我们目前仅限于EfientDetLite系列(0到4)。

首先,我们需要带注释的数据

用于对象检测的Model-Maker API提供了两种加载数据的方法。您可以使用from_csv方法或from_pascal_voc加载数据。对于这个场景,我将使用from_pascal_voc方法,因为我用PascalVOC格式注释了我的数据(有关VOC的更多信息,请查看本文)from_csv from_pascal_voc article

为了注释您的数据集,我建议使用Roboflow或LabelImg。我还测试了CVAT和MakeSense.ai,但工具生成的PascalVOC批注与API期望的批注之间似乎有一些不兼容。这会导致数据加载过程中出现错误。

注意:对Pascal VOC注释使用CVAT可能会导致KeyError:‘pose’。我发现这是因为属性没有插入到XML注释中。使用MakeSense.aiâeuro™的批注会产生错误,因为它们的属性的默认值<˜>。API预期为0,而MakeSense使用?EURO™未指定的?EURO™。

完成批注过程后,您应该有一个包含所有图像以及XML批注文件的文件夹,数据集中的每个图像对应一个XML。我建议您事先将带注释的数据集拆分成Train-Val拆分。

编码时间

我最喜欢的部分来了。但是,您可能需要先安装2个软件包。我强烈建议您创建一个CONDA环境来运行您的项目。现在,尝试以下两个pip命令:

!pip install  tflite-model-maker
!pip install pycocotools

注意:pip install tflite-model-aker可能会进入递归模式,以确定哪个版本与其他要求兼容。这可能会导致安装时间过长或无法完成。我设法解决了这个问题,方法是安装每晚版本的pip install tflite-model-aker-nightly。Google CoLab是另一个避免错误的好选择。

一旦您成功安装了这两个包,我们就可以开始编写代码了。

1.导入所需的库

import numpy as np
import os

2.加载数据集

在上面的代码中,只需确保在LABEL_MAP中,第一个类以数字1开头,因为0是后台类的保留键。

注意:有一个名为Split的方法。假设您可以使用DataLoader加载整个DataSet,然后对返回的对象使用.Split()方法将其拆分成训练集和验证集。但是,尽管此方法出现在文档中,但它尚未实现。

3.创建并训练目标检测模型。

Model-Maker对象检测API提供了EfficientDet系列,范围从EfficientDet 0到4,0是最小的,4是最大的。我们指定要与以下代码行(Doc)一起使用的模型。(doc)

由于手头的问题很简单,而且我没有很多数据,所以我将使用较小的网络,以避免过大的问题。

# model specification
spec = model_spec.get("efficientdet_lite1")

让我们检查一下输出的一小部分。奇怪的是,评价结果并不总是在5个时代之后出现。该评估针对不同的IOU和类别打印最重要的对象检测指标,如AP和AR。

使用valuate()方法在我们的测试数据集上评估我们的模型也很有趣。如果您有足够的数据,请将您的数据集拆分到Train-Val-TEST子集中,并在此方法中使用测试数据集。但是,如果数据供不应求,则在验证子集上进行评估。

Model.Evaluate(Val_Ds)

对于这样的Lite模型,借条=0.5的AP为0.652,并且只有45张图像就足够了。AP_/WIDED不是那么好,我们应该收集更多该课程的示例进行培训。但是,请确保通过使用更大的数据集和更复杂的模型(如EfficientDetLite4)可以获得更好的性能。

4.导出模型

现在我们有了一个经过训练的模型,我们想要导出它并将其用于预测。提供3种导出格式

  • ExportFormat.TFLITE
  • ExportFormat.LABEL
  • ExportFormat.SAVED_MODEL

由于我希望在便携式设备上部署该模型,因此我将以TFLITE格式导出它。

model.export(export_dir= 'MY_EXPORT_PATH', 
tflite_filename= 'MY_FILENAME'
)

[可选]:还可以选择在导出之前量化模型。量化通过将权重转换为FLOAT16或INT8来减小模型™的大小。这可以在部署期间更快地进行推断。

from tflite_model_maker import config

5.运行推理

祝贺你坚持到现在!到目前为止,您应该已经有了一个训练有素的对象检测模型以及它的tflite导出版本。

现在,您只需在安装了TensorFlow Lite解释器的设备上加载模型。因为我不希望这篇文章太长,所以我将在我的下一篇文章中记录部署过程。(™不希望本文太长,所以我将在下一篇文章中记录部署过程。我将在装有摄像头的树莓PI上部署该模型,并直接在PI上运行检测。所以敬请关注!

一些限制

Model Maker仍然是一个试验性的功能,当然有很多局限性。我主要依靠它进行快速原型制作、实验和个人项目。它绝对不是面向生产使用的。

尽管如此,我还是非常感谢TensorFlow Lite团队开发了这个伟大的工具。

在本文的下一部分中,我将展示如何使用TF Lite在Raspberry PI上部署模型。在未来,我还将探索使用Model Maker的其他任务,如音频分类。在此之前,请密切关注该工具的新发展。

谢谢!

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/09/23/%e5%9f%ba%e4%ba%8etf-lite%e6%a8%a1%e5%9e%8b%e7%94%9f%e6%88%90%e5%99%a8%e7%9a%84%e8%be%b9%e7%bc%98%e7%9b%ae%e6%a0%87%e6%a3%80%e6%b5%8b-2/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息