Обучение модели обнаружения объектов с помощью 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: Cloud Storage с 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 и является частью соответствующего проекта Google Cloud вашего проекта Firebase.

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

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

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

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

  1. Откройте страницу Vision Datasets в консоли Google Cloud . Выберите свой проект при появлении запроса.

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

  3. На вкладке Import вашего набора данных загрузите ваши обучающие изображения, zip-архив ваших обучающих изображений или CSV-файл, содержащий местоположения Cloud Storage , в которые вы их загрузили. См. раздел Assemble your training data .

  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 или загрузить модель и связать ее со своим приложением.

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

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

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

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

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

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

  • Загрузите модель TF Lite со страницы Test & use вашего набора данных в консоли Google Cloud , а затем загрузите модель на страницу Custom model консоли 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 .
    MODEL_ID Идентификатор модели, который вы получили из API AutoML Cloud.

    Питон

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