获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

使用 AutoML Vision Edge 训练对象检测模型

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

对象检测模型类似于图像标记模型,但它不是为整个图像分配标签,而是为图像区域分配标签。您可以使用对象检测模型来识别和定位图像中的对象或跟踪对象在一系列图像中的移动。

要训​​练对象检测模型,您需要向 AutoML Vision Edge 提供一组具有相应对象标签和对象边界的图像。 AutoML Vision Edge 使用此数据集在云中训练一个新模型,您可以将其用于设备上的对象检测。

在你开始之前

1. 收集你的训练数据

首先,您需要将标记图像的训练数据集放在一起。请牢记以下准则:

  • 图像必须采用以下格式之一:JPEG、PNG、GIF、BMP、ICO。

  • 每个图像必须为 30MB 或更小。请注意,AutoML Vision Edge 在预处理期间会缩小大多数图像,因此提供非常高分辨率的图像通常不会带来准确性优势。

  • 包括每个标签的至少 10 个,最好是 100 个或更多的例子。

  • 为每个标签包括多个角度、分辨率和背景。

  • 训练数据应尽可能接近要进行预测的数据。例如,如果您的用例涉及模糊和低分辨率的图像(例如来自安全摄像头),那么您的训练数据应该由模糊、低分辨率的图像组成。

  • AutoML Vision Edge 生成的模型针对现实世界中的物体照片进行了优化。它们可能不适用于 X 射线、手绘图、扫描文档、收据等。

    此外,模型通常无法预测人类无法分配的标签。因此,如果人类无法通过查看图像 1-2 秒来分配标签,那么模型可能也无法被训练来做到这一点。

准备好训练图像后,准备将它们导入 Google Cloud。你有两个选择:

选项 1:使用 CSV 索引的云存储

将您的训练图像上传到Google Cloud Storage并准备一个 CSV 文件,其中列出每个图像的 URL,以及(可选)每个图像的正确对象标签和边界区域。此选项在使用大型数据集时很有帮助。

例如,将您的图片上传到 Cloud Storage,然后准备一个 CSV 文件,如下所示:

gs://your-training-data-bucket/001.jpg,accordion,0.2,0.4,,,0.3,0.5,,
gs://your-training-data-bucket/001.jpg,tuba,0.2,0.5,,,0.4,0.8,,
gs://your-training-data-bucket/002.jpg,accordion,0.2,0.2,,,0.9,0.8,,

对象边界框被指定为图像中的相对坐标。请参阅格式化训练数据 CSV

图像必须存储在us-central1区域中的存储桶中,并且是您的 Firebase 项目对应的 Google Cloud 项目的一部分。

选项 2:未标记的图像

上传训练图像后,在 Google Cloud Console 中标记您的训练图像并绘制对象边界。这只建议用于小型数据集。请参阅下一步。

2. 训练你的模型

接下来,使用您的图像训练模型:

  1. 在 Google Cloud Console 中打开视觉数据集页面。出现提示时选择您的项目。

  2. 单击新建数据集,为数据集提供名称,选择要训练的模型类型,然后单击创建数据集

  3. 在数据集的“导入”选项卡上,上传您的训练图像、训练图像的 zip 存档或包含您上传到的 Cloud Storage 位置的 CSV 文件。请参阅组装您的训练数据

  4. 导入任务完成后,使用图像选项卡验证训练数据。

  5. 如果您没有上传 CSV,请为每张图片在要识别的对象周围绘制边界框并标记每个对象。

  6. 训练选项卡上,单击开始训练

    1. 命名模型并选择Edge模型类型。

    2. 配置以下训练设置,这些设置控制生成模型的性能:

      优化模型...要使用的模型配置。当低延迟或小包大小很重要时,您可以训练更快、更小的模型,或者在准确性最重要时训练更慢、更大的模型。
      节点小时预算

      用于训练模型的最长时间(以计算小时为单位)。更多的训练时间通常会导致更准确的模型。

      请注意,如果系统确定模型已优化并且额外的训练不会提高准确性,则可以在指定时间内完成训练。您只需按实际使用的小时数付费。

      典型的训练时间
      非常小的套装1小时
      500 张图片2小时
      1,000 张图片3小时
      5,000 张图片6个小时
      10,000 张图片7小时
      50,000 张图片11 小时
      100,000 张图片13 小时
      1,000,000 张图片18 小时

3. 评估你的模型

训练完成后,您可以单击“评估”选项卡以查看模型的性能指标。

此页面的一个重要用途是确定最适合您的模型的置信度阈值。置信度阈值是模型为图像分配标签所必须具有的最小置信度。通过移动置信度阈值滑块,您可以看到不同的阈值如何影响模型的性能。模型性能使用两个指标来衡量:准确率和召回率

在图像分类的上下文中,精度是正确标记的图像数量与模型在给定阈值的情况下标记的图像数量之比。当模型具有高精度时,它错误地分配标签的频率会降低(误报更少)。

召回率是正确标记的图像数量与模型应该能够标记的内容的图像数量之比。当模型具有高召回率时,它分配任何标签的频率会降低(假阴性更少)。

您是否优化精度或召回将取决于您的用例。有关更多信息,请参阅AutoML Vision 初学者指南包容性 ML 指南 - AutoML

当您找到一个产生您满意的指标的置信度阈值时,请记下它;您将使用置信度阈值在您的应用程序中配置模型。 (您可以随时使用此工具来获得适当的阈值。)

4. 发布或下载您的模型

如果您对模型的性能感到满意并希望在应用程序中使用它,您有三个选项,您可以从中选择任意组合:部署模型进行在线预测、将模型发布到 Firebase 或下载模型并捆绑它与您的应用程序。

部署模型

在数据集的测试和使用选项卡上,您可以部署模型以进行在线预测,该模型在云中运行您的模型。 Cloud AutoML 文档中介绍了此选项。该站点上的文档处理其余两个选项。

发布模型

通过将模型发布到 Firebase,您可以在不发布新应用版本的情况下更新模型,并且可以使用远程配置和 A/B 测试为不同的用户组动态提供不同的模型。

如果您选择仅通过使用 Firebase 托管模型来提供模型,而不是将其与您的应用捆绑在一起,则可以减少应用的初始下载大小。但请记住,如果模型未与您的应用程序捆绑在一起,则在您的应用程序第一次下载模型之前,任何与模型相关的功能都将不可用。

要发布您的模型,您可以使用以下两种方法之一:

  • 从 Google Cloud Console 中数据集的测试和使用页面下载 TF Lite 模型,然后在 Firebase 控制台的自定义模型页面上传模型。这通常是发布单个模型的最简单方法。
  • 使用 Admin SDK 将模型直接从您的 Google Cloud 项目发布到 Firebase。您可以使用此方法批量发布多个模型或帮助创建自动发布管道。

使用 Admin SDK模型管理 API发布模型:

  1. 安装并初始化 SDK

  2. 发布模型。

    您需要指定模型的资源标识符,它是一个类似于以下示例的字符串:

    projects/PROJECT_NUMBER/locations/us-central1/models/MODEL_ID
    PROJECT_NUMBER包含模型的 Cloud Storage 存储分区的项目编号。这可能是您的 Firebase 项目或其他 Google Cloud 项目。您可以在 Firebase 控制台或 Google Cloud Console 信息中心的“设置”页面上找到此值。
    MODEL_ID模型的 ID,您从 AutoML Cloud API 获得。

    Python

    # First, import and initialize the SDK.
    
    # Get a reference to the AutoML model
    source = ml.TFLiteAutoMlSource('projects/{}/locations/us-central1/models/{}'.format(
        # See above for information on these values.
        project_number,
        model_id
    ))
    
    # Create the model object
    tflite_format = ml.TFLiteFormat(model_source=source)
    model = ml.Model(
        display_name="example_model",  # This is the name you will use from your app to load the model.
        tags=["examples"],             # Optional tags for easier management.
        model_format=tflite_format)
    
    # Add the model to your Firebase project and publish it
    new_model = ml.create_model(model)
    new_model.wait_for_unlocked()
    ml.publish_model(new_model.model_id)
    

    节点.js

    // First, import and initialize the SDK.
    
    (async () => {
      // Get a reference to the AutoML model. See above for information on these
      // values.
      const automlModel = `projects/${projectNumber}/locations/us-central1/models/${modelId}`;
    
      // Create the model object and add the model to your Firebase project.
      const model = await ml.createModel({
        displayName: 'example_model',  // This is the name you use from your app to load the model.
        tags: ['examples'],  // Optional tags for easier management.
        tfliteModel: { automlModel: automlModel },
      });
    
      // Wait for the model to be ready.
      await model.waitForUnlocked();
    
      // Publish the model.
      await ml.publishModel(model.modelId);
    
      process.exit();
    })().catch(console.error);
    

下载模型并将其与您的应用程序捆绑在一起

通过将您的模型与您的应用捆绑在一起,您可以确保在 Firebase 托管的模型不可用时,您的应用的 ML 功能仍然有效。

如果您同时发布模型并将其与您的应用程序捆绑在一起,则该应用程序将使用可用的最新版本。

要下载您的模型,请单击数据集的测试和使用页面上的TF Lite

下一步

现在您已经发布或下载了模型,了解如何在您的iOS+Android应用程序中使用模型。