查看原文
其他

TensorFlow Lite 对象检测

Google TensorFlow 2021-07-27


使用边界框检测图像中的多个对象。可识别 80 类不同的对象。



入门指南

如果您对 TensorFlow Lite 不熟悉,并且使用 Android 或 iOS 平台,我们建议您探索以下可帮助您入门的示例应用。


Android 示例 iOS 示例

如果您使用 Android 或 iOS 以外的平台,或者已经熟悉 TensorFlow Lite API,则可以下载我们的入门对象检测模型及随附的标签(https://tensorflow.google.cn/api_docs/python/tf/lite?hl=zh-CN)


下载入门模型及标签

如需了解有关入门模型的更多信息,请参阅 入门模型(https://tensorflow.google.cn/lite/models/object_detection/overview?hl=zh-CN)



什么是对象检测?

在给定图像或视频串流时,对象检测模型可以识别一组已知对象中的哪些对象可能存在其中,并提供这些对象在图像中的位置信息。


例如,此 示例应用 的屏幕截图展示了识别两个对象并标注其位置的方法(https://tensorflow.google.cn/lite/models/object_detection/overview?hl=zh-CN)



我们训练对象检测模型,使其能够检测多种类别对象的存在和位置。例如,我们可以使用以下材料训练模型:含有不同种类水果的图像、说明图像所展示的水果种类的标签(例如,苹果、香蕉或草莓),以及指明每个对象在图像中所处位置的数据。


随后,当我们向模型提供图像时,模型会输出检测到的对象列表、包含每个对象的边界框位置,以及表示检测正确的置信度得分。

模型输出

假设模型经过训练,能够检测苹果、香蕉和草莓。当我们向其传输某张图像时,模型会输出一定数量的检测结果(在本例中为 5)。



置信度得分

若要解释这些结果,我们可以查看每个检测对象的得分和位置。得分是介于 0 和 1 之间的数值,表示真正检测到的对象的置信度。数值越接近 1,模型的置信度就越高。

您可以根据您的应用,确定一个截断阈值,如果置信度得分低于该阈值,则舍弃检测结果。对于我们的示例,我们可能会将合理的截断阈值设定为 0.5(即有效检测的概率为 50%)。在这种情况下,我们会忽略数组中的最后两个对象,因为其置信度得分低于 0.5:



您使用的截断阈值应该基于您更偏好假阳性(对象识别错误,或将对象错误识别在其并未出现的区域)还是假阴性(由于对象置信度过低而漏掉真实对象)。


例如,下图中的梨(并非模型受训要检测的对象)被错误地识别为一个“人”。这就是一则假阳性示例,我们可以通过选择恰当的截断阈值将其忽视。在这种情况下,将截止阈值设置为 0.6(或 60% )可以很好地避免假阳性的情况。



位置

对于每个检测到的对象,模型会返回一个由四个数字组成的数组,表示围绕其位置的边界矩形。对于我们提供的入门模型,这些数字按照如下顺序排列:



上边线数值表示矩形顶部边缘与图像顶部之间的距离(单位为像素)。左边线数值表示矩形左侧边缘与输入图像左侧边界之间的距离。下边线和右边线的数值以此类推。


请注意:对象检测模型只接受特定大小的输入图像。这或许与您设备相机拍摄的原始图像大小不同,因此您必须编写代码来裁剪和缩放原始图片,以使其与模型的输入大小相匹配(如需查看示例,请参阅我们的 示例应用 https://tensorflow.google.cn/lite/models/object_detection/overview?hl=zh-CN)。


模型输出的像素值表示对象在经过裁剪和缩放的图像中所处的位置,因此您必须调整像素值,以正确阐释对象位置。



入门模型

我们建议您使用预训练的量化 COCO SSD MobileNet v1 模型进行入门学习。


下载入门模型及标签网址:

http://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip?hl=zh-CN


使用与限制

我们提供的对象检测模型最多能在一个图像中识别和定位 10 个对象。经过训练,该模型能够识别 80 类不同的对象。如需完整的类别列表,请参阅 model zip 中的标签文件。


如果您想训练模型识别新类别,请参阅自定义模型。

至于以下用例,您需要使用不同类型的模型:

  • 预测图像最可能体现哪种单一标签(参见图像分类)

  • 预测图像的组成部分,例如主体与背景(参见分割)


输入

模型将图像用作输入。合适的图像大小应为 300x300 像素,每个像素有三个颜色通道(红、蓝、绿)。我们应将图像以 27 万字节值 (300x300x3) 的平坦缓冲区形式馈送给模型。鉴于模型已经过量化,每个数值应该为表示 0 到 255 之间数值的单一字节。


输出

模型输出四个数组,分别对应索引值 0 至 4。数组 0、1、2 描述了 10 个检测到的对象,每个数组中均有一个元素对应每个对象。模型始终可以检测到 10 个对象。




自定义模型

我们提供的预训练模型已经过训练,能够检测 80 类对象。如需完整的类别列表,请参阅 model zip 中的标签文件(http://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip?hl=zh-CN)


您可以使用迁移学习技术重新训练模型,以使其识别原始集合中并未涵盖的类别。例如,即使原始训练数据中仅包含一种蔬菜,您也可以重新训练模型,使其能够检测多种蔬菜。为此,您需要为您想要训练的每个新标签都提供一组训练图像。


请在30 分钟训练和提供提供实时移动对象检测器 中了解如何进行迁移学习。



更多 AI 相关阅读:



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存