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

Xamarin Forms — это кроссплатформенная платформа, принадлежащая Microsoft, которая позволяет разработчикам создавать нативные приложения, которые можно развернуть в различных системах: Android, iOS, Mac и Windows. ONNX — это формат, созданный Microsoft для экспорта моделей машинного обучения, созданных из различных сред, таких как PyTorch, Keras, SciKit-learn и т. д., и предоставляет среду выполнения для запуска указанных моделей в различных средах.

Давайте посмотрим, как мы можем интегрировать среду выполнения ONNX в приложение Xamarin, чтобы обеспечить распознавание объектов. Мы будем использовать специально обученную модель для обнаружения людей на фотографии, но не стесняйтесь загружать любую модель из зоопарка моделей ONNX, например модель MobileNet.

Настройка проекта

Во-первых, убедитесь, что вы установили Visual Studio (VS) 2017/2019 для Windows/Mac с мобильной разработкой с установленной рабочей нагрузкой .NET. Обратитесь к документации за руководствами по установке, затем создайте пустой проект Xamarin Forms с помощью VS, как показано ниже.

Установите некоторые необходимые зависимости с помощью диспетчера пакетов NuGet: ONNX Runtime версии 1.10.0 или выше и Skiasharp версии 2.80.3 или выше. Skiasharp — это библиотека 2D-графики, которая позже поможет на этапе предварительной/постобработки.

Для проекта iOS требуется, чтобы он был нацелен на минимальную версию 11.0. Для этого откройте файл info.plist в проекте iOS и соответствующим образом измените минимальный номер версии.

Давайте добавим ONNX в общий проект в качестве встроенного ресурса. Встроенные ресурсы предлагают интуитивно понятный способ добавления и доступа к локальным файлам в ваше приложение. Дополнительные сведения см. в документации. Создайте папку Resources в общем проекте и добавьте туда свою модель. Убедитесь, что вы установили действие сборки для этого файла как встроенное, как показано ниже.

Наконец, нам нужно настроить проект для использования C# версии 8 или выше, чтобы использовать новые функции языка, такие как использование объявлений. Версия, которую вы выберете, зависит от установленной версии .NET, и вы можете обратиться к этой документации для получения дополнительной информации.

Интеграция машинного обучения

Давайте создадим класс C# с выделенным кодом в общем проекте под названием inference. Целью этого класса будет выполнение четырех основных функций: инициализация модели в сеансе вывода, предварительная обработка изображения, выполнение вывода по изображению и постобработка результата.

Процесс инициализации будет реализован асинхронно вне основного потока, который обычно запускает пользовательский интерфейс, что обеспечивает бесперебойную работу интерфейса.

Изображения должны быть предварительно обработаны таким образом, чтобы они соответствовали входным требованиям модели, и в этом сценарии есть две основные проблемы. Во-первых, необходимо изменить размер изображения, чтобы оно соответствовало размерам изображений, используемых при обучении модели. Чтобы узнать размеры, загрузите свою модель машинного обучения в Neutron, приложение, которое визуализирует архитектуру модели и отмечает размер используемых входных данных. Для модели, которую мы выбрали, входные размеры составляют 256 x 512. Во-вторых, данные изображения содержат значения RGB, хранящиеся в многомерном массиве, и модель принимает тензоры определенной формы. Используя приложение Neutron, вы можете определить форму тензора, и для нашего случая это 1 x 3 x 512 x 256.

Как только изображение представлено в виде тензора, вы можете выполнить вывод на изображении, используя сеанс вывода, созданный в функции инициализации. На выходе получается тензор, имеющий форму, показанную в сетевой архитектуре. Вы можете выбрать выполнение логического вывода для ЦП или ГП, настроив свойство устройства среды выполнения ONNX.

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

Наконец, вам нужно будет обработать результаты вывода и сопоставить их с меткой, которую вы загрузили как внешний ресурс. Кроме того, поскольку это задача обнаружения объекта, нам нужно отобразить ограничивающую рамку вокруг обнаруженного объекта. Это потребует использования координат ограничительной рамки (x1, x2, y1, y2) и их повторного масштабирования, чтобы они соответствовали исходному размеру изображения.

Разработка пользовательского интерфейса

Давайте создадим простой пользовательский интерфейс с кнопкой для загрузки изображения и заполнителем изображения для отображения загруженного изображения. Xamarin Forms использует XAML в качестве языка разметки для создания интерфейсов, которые впоследствии будут скомпилированы в собственные элементы для iOS и Android.

Затем добавьте некоторую логику для привязки элементов, добавленных к интерфейсу, к классу вывода, чтобы добавить интерактивности.

Заключение

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

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.