СозданиеPokédexв iOS с использованием Core ML

Кто этот покемон? Уверен, вы не раз в жизни слышали этот вопрос. Не так много людей, которые точно знают имя каждого покемона и его эволюцию😏.
На наш взгляд, это хороший повод для создания детектора, который расскажет вам все о покемонах, которых вы пытаетесь отсканировать с помощью камеры вашего телефона. Концепция сканирования взята из мультфильма «Покемоны», где главные герои получают информацию обо всех видах различных покемонов, используя свое специальное сканирующее устройство, называемое Pokedex.
Без лишних слов, давайте посмотрим, как превратить ваше устройство в красивый Pokedex!

Давайте разделим реализацию сканирования на пару шагов, которые нам нужно выполнить:

  1. Определите инструменты, которые следует использовать для создания детектора
  2. Найти большой набор изображений покемонов
  3. Разбить данные на три набора (обучение, проверка, тестирование)
  4. Обучите свою модель
  5. Импорт обученной модели в проект Xcode
  6. Подключите камеру к классификатору
  7. Сделайте модный пользовательский интерфейс, который поразит пользователейумами🤯

Инструменты и данные

Вероятно, первый вопрос, который приходит вам на ум, звучит так: «Как мы собираемся реализовать обнаружение и какие инструменты для этого использовать?». Ответ на этот вопрос — совместить камеру телефона с машинное обучение. Давайте сначала начнем с точного определения того, что такое машинное обучение.

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

Наша задача — создать модель машинного обучения, которая будет получать одно изображение с камеры устройства в качестве входных данных и выдавать одно имя покемона в качестве вычисляемого вывода. Поскольку на выходе модели может быть несколько вариантов, эта модель классификации называется мультиклассовым (полиномиальным) классификатором. Всего покемонов 905 (на момент написания этого блога), но наша модель сможет обнаружить только первое поколение покемонов (первые 150). Чтобы создать модель, которая будет классифицировать за нас, нам нужно заставить его учиться.
Процесс обучения осуществляется путем подачи в модель больших объемов данных, чтобы она могла запоминать различные шаблоны в каждом фрагменте данных. Если вам нужна модель с хорошим процентом верных прогнозов, вам нужно много данных. Машинное обучение по своей природе требует больших объемов данных, и чем больше у вас данных, тем точнее будут прогнозы вашей модели. Для этой цели обработки изображения мы объединили пару наборов данных и получили большой набор данных, содержащий примерно 17000 изображений покемонов. Этот набор необходимо разделить на три разные группы: обучение (70%), проверка (15%) и тестирование (15%).

  • Набор данных для обучения → используется для обучения модели
  • Набор данных проверки → используется для проверки того, насколько хорошо работает модель.
  • Набор тестовых данных → используется для тестирования модели

Разделение данных было выполнено с помощью скрипта Python на изображении ниже:

Коэффициент разделения набора данных может отличаться от того, который мы выбрали. Например, 80% для обучающей выборки, 10% для проверочный набор и 10 % для тестового набора. Оптимальное разделение зависит от конкретного варианта использования, размеров данных, структуры модели и т. д. После успешного обучения модели вы можете использовать 100 % набора данных для повторного обучения модели. На этом шаге вы добавляете больше данных в свою модель, но вам не следует изменять параметры модели после этого шага. Это может быть расценено как мошенничество, потому что ваша модель уже видела эти изображения, и прогнозы модели не могут быть помечены как действительные.

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

Когда дело доходит до реализации машинного обучения на устройствах iOS, Apple предлагает отличную платформу под названием Core ML. Он поддерживает "Vision" для анализа изображений, "Natural Language" для обработки текста, "Speech" для преобразования звука в текст. и Анализ звука для определения звуков в аудио. Эта структура будет использоваться в нашем случае для обучения встроенного многоклассового классификатора. В следующей главе мы объясним, как это сделать.

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

Для обработки изображений мы будем использовать встроенный классификатор изображений. Вы можете создать его, выбрав XCode → Открыть инструмент разработчика → Создать ML.

В следующем меню вы можете выбрать один из нескольких параметров, поставляемых с Core ML. Поскольку целью этого блога является объяснение классификации изображений, мы выберем шаблон Классификация изображений. Нажмите «Далее», и вы окажетесь на экране, как на изображении ниже.

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

Каждая папка содержит несколько изображений одного покемона из первого поколения.

В разделе Параметры вы можете указать количество итераций. Итерация определяется как одна, проходящая через весь обучающий набор, поэтому, установив для нее 35 итераций (также известных как эпохи), модель может просмотреть каждое изображение 35 раз. Значение этого свойства по умолчанию равно 25, но если вы установите большее значение, период обучения соответственно увеличится. Есть и другие варианты, с которыми можно поиграться, но я предлагаю вам потратить некоторое время и прочитать о них, если вы заинтересованы (Размытие, Обрезка, Отражение и тд).

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

На изображении выше вы можете увидеть сравнение наборов обучения и проверки в соответствии с количеством выполненных итераций. Понятно, что модель научилась распознавать разных покемонов, потому что в конце этапа обучения мы имеем точность почти 98%. Точность на этапе проверки составляет около 80%. Это можно улучшить, используя больший набор данных и фильтруя "битые" изображения. Под термином «сломанный» я подразумеваю изображения, внутри которых есть несколько объектов, и которые на самом деле не являются хорошим представлением выбранных покемонов. На изображении ниже вы можете увидеть некоторые изображения из набора обучающих данных, которые считаются «сломанными».

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

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

На данный момент мы обучили нашу модель и можем сохранить ее где-нибудь на нашем компьютере (нажав значок Получить в разделе «Вывод») и, наконец, начать использовать ее на реальных примерах внутри приложения.🤳 🏼

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

Мобильное приложение сканера покемонов

После сбора данных и обучения модели модный пользовательский интерфейс и красивая анимация являются обязательными для каждого профессионала iOS. На самом деле, мы пошли еще дальше и сделали целое приложение для классификации покемонов под названием Dex Scanner. С помощью этого приложения вы можете сфотографировать любого покемона первого поколения с помощью камеры вашего телефона и получить ценную информацию, такую ​​как: здоровье, способности, эволюции, движения и т. д. После успешного сканирования покемоны разблокируются, а ваш настоящий -life Pokedex начинает говорить🔊. За пару секунд, не прочитав ни единого слова, вы получите всю основную информацию о отсканированных покемонах. Разве это не круто?😎 В следующем видео вы можете увидеть, как работает сканер на реальном примере.

Мы все можем согласиться с тем, что возможность сканировать вашего любимого покемона одним нажатием на вашем устройстве довольно крутая и революционная. Вы можете попробовать создать свой собственный Pokedex или проверить наш. Наше приложение запущено и работает в AppStore, и вы можете проверить его по ссылке ниже. Если у вас есть какие-либо вопросы, не стесняйтесь обращаться ко мне в разделе комментариев. Спасибо за ваше время и не стесняйтесь поделиться этой записью в блоге со своими коллегами и друзьями. Удачного кодирования и помните: вы должны поймать их всех😄



Крешимир — ценный член нашей команды iOS.
В Azikus мы проектируем и разрабатываем первоклассные мобильные и веб-приложения.
Мы — группа опытных разработчиков и дизайнеров, которым нравится делиться знаниями, всегда быть в курсе последних и новейших технологий.
Чтобы узнать больше о том, что мы делаем, посетите наш веб-сайт.