В этой статье я покажу вам, как создать собственное iOS-приложение для обнаружения объектов в реальном времени. Благодаря чужим статьям вы можете легко обучить свою собственную модель распознавания объектов с помощью API обнаружения объектов TensorFlow и интегрировать обученную модель в свое приложение для iOS.

Это завершенная версия моего iOS-приложения для распознавания суши в реальном времени:

Мотивация

Когда Google выпустил свой API обнаружения объектов TensorFlow, я был очень взволнован и решил создать что-то с использованием этого API. Я подумал, что приложение iOS (или Android) для обнаружения объектов в реальном времени было бы круто.

Зачем мне распознавать объекты в реальном времени?

Конечно, вы можете разместить удаленный API, который обнаруживает объекты на фотографии. Но иногда вы не хотите ждать задержки, а иногда у вас нет надежного доступа в Интернет. Если вы хотите сразу узнать, какие объекты (и где) перед вами, обнаружение объектов на экране камеры может оказаться полезным.

Хорошо ... но почему суши? 🍣🍣

Потому что все любят суши (это мне сказал мой коллега 😋)! А если серьезно, было бы здорово, если бы приложение позволяло людям мгновенно получать доступ к экспертным знаниям.

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

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

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

Экспорт обученной модели

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

Создайте приложение для iOS, используя обученную модель

Несмотря на то, что обученная модель была не идеальной по точности, я хотел запустить ее на мобильном устройстве и посмотреть, как она работает. Затем мне нужно было выяснить, как интегрировать модель TensorFlow в приложение для iOS.

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

Создавайте библиотеки TensorFlow для iOS

Сначала мне пришлось собрать библиотеки TensorFlow для iOS на моем компьютере. Этот шаг занял несколько часов.

brew install automake libtool
git clone https://github.com/tensorflow/tensorflow && cd tensorflow
git checkout v1.5.0
export ANDROID_TYPES="-D__ANDROID_TYPES_FULL__"
tensorflow/contrib/makefile/build_all_ios.sh

После завершения этапа сборки я изменил tensorflow.xconfig, где настроен путь TensorFlow.

Интегрируйте свою собственную модель

Вы можете увидеть все изменения, которые я внес в моем репозитории GitHub.

Замороженная модель

После удаления существующих моделей из проекта я поместил созданную ранее замороженную модель и добавил ее в свой проект iOS в качестве ресурса с именем op_inference_graph.pb. Вы также можете изменить название модели, изменив код.

Карта ярлыков

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

item {
    id: 1,
    name: 'salmon',
    display_name: 'salmon'
}

Результат

После описанных выше шагов я смог успешно создать приложение для iOS.

Видео:

Скорость:

Прогнозы делаются в среднем за 0,1 секунды.

...
Avg. prediction time: 0.121424
Avg. prediction time: 0.118740
Avg. prediction time: 0.125094
...

Заключение

Надеюсь, вам понравился этот пост, и теперь вы можете создать собственное приложение для обнаружения объектов в реальном времени на iOS. В этом посте я не уделял внимания размеру приложения или скорости прогнозирования. В качестве следующих шагов я хочу попробовать использовать TensorFlow Lite, чтобы уменьшить размер приложения и ускорить выводы. Google объявил, что TensorFlow Lite поддерживает iOS Core ML, что позволяет нам конвертировать модели TensorFlow в Core ML. Я с нетерпением жду возможности сообщить об этих результатах позже.

Спасибо, за то что прочитали эту статью. Пожалуйста, поставьте мне, если вам понравилось.

Обсудите этот пост в Hacker News и Reddit

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

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

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