Добавление пользовательского обнаружения объектов в приложение iOS с помощью Turi Create и Fritz AI

Версия этого руководства для блокнота Google Colab находится здесь.

В этом руководстве вы узнаете, как обучить пользовательскую модель обнаружения объектов и интегрировать ее в приложение iOS с помощью Turi Create и Fritz AI.

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

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

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

  1. Загрузите и подготовьте набор данных
  2. Обучите пользовательскую модель обнаружения объектов с помощью Turi Create, инструмента с открытым исходным кодом от Apple.
  3. Загрузите обученные модели на платформу Fritz AI для мониторинга и управления
  4. Интегрируйте нашу модель в приложение и используйте ее для поиска и маркировки объектов в живом видео.

Прежде чем мы начнем, вот несколько инструментов и терминов, о которых вам следует знать:

  • Блокноты Google Colab: браузерные среды Python, которые выполняют код в облаке Google и предоставляют бесплатный доступ к графическим процессорам и TPU для быстрого обучения моделей.
  • Turi Create: инструмент машинного обучения с открытым исходным кодом от Apple с абстракциями высокого уровня для обучения различных типов моделей машинного обучения.
  • Core ML: фреймворк Apple для машинного обучения на устройствах.
  • Fritz AI: комплексная платформа для мобильного машинного обучения, которая включает SDK для интеграции моделей в приложения, а также облачные инструменты для мониторинга и управления моделями в реальных условиях.

Давайте нырнем!

Версия этого руководства для блокнота Google Colab находится здесь.

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

Загрузите и подготовьте набор данных

Вся подготовка данных и обучение модели для этого руководства будут выполняться на Python и происходить в записной книжке Colab, ссылка на которую приведена здесь: Блокнот Fritz AI - Обнаружение объектов с помощью Turi Create

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

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

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

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

Для обнаружения объекта требуются наземные аннотации, содержащие как местоположение объекта, так и метку. Аннотации к изображениям могут содержать даже несколько объектов:

[{‘coordinates’: {‘height’: 104, ‘width’: 110, ‘x’: 115, ‘y’: 216},
‘label’: bike},
{‘coordinates’: {‘height’: 106, ‘width’: 110, ‘x’: 188, ‘y’: 254},
‘label’: car},
{‘coordinates’: {‘height’: 164, ‘width’: 131, ‘x’: 374, ‘y’: 169},
‘label’: bike}]

И изображения могут содержать несколько объектов.

Обучение модели обнаружения объектов

Версия этого руководства для блокнота Google Colab находится здесь.

Теперь, когда у нас есть данные, пора обучить модель. Мы добавим наш набор данных в наборы для обучения и тестирования для перекрестной проверки. Команда create начинает обучение с одной строки кода. Даже с графическим процессором от Google Colab обучение модели может занять некоторое время.

Для этого набора данных я рекомендую установить max_iterations как минимум на 1000, чтобы увидеть полезные результаты. На обучение модели уйдет около 30 минут. В это время нормально, если ваш ноутбук отключается, но если вы отсутствуете слишком долго, вы можете потерять свой прогресс. Лучше, чтобы ваш компьютер не спал, а браузер был открыт все время.

Когда модель будет готова, мы можем использовать другие методы модели, такие как predict и evaluate, чтобы увидеть, как она работает. В частности, мы можем строить прогнозы поверх каждого входного изображения с помощью удобного вспомогательного метода tc.object_detector.util.draw_bounding_boxes, предоставляемого Turi Create.

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

Когда мы будем удовлетворены нашей моделью, мы можем сохранить в нескольких различных форматах для использования в другом месте. Метод model.save экспортирует модели в формат, который можно загрузить обратно в Turi Create для дополнительного обучения или вывода в Python.

Однако наша конечная цель - использовать эту модель в мобильном приложении. Для этого нам нужно экспортировать модель в удобный для мобильных устройств формат. В iOS это Core ML, фреймворк Apple для машинного обучения на устройствах. model.export_coreml methods предоставляет нам нужный нам файл модели.

Загрузка нашей модели в Fritz AI для мониторинга и управления

Имея в руках обученную модель, возникает соблазн сразу перейти к коду приложения. Но машинное обучение требует постоянной итерации по мере добавления новых данных и повышения производительности. Чтобы сделать эти итерации максимально быстрыми и легкими, мы настроим Fritz AI.

Fritz AI предоставляет разработчикам приложений несколько основных преимуществ:

  1. Вы можете использовать наши инструменты командной строки и Python SDK для отслеживания и сохранения новых версий моделей с течением времени и хранения всех ваших экспериментов в одном месте.
  2. Модели можно отправлять на устройства по беспроводной сети, поэтому вам не нужно перестраивать приложение в Xcode или повторно отправлять его в магазин приложений, когда будет готова новая версия.
  3. В наши мобильные SDK для iOS и Android встроена сложная предварительная и постобработка, поэтому вы можете тратить меньше времени на интеграцию своей модели и больше времени на создание приложения.

Чтобы загрузить нашу пользовательскую модель обнаружения объектов в Fritz AI, начните с создания учетной записи. На странице Обзор вы увидите блок кода, содержащий команду для настройки инструмента командной строки Fritz с вашим личным ключом API и идентификатором проекта. Скопируйте эти ключи в следующую команду в записной книжке Google Colab.

!fritz config update --api-key “YOUR API KEY” --project-id “YOUR PROJECT ID”

Блокнот Colab показывает два способа загрузки моделей в Fritz AI: через интерфейс командной строки или напрямую из нашего Python SDK.

Создание приложения, которое обнаруживает объекты в прямом эфире

Версия этого руководства для блокнота Google Colab находится здесь.

Теперь, когда наша модель отслеживается Fritz AI, пришло время интегрировать ее в наше приложение. Мы будем работать с этим демонстрационным проектом, который вы можете клонировать на GitHub.

Первый шаг - включить вашу модель Core ML в пакет приложений, перетащив ее в Xcode.

Затем мы создадим короткое расширение для регистрации модели в Fritz SDK. Поместите следующий код с уникальным идентификатором модели, который вы получили при загрузке в Fritz AI.

import Fritz
extension MyCustomObjectDetector: SwiftIdentifiedModel {
static let modelIdentifier = “YOUR MODEL ID”
static let packagedModelVersion = 1
}

Обратите внимание, что этот код автоматически создается для вас на странице сведений о модели в веб-приложении Fritz AI (выберите пользовательские модели - ›MyCustomObjectDetector -› Инструкции SDK).

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

lazy var visionModel = FritzVisionObjectModelFast(with: MyCustomObjectDetector().fritz().model as! FritzMLModel)

Наконец, добавьте следующий блок кода в метод viewDidAppear нашего ViewController, чтобы Fritz AI искал последнюю версию нашей модели при каждом открытии приложения:

visionModel.managedModel.updateModelIfNeeded(skipCache: true) {_,_ in }

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

Теперь мы готовы создать и протестировать наше приложение! Поскольку это приложение использует заднюю камеру для потоковой передачи кадров видео в реальном времени на модель, для тестирования лучше всего использовать физическое устройство. Я поискал Google Images по запросу« велосипед и автомобиль » и направил свой телефон на экран, чтобы оценить.

Теперь, когда все работает, вы можете вернуться и добавить больше объектов, больше данных и больше времени на обучение в вашу модель. Когда вы будете удовлетворены своей новой версией модели, вы можете загрузить ее в Fritz AI под тем же идентификатором модели, что и исходная модель, и сделать эту версию активной. Затем t будет отправлен по беспроводной связи в ваше приложение для тестирования.

Заключение

Версия этого руководства для блокнота Google Colab находится здесь.

Подводя итог, в этом руководстве мы:

  1. Использовал записную книжку Google Colab, чтобы загрузить аннотированный набор данных, содержащий велосипеды и автомобили.
  2. Используется Turi Create для обучения пользовательской модели обнаружения объектов, чтобы определять местонахождение и маркировать велосипеды и автомобили на изображениях.
  3. Загрузили нашу обученную модель в Fritz AI.
  4. Использовал Fritz SDK для интеграции обнаружения объектов в приложение iOS, которое определяет местонахождение мотоциклов или автомобилей в видео в реальном времени.

Обнаружение объектов - мощная возможность любого мобильного приложения, использующего камеру. Обучить собственную модель и интегрировать ее в приложение стало еще проще с такими инструментами, как Turi Create и Fritz AI.

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

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

Являясь независимой редакцией, Heartbeat спонсируется и публикуется Fritz AI, платформой машинного обучения, которая помогает разработчикам учить устройства видеть, слышать, ощущать и думать. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, переходите к нашему призыву участников. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Fritz AI Newsletter), присоединяйтесь к нам на » «Slack и подписывайтесь на Fritz AI в Twitter , чтобы узнавать обо всех последних новостях в области мобильного машинного обучения.