Руководство. Обнаружение знака STOP на изображениях с помощью Model Builder

Узнайте, как с помощью ML.NET Model Builder и Машинного обучения Azure создать модель обнаружения объектов для нахождения на изображениях знака STOP.

В этом руководстве вы узнаете, как:

  • Подготовка и анализ данных
  • Создание файла конфигурации Model Builder
  • выбрать сценарий;
  • выбрать среду обучения;
  • Загрузка данных
  • Обучение модели
  • Оценка модели
  • Использование модели для прогнозирования

Предварительные требования

Список необходимых компонентов и инструкции по установке см. в руководстве по установке построителя моделей.

Общие сведения об обнаружении объектов в Model Builder

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

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

Снимки экрана с данными классификации изображений и классификации объектов.

Некоторые варианты применения обнаружения объектов:

  • Автомобили с автономным управлением
  • Робототехника
  • Обнаружение лиц
  • Техника безопасности
  • Подсчет объектов
  • Распознавание активности

В этом примере создается консольное приложение .NET Core на языке C#, которое определяет знак STOP на изображениях с помощью модели машинного обучения, созданной в Model Builder. Исходный код примера из этого руководства можно найти в репозитории dotnet/machinelearning-samples на сайте GitHub.

Подготовка и анализ данных

Набор данных Stop Sign содержит 50 изображений, скачанных с сайта Unsplash, на каждом из которых есть хотя бы один знак STOP.

Создание нового проекта VoTT

  1. Скачайте набор данных, содержащий 50 изображений со знаком STOP, и распакуйте его.

  2. Скачайте VoTT (средство расстановки тегов для визуальных объектов).

  3. Откройте VoTT и выберите элемент New Project (Создать проект).

    Начальный экран VoTT

  4. В разделе Project Settings (Параметры проекта) укажите в поле Display Name (Отображаемое имя) значение StopSignObjDetection.

  5. Укажите в поле Security Token (Маркер безопасности) значение Generate New Security Token (Создать новый маркер безопасности).

  6. Рядом с полем Source Connection (Исходное подключение) щелкните элемент Add Connection (Добавить подключение).

  7. В разделе Connection Settings (Параметры подключения) укажите в поле Display Name (Отображаемое имя) для подключения к источнику значение StopSignImages и укажите в поле Provider (Поставщик) значение Local File System (Локальная файловая система). В поле Folder Path (Путь к папке) укажите папку Stop-Signs с 50 обучающими изображениями и щелкните элемент Save Connection (Сохранить подключение).

    Диалоговое окно New Connection (Новое подключение) в VoTT

  8. В разделе Project Settings (Параметры проекта) укажите в поле Source Connection (Исходное подключение) значение StopSignImages (только что созданное подключение).

  9. В поле Target Connection (Целевое подключение) также укажите значение StopSignImages. Теперь раздел Параметры проекта должен выглядеть примерно так, как показано на следующем снимке экрана:

    Диалоговое окно Project Settings (Параметры проекта) в VoTT

  10. Щелкните элемент Save Project (Сохранить проект).

Добавление тегов и меток к изображениям

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

  1. Чтобы добавить новый тег, щелкните значок плюса (первый) на панели инструментов Tags (Теги).

    Значок добавления тега в VoTT

  2. Назовите тег Stop-Sign и нажмите клавишу ВВОД на клавиатуре.

    Новый тег в VoTT

  3. Щелкните и удерживайте левую копку мыши, чтобы нарисовать прямоугольник вокруг каждого знака STOP на изображении. Если курсор не позволяет нарисовать прямоугольник, попробуйте сделать это с помощью средства Draw Rectangle (Нарисовать прямоугольник) на панели инструментов вверху или используйте сочетание клавиш R.

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

  5. Щелкните в наборе данных следующее изображение для предварительного просмотра и повторите эту процедуру.

  6. Продолжайте шаги 3–4 для каждого из этих изображений.

    Добавление заметок к изображениям в VoTT

Экспорт JSON в VoTT

Промаркировав все обучающие изображения, можно экспортировать файл, который Model Builder будет использовать для обучения.

  1. Выберите значок с диагональной стрелкой на панели инструментов слева (четвертый), чтобы перейти в раздел Export Settings (Параметры экспорта).

  2. Оставьте в поле Provider (Поставщик) значение VoTT JSON.

  3. Укажите в поле Asset State (Состояние ресурса) значение Only tagged Assets (Только ресурсы с тегами).

  4. Снимите флажок Include Images (Включить изображения). Иначе обучающие изображения будут скопированы в создаваемую папку экспорта, что является необязательным действием.

  5. Щелкните элемент Save Export Settings (Сохранить параметры экспорта).

    Параметры экспорта VoTT

  6. Вернитесь в редактор тегов (второй значок на панели инструментов слева в форме ленты). На верхней панели инструментов щелкните значок Export Project (Экспорт проекта) (последний значок в форме стрелки) или нажмите клавиши CTRL+E.

    Кнопка экспорта VoTT

В ходе экспорта будет создана новая папка с именем vott-json-export в папке Stop-Sign-Images, которая будет содержать файл JSON с именем StopSignObjDetection-export. Этот файл JSON будет использоваться в следующих шагах для обучения модели обнаружения объектов в Model Builder.

Создание консольного приложение

В Visual Studio создайте консольное приложение C# .NET Core с именем StopSignDetection.

Создание файла mbconfig

  1. В Обозревателе решений щелкните правой кнопкой мыши проект StopSignDetection и выберите элементы Добавить>Модель машинного обучения... , чтобы открыть пользовательский интерфейс Model Builder.
  2. В диалоговом окне присвойте проекту Model Builder имя StopSignDetection и нажмите кнопку Добавить.

Выбор сценария

В этом примере сценарий включает обнаружение объектов. На этапе Сценарий в Model Builder выберите сценарий Обнаружение объектов.

Мастер построителя моделей в Visual Studio

Если вариант Обнаружение объектов не отображается в списке сценариев, попробуйте обновить версию Model Builder.

Выбор среды обучения

Сейчас Model Builder поддерживает обучение моделей обнаружению объектов только с использованием Машинного обучения Azure, поэтому обучающая среда Azure выбрана по умолчанию.

Выбор обучающей среды Azure

Чтобы обучить модель с помощью Машинного обучения Azure, создайте эксперимент Машинного обучения Azure в Model Builder.

Эксперимент Машинного обучения Azure инкапсулирует конфигурацию и результаты одного или нескольких обучающих выполнений машинного обучения.

Чтобы создать эксперимент Машинного обучения Azure, необходимо сначала настроить среду в Azure. Для выполнения эксперимента требуется следующее:

  • подписка Azure;
  • рабочая область — ресурс Машинного обучения Azure, который является централизованным расположением для всех ресурсов и артефактов Машинного обучения Azure, создаваемых в ходе обучения;
  • вычислительная среда Машинного обучения — облачная виртуальная машина Linux, используемая для обучения; см. сведения о вычислениях, поддерживаемых Model Builder.

Настройка рабочей области Машинного обучения Azure

Чтобы настроить среду:

  1. Нажмите кнопку Настроить рабочую область.

  2. В диалоговом окне Создание нового эксперимента выберите свою подписку Azure.

  3. Создайте новую рабочую область Машинного обучения Azure или выберите существующую.

    При создании новой рабочей области подготавливаются следующие ресурсы:

    • Рабочая область службы "Машинное обучение Azure"
    • Хранилище Azure
    • Azure Application Insights
    • Реестр контейнеров Azure
    • Хранилище ключей Azure;

    В результате этот процесс может занять несколько минут.

  4. Создайте новое вычисление машинного обучения Azure или выберите существующее. Это может занять несколько минут.

  5. Оставьте имя эксперимента по умолчанию и щелкните элемент Создать.

    Диалоговое окно настройки рабочей области Azure

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

Если вас устраивает конфигурация, нажмите кнопку Следующий шаг в Model Builder, чтобы перейти к шагу Данные.

Загрузка данных

На шаге Данные в Model Builder вы выберете обучающий набор данных.

Важно!

В настоящее время Model Builder принимает только формат JSON, созданный VoTT.

  1. Нажмите кнопку в разделе Источник и воспользуйтесь проводником, чтобы найти файл StopSignObjDetection-export.json, который должен быть расположен в каталоге Stop-Signs/vott-json-export.

    Шаг

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

Обучение модели

Следующий шаг — обучение модели.

На экране Обучение в Model Builder нажмите кнопку Начать обучение.

На этом этапе ваши данные будут отправлены в службу хранилища Azure и в Машинном обучении Azure начнется процесс обучения.

Точная продолжительность обучения зависит от объема данных и выбранных вычислительных ресурсов. Первое обучение модели в Azure может длиться чуть дольше, так как необходимо подготовить ресурсы. В этом примере с 50 изображениями обучение заняло около 16 минут.

Ход выполнения можно отслеживать на портале Машинного обучения Azure, щелкнув ссылку Мониторинг текущего выполнения на портале Azure в Visual Studio.

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

Оценка модели

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

Шаг

В этом случае точность составляет 100 %. Это означает, что модель, скорее всего, переобучена из-за слишком большого числа изображений в наборе данных.

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

Щелкните элемент Browse an image (Обзор изображения) и укажите тестовое изображение — желательно такое, которое модель не использовала в процессе обучения.

Проверка модели в Model Builder

Оценка, отображаемая для каждого обнаруженного ограничивающего прямоугольника, указывает на достоверность обнаруженного объекта. Например, на снимке экрана выше оценка для ограничивающего прямоугольника вокруг знака STOP указывает на то, что модель с 99 % достоверностью распознает обнаруженный объект как знак STOP.

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

Если вас не устраивают метрики точности, один простой способ повысить точность модели — использовать больше данных. В противном случае нажмите ссылку Следующий шаг, чтобы перейти к шагу Использование в Model Builder.

(Необязательно) Использование модели

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

  • Консольное приложение
  • Веб-интерфейс API

Консольное приложение

При добавлении консольного приложения в решение вам будет предложено присвоить имя проекту.

  1. Назовите консольный проект StopSignDetection_Console.

  2. Нажмите кнопку Добавить в решение, чтобы добавить проект в текущее решение.

  3. Запустите приложение.

    Выходные данные программы должны выглядеть примерно так:

    Predicted Boxes:
    
    Top: 73.225296, Left: 256.89764, Right: 533.8884, Bottom: 484.24243, Label: stop-sign, Score: 0.9970765
    

Веб-интерфейс API

При добавлении веб-API в решение вам будет предложено присвоить имя проекту.

  1. Назовите проект веб-API StopSignDetection_API.

  2. Нажмите кнопку Добавить в решение, чтобы добавить проект в текущее решение.

  3. Запустите приложение.

  4. Откройте PowerShell и введите следующий код, где PORT — это порт, который прослушивается приложением.

    $body = @{
         ImageSource = <Image location on your local machine>
     }
    
     Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. В случае успешного выполнения результат должен выглядеть, как показано ниже.

    boxes                                      labels scores       boundingBoxes
    -----                                      ------ ------       -------------
    {339.97797, 154.43184, 472.6338, 245.0796} {1}    {0.99273646} {}
    
    • В столбце boxes указываются координаты ограничивающего прямоугольника обнаруженного объекта. Значения здесь относятся к левой, верхней, правой и нижней координатам соответственно.
    • labels — это индекс прогнозируемых меток. В этом случае значение 1 — это знак завершения.
    • scores определяет, насколько модель уверена в том, что ограничивающий прямоугольник относится к этой метке.

    Примечание

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

    1. Умножить верхние и нижние координаты на исходную высоту изображения, а левые и правые — на исходную ширину изображения.
    2. Разделить верхние и нижние координаты на 600, а левые и правые — на 800.

    Например, при наличии исходных размеров изображения, actualImageHeight и actualImageWidth, и ModelOutputprediction следующий фрагмент кода показывает, как масштабировать координаты BoundingBox:

    var top = originalImageHeight * prediction.Top / 600;
    var bottom = originalImageHeight * prediction.Bottom / 600;
    var left = originalImageWidth * prediction.Left / 800;
    var right = originalImageWidth * prediction.Right / 800;
    

    Изображение может иметь несколько ограничивающих прямоугольников, так что этот процесс должен применяться к каждому из них.

Поздравляем! Вы успешно создали модель машинного обучения для обнаружения знака STOP в изображениях с помощью Model Builder. Исходный код примера из этого руководства можно найти в репозитории dotnet/machinelearning-samples на сайте GitHub.

Дополнительные ресурсы

Дополнительные сведения см. в следующих статьях: