Это четвертая часть серии статей о IoT Edge. Просмотрите основную статью или перейдите в часть 3, чтобы просмотреть предыдущую статью.

Резюме и следующие шаги

Мы только что создали два симулятора, которые будут производить данные, которые мы хотим отфильтровать. Прежде чем мы сможем создать наши модули для этого, мы сначала обучим модель ИИ, которая работает на основе этих данных.

Что собирается делать эта модель ИИ? Что ж, для данных об автомобиле у нас может быть много вариантов использования, например: прогнозирование местоположения, обнаружение расстояния, обнаружение выбоин и т. Д.

В этом случае мы будем использовать прогнозирование скорости, что дает нам несколько преимуществ:

  1. У нас может быть вариант использования регрессии (прогноз)
  2. У нас есть реальный пример: определение скорости можно использовать, чтобы убедиться, что мы замедляемся, или что будет адаптация к будущим циклам.
  3. У нас могут быть данные в реальном времени, поступающие для будущих циклов (данные прогнозирования), которые мы можем отправить в облако, чтобы обеспечить возможность использования в будущем (например, потоковая обработка,…)

Давайте начнем!

Начальная настройка

Конфигурация

Для создания этого модуля мы будем использовать следующие настройки:

  • Путь: /home/xavier/iot-edge
  • Решение: EdgeSolutionCarFilter
  • Шаблон модуля: модуль C #
  • Имя модуля: ModuleFilterCar
  • Репозиторий Docker: xavierregistry.azurecr.io/module-filter-car

Кодирование

Анализ решения

Вспомнив наш код симулятора для данных о наших автомобилях, он воспроизводил точки из CSV и отправлял их в концентратор устройств. Как это будет работать в реальном случае использования? Если мы подумаем об этом, мы можем определить следующие шаги, которые необходимо выполнить, чтобы наше устройство IoT Edge использовало хорошую работающую модель ИИ:

  1. Собирать данные
  2. Обучите нашу модель ИИ
  3. Разверните нашу модель искусственного интеллекта на грани
  4. Прогнозирование значений нашего устройства Edge на основе модели ИИ
  5. Повторение

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

Шаг 1. Сбор данных

Поскольку для этой статьи мы отправляем все из CSV-файла, который уже содержит эти собранные данные, мы можем заявить, что шаг 1. был завершен, поэтому переходите к шагу 2!

Шаг 2. Обучение нашей модели ИИ

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

С нашим выходным параметром:

Как мы будем тренировать эту модель? Для этого мы воспользуемся ML.NET, который позволяет нам это довольно легко сделать. Приступим (для ознакомления см. Прогнозирование Instagram с помощью ML.NET)

Примечание. Мы используем ML.NET потому, что он довольно прост в использовании, а также позволяет нам экспортировать нашу модель в формате ONNX, который является открытым стандартом для моделей машинного обучения.

Шаг 2.1. Создание нашего проекта ML (установка ML.NET)

Сначала мы начнем с создания нового решения .NET и добавления к нему Microsoft.ML зависимости.

После этого мы копируем файл car.csv в корень нашего проекта. Теперь мы можем приступить к написанию кода нашего предсказания.

Шаг 2.2. Добавление нашего ML-кода

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

Прежде чем мы начнем его адаптировать, сначала переименуйте car.csv в car-train.csv и скопируйте некоторые строки в новый файл с именем car-test.csv, этот файл будет нашими данными тестирования для обучения регрессии.

Примечание. Мы просто создадим здесь проект для развертывания на периферии, поэтому мы не будем углубляться в наш код машинного обучения. Полный код можно найти на GitHub

Теперь мы можем создать следующее, чтобы создать Model.zip в нашей корневой папке.

Program.cs

Шаг 3. Развертывание нашей модели ИИ на Edge

Как только наш Model.zip был создан, теперь мы можем поместить его в наш модуль Edge. В нашем случае мы сделаем это путем ручного включения этого сообщения в блог, поэтому просто скопируйте его в проект EdgeSolutionCarFilter в папку ModuleFilterCar/model/.

Важно!

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

Шаг 4. Прогнозирование значений нашего пограничного устройства на основе развернутой модели искусственного интеллекта.

Последний шаг - включить использование нашей обученной модели в модуль Edge. Для этого мы сначала добавим Microsoft.ML к зависимостям проекта .NET с помощью dotnet add ModuleFilterCar package Microsoft.ML и добавим следующий код для Program.cs, который будет использовать модель, которую мы только что построили, и отправлять прогнозы в Центр Интернета вещей.

ModuleCarSimulator / Program.cs

Измените вызов SendEventAsync на ioTHubModuleClient.SendEventAsync("input-simulator-car", message);

Program.cs

В нашем Init() методе мы сначала убедимся, что можем обрабатывать значения, полученные от EdgeHub, поэтому измените следующую строку:

В направлении:

Примечание. Мы можем проверить это input-simulator-car с помощью следующего запроса curl: curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input-simulator-car","data":"2018-04-08 10:31:56.690670,713.9933580000001,30.32343,-97.756062,7.75,35.313,-7.6,2,1861,0.05,-0.16"}' http://localhost:53000/api/v1/messages

Теперь добавьте метод с именем ProcessSimulatorCarMessages в качестве типа Task следующим образом:

Это будет использовать метод PredictValue:

Шаг 5. Подключение нашего симулятора к модулю фильтра.

Последнее, что мы сделаем, - это создадим развертывание с нашим deployment.template.json файлом. Однако здесь мы будем подключать симулятор к фильтру, а фильтр к нашему облаку. Делаем так:

Теперь после развертывания все должно работать, и вы увидите следующее:

в нашем обзоре Центра Интернета вещей на устройстве активированы следующие модули:

Вывод

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

Первоначально опубликовано на https://xaviergeerinck.com 23 августа 2019 г.