Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

在你开始之前

  • 如果您还没有一个火力地堡项目,创建一个在火力地堡控制台

  • 熟悉中提出的指导方针包容ML指南- AutoML

  • 如果您只是想尝试 AutoML Vision Edge,并且没有自己的训练数据,请下载示例数据集,例如以下之一:

1. 组装你的训练数据

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

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

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

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

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

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

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

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

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

选项 1:带有 CSV 索引的 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地区和您的火力地堡项目的相应的谷歌云项目的一部分。

选项 2:未标记的图像

上传训练图像后,在 Google Cloud Console 中标记它们并绘制对象边界。这仅推荐用于小型数据集。请参阅下一步。

2. 训练你的模型

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

  1. 打开视野数据集在谷歌云端控制台页面。出现提示时选择您的项目。

  2. 单击新建数据集,为数据集提供一个名称,选择您想要的火车模型的类型,然后单击创建数据集

  3. 在您的数据集的导入选项卡,上传你的训练图像,你训练图像的zip压缩包或包含您上传他们的云存储位置的CSV文件。见组装您的训练数据

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

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

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

    1. 命名模式,并选择边缘型号。

    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视觉初学者指南包容ML指南- AutoML以获取更多信息。

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

4. 发布或下载您的模型

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

部署模型

在您的数据集的测试和使用标签,您可以部署为网上预报名,它运行在云计算模型的模型。此选项是包括在云AutoML文档。此站点上的文档处理其余两个选项。

发布模型

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

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

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

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

要发布与管理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您从 AutoML Cloud API 获得的模型 ID。

    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 托管的模型不可用时仍然有效。

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

要下载的模式,单击数据集的测试和使用页面上的TF精简版

下一步

现在,您已经发布或下载的模式,学习如何使用该模型在你的iOSAndroid的应用程序。