Catch up on highlights from Firebase at Google I/O 2023. Learn more

Обучение модели обнаружения объектов с помощью AutoML Vision Edge

Модель обнаружения объектов похожа на модель маркировки изображений, но вместо того, чтобы присваивать метки всем изображениям, она присваивает метки областям изображений. Вы можете использовать модели обнаружения объектов, чтобы распознавать и находить объекты на изображении или отслеживать движения объекта по серии изображений.

Для обучения модели обнаружения объектов вы предоставляете AutoML Vision Edge набор изображений с соответствующими метками объектов и границами объектов. AutoML Vision Edge использует этот набор данных для обучения новой модели в облаке, которую можно использовать для обнаружения объектов на устройстве.

Прежде чем вы начнете

1. Соберите свои тренировочные данные

Во-первых, вам нужно собрать набор обучающих данных из помеченных изображений. Помните о следующих рекомендациях:

  • Изображения должны быть в одном из следующих форматов: JPEG, PNG, GIF, BMP, ICO.

  • Размер каждого изображения должен быть не более 30 МБ. Обратите внимание, что AutoML Vision Edge уменьшает масштаб большинства изображений во время предварительной обработки, поэтому, как правило, получение изображений с очень высоким разрешением не дает выигрыша в точности.

  • Включите не менее 10, а лучше 100 или более примеров каждой этикетки.

  • Включите несколько ракурсов, разрешений и фонов для каждой этикетки.

  • Данные для обучения должны быть как можно ближе к данным, на основе которых должны быть сделаны прогнозы. Например, если ваш сценарий использования связан с размытыми изображениями и изображениями с низким разрешением (например, с камеры наблюдения), ваши обучающие данные должны состоять из размытых изображений с низким разрешением.

  • Модели, созданные AutoML Vision Edge, оптимизированы для фотографий объектов реального мира. Они могут не сработать для рентгеновских снимков, рисунков от руки, отсканированных документов, квитанций и так далее.

    Кроме того, модели обычно не могут предсказывать ярлыки, которые не могут присвоить люди. Таким образом, если человек не может ставить метки, глядя на изображение в течение 1-2 секунд, модель, скорее всего, тоже не может этому обучиться.

Когда у вас будут готовы тренировочные изображения, подготовьте их к импорту в Google Cloud. У вас есть два варианта:

Вариант 1. Облачное хранилище с CSV-индексом

Загрузите тренировочные изображения в Google Cloud Storage и подготовьте файл CSV со списком URL-адресов каждого изображения и, при необходимости, правильными метками объектов и ограничивающими областями для каждого изображения. Этот параметр полезен при использовании больших наборов данных.

Например, загрузите свои изображения в облачное хранилище и подготовьте файл 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 и является частью соответствующего проекта Google Cloud вашего проекта Firebase.

Вариант 2. Немаркированные изображения

Пометьте свои тренировочные изображения и нарисуйте границы объектов в Google Cloud Console после их загрузки. Это рекомендуется только для небольших наборов данных. См. следующий шаг.

2. Обучите свою модель

Затем обучите модель, используя ваши изображения:

  1. Откройте страницу наборов данных Vision в Google Cloud Console. Выберите свой проект, когда будет предложено.

  2. Щелкните Новый набор данных , укажите имя набора данных, выберите тип модели, которую хотите обучить, и щелкните Создать набор данных .

  3. На вкладке «Импорт» вашего набора данных загрузите свои тренировочные изображения, zip-архив ваших тренировочных изображений или файл CSV, содержащий местоположения облачного хранилища, в которые вы их загрузили. См. Сбор данных для обучения .

  4. После завершения задачи импорта используйте вкладку «Изображения» , чтобы проверить обучающие данные.

  5. Если вы не загрузили файл CSV, для каждого изображения нарисуйте ограничивающие рамки вокруг объектов, которые вы хотите распознать, и пометьте каждый объект.

  6. На вкладке «Обучение» нажмите «Начать обучение» .

    1. Назовите модель и выберите тип модели Edge .

    2. Настройте следующие параметры обучения, которые определяют производительность сгенерированной модели:

      Оптимизировать модель для... Используемая конфигурация модели. Вы можете обучать более быстрые модели меньшего размера, когда важна низкая задержка или небольшой размер пакета, или более медленные модели большего размера, когда наиболее важна точность.
      Бюджет часа узла

      Максимальное время в часах вычислений, затрачиваемое на обучение модели. Большее время обучения обычно приводит к более точной модели.

      Обратите внимание, что обучение может быть завершено меньше указанного времени, если система определит, что модель оптимизирована и дополнительное обучение не улучшит точность. Вы платите только за фактически использованные часы.

      Типичное время обучения
      Очень маленькие наборы 1 час
      500 изображений 2 часа
      1000 изображений 3 часа
      5000 изображений 6 часов
      10 000 изображений 7 часов
      50 000 изображений 11 часов
      100 000 изображений 13 часов
      1 000 000 изображений 18 часов

3. Оцените свою модель

По завершении обучения вы можете щелкнуть вкладку Оценить , чтобы просмотреть показатели производительности модели.

Одним из важных применений этой страницы является определение порога достоверности, который лучше всего подходит для вашей модели. Порог достоверности — это минимальная достоверность, которую должна иметь модель, чтобы присвоить метку изображению. Перемещая ползунок Порог достоверности , вы можете увидеть, как различные пороги влияют на производительность модели. Производительность модели измеряется с помощью двух показателей: точности и полноты .

В контексте классификации изображений точность — это отношение количества изображений, которые были правильно помечены, к количеству изображений, помеченных моделью с учетом выбранного порога. Когда модель имеет высокую точность, она реже присваивает метки неправильно (меньше ложных срабатываний).

Полнота — это отношение количества изображений, которые были правильно помечены, к количеству изображений с контентом, который модель должна была иметь возможность пометить. Когда модель имеет высокую полноту, она реже не может присвоить какую-либо метку (меньше ложных отрицательных результатов).

Оптимизируете ли вы точность или отзыв, будет зависеть от вашего варианта использования. Дополнительную информацию см. в руководстве для начинающих по AutoML Vision и в руководстве Inclusive ML — AutoML .

Когда вы найдете порог достоверности, который дает удобные для вас показатели, запишите его; вы будете использовать порог достоверности для настройки модели в своем приложении. (Вы можете использовать этот инструмент в любое время, чтобы получить соответствующее пороговое значение.)

4. Опубликуйте или загрузите свою модель

Если вас устраивает производительность модели и вы хотите использовать ее в приложении, у вас есть три варианта, из которых вы можете выбрать любую комбинацию: развернуть модель для онлайн-прогнозирования, опубликовать модель в Firebase или загрузить модель и связать ее. с вашим приложением.

Разверните модель

На вкладке «Тестирование и использование» вашего набора данных вы можете развернуть свою модель для онлайн-прогнозирования, которая запускает вашу модель в облаке. Этот параметр описан в документации по Cloud AutoML . Документы на этом сайте касаются оставшихся двух вариантов.

Опубликовать модель

Публикуя модель в Firebase, вы можете обновить модель, не выпуская новую версию приложения, а также использовать удаленную настройку и A/B-тестирование для динамического предоставления различных моделей различным группам пользователей.

Если вы решите предоставить модель только путем размещения ее в Firebase, а не в комплекте с приложением, вы можете уменьшить первоначальный размер загружаемого приложения. Однако имейте в виду, что если модель не связана с вашим приложением, любые функции, связанные с моделью, будут недоступны до тех пор, пока ваше приложение не загрузит модель в первый раз.

Чтобы опубликовать свою модель, вы можете использовать любой из двух способов:

  • Загрузите модель TF Lite со страницы «Тестирование и использование» вашего набора данных в Google Cloud Console, а затем загрузите модель на странице «Пользовательская модель» консоли Firebase. Обычно это самый простой способ опубликовать одну модель.
  • Опубликуйте модель непосредственно из своего проекта Google Cloud в Firebase с помощью Admin SDK. Этот метод можно использовать для пакетной публикации нескольких моделей или для создания автоматических конвейеров публикации.

Чтобы опубликовать модель с помощью API управления моделью Admin SDK:

  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.

    питон

    # 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)
    

    Node.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 Lite на странице «Тестирование и использование» вашего набора данных.

Следующие шаги

Теперь, когда вы опубликовали или загрузили модель, узнайте, как использовать ее в приложениях для iOS+ и Android .