Статья опубликована в рамках: Научного журнала «Студенческий» № 35(121)
Рубрика журнала: Технические науки
Секция: Технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3
МАШИННОЕ ОБУЧЕНИЕ ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ ПОД ОПЕРАЦИОННОЙ СИСТЕМОЙ IOS
MACHINE LEARNING FOR MOBILE DEVICES RUNNING THE IOS OPERATING SYSTEM
Anton Potapov
student, faculty of information systems and technologies, Russian State Social University,
Russia, Moscow
Dina Eliseeva
Research supervisor, senior lecturer Russian State Social University
Russia, Moscow
АННОТАЦИЯ
В статье проанализированы существующие решения для машинного обучения, оптимальные для использования на мобильной системе, а также описаны подходы к интеграции модели машинного обучения в мобильное приложение.
ABSTRACT
The article analyzes existing solutions for machine learning that are optimal for use on a mobile system, as well as describes approaches to integrating the machine learning model into a mobile application.
Ключевые слова: программное обеспечение, машинное обучение, мобильное приложение, клиент, распознавание.
Keywords: software, machine learning, mobile app, client, speech recognition.
В современном мире всё больше набирает популярность такие технологии как машинное обучение и нейросети, позволяющие распознавать фотографии, объекты на них, звуковые дорожки, создавать подсказки для текста, составлять рекомендации, строить предсказания и многое другое. Это очень активно используемые технологии в IT индустрии, даже на мобильных устройствах интегрируются модели машинного обучения, которые продолжают своё обучение и помогают осуществлять привычные и обыденные действия. Например, в операционной системе iOS машинное обучение используется при поиске фотографий в библиотеке, по ключевым словам, при составлении подсказок для вводимых слов и многое другое. Apple позволяет обучать свои модели машинного обучения и работать с ними, для этого Apple создала библиотеку Core ML и приложение Create ML для интеграции и обучения соответственно.
Модель - это результат применения алгоритма машинного обучения к набору обучающих данных. Модель используется для построения прогнозов на основе новых входных данных. Модели могут выполнять самые разнообразные задачи, которые было бы трудно или непрактично писать в коде. Например, можно обучить модель классифицировать фотографии или обнаруживать определенные объекты внутри фотографии непосредственно из ее пикселей.
Рисунок 1. Create ML
Интерфейс программы Create ML как никогда прост. Она позволяет создавать модели машинного обучения нескольких типов, таких как:
- Image classification
- Object Detection
- Style Transfer
- Action Classification
- Activity Classification
- Sound classification
- Text classification
- Word classification
- Tabular classification
- Tabular Regression
- Recommendation
Вместо CreateML существует множество других способов обучения модели, например, программа MakeML с удобным UI. Данная программа хороша тем, что позволяет выделять области на изображениях и автоматически создаёт json файл с аннотацией для вашего набора данных. Object Detection требует наличие файла аннотации.
Рисунок 2. JSON файл аннотации
Помимо этого, можно использовать такие обучающие библиотеки как TensorFlow, PyTorch, Keras, Caff, Onnx и многие другие. Для преобразования моделей из этих библиотек в формат coreML .mlmodel нужно использовать пакет преобразования Coremltools Python.
Object Detection – модель, позволяющая распознавать объекты на изображении на основе ваших данных и файла аннотации.
Для хорошо работающей модели требуется достаточно большой набор данных, чем больше отличающихся данных, тем лучше. Лучшим способом для поиска набора данных являются сторонние сервисы, такие как:
- Kaggle,
- Google Dataset Search,
- Machine Learning Repository,
- VisualData.
Для использования уже обученной модели в iOS существует библиотека CoreML. CoreML оптимизирует производительность на устройстве, используя процессор, графический процессор и нейронный движок, минимизируя объем памяти и энергопотребление.
CoreML работает с предметно-ориентированными фреймворками, такими как Vision, который нужен нам для анализа изображений.
Vision предоставляет высокоуровневые API для запуска алгоритмов компьютерного зрения на изображениях и видео. Vision может классифицировать изображения с помощью встроенной модели, предоставляемой Apple, или пользовательских моделей CoreML. CoreML построен поверх примитивов более низкого уровня: ускорение с помощью BNNS и Metal Performance Shaders. Другие предметно-ориентированные фреймворки, с которыми работает Core ML - Natural Language для обработки текста и Sound Analysis для идентификации звуков в аудио.
Интеграция в mlmodel в приложение достаточно проста. Xcode автоматически создаёт классы для импортированной одели в проект. Основной сгенерированный класс включает в себя различные функции для предсказания.
Можно выделить несколько этапов стандартного рабочего процесса:
- создание модели Core ML,
- создание одного или нескольких запросов,
- создание и запуск обработчика запросов.
Данные пункты описывают процесс по работе с фреймворком Vision и CoreML для осуществления интеграции mlmodel в проект.
Попробуем создать mlmodel типа Object Detection, для обнаружения поднятого пальца вверх.
Рассмотрим первый пункт «Создание модели CoreML». Для данного типа модели нам понадобится набор данных с различным отображением поднятого пальца вверх. Так как object detection – тип модели, которая обнаруживает объект на изображении, то нужно будет составить JSON файл аннотации для нашего набора данных. Взятый набор данных состоит из 50ти различных изображений.
Рисунок 3. Пример изображений из набора данных
Как говорилось ранее, для каждого изображения нужно отметить область, на которой изображён искомый объект, помочь в это может помочь программа CreateML_Annotations_JSON найденная на сайте GitHub. В результате получается папка из 50 изображений и одного файла аннотации. Теперь можно обратиться к программе CreateML для создания и обучения модели.
Рисунок 4. Create ML с переданными в неё данными
Программа СreateML определила 1 класс, в данном случае thumbUp и 50 элементов, которыми являются изображения. Так же можно передать данные для валидации в момент тренировки модели и данные для её тестирования.
После начала тренировки начинается прохождение по количеству заданных итераций. В данном случае было выбрано 2000 итераций.
Рисунок 5. График тренировки модели.
Согласно данному графику, по окончанию тренировки модели удалось минимизировать потери до 590.
Рисунок 6. Выходные данные CreateML
На выходе можно получить обученную модель, которую легко использовать в проекте Xcode. Для этого нужно импортировать данную модель из программы createML и перенести её в проект Xcode сделав видимым для текущего Bundle.
Интереснее всего было бы проверить данную модель в режиме реального времени, для этого ы можем запустить сессию захвата изображения с камеры и передавать каждый фрейм в нашу модель для поиска совпадений. Данная модель принимает на вход изображение разрешением 416x416, соответственно нужно предусмотреть это перед передачей изображение на поиск совпадений. Делегат класса AVCaptureVideoDataOutput может получает каждый кадр в формате класса CMSampleBuffer, который можно преобразовать в привычный UIImage.
На этом этапе можно описать оставшиеся два пункта «Создание одного или нескольких запросов» и «Создание и запуск обработчика запросов». Запрос к модели осуществляется через класс VNCoreMLRequest фреймворка Vision. Для инициализации, данный класс требует экземпляр модели CoreML представленный классом VNCoreMLModel. Его инициализация происходит на основе любого, автоматически сгенерированного класса для .mlmodel. Так же VNCoreMLRequest принимает блок замыканий, параметрами которого является запрос, который содержит результат обработки, если он есть и опциональную ошибку. Результат запроса содержит массив лейблов, которые удалось обнаружить, а также процент «уверенности» в соответствие. Для визуального примера можно рассмотреть рисунок 7.
Рисунок 7. Вывод консоли и экран МП
На данном рисунке представлен процесс поиска объекта «палец вверх» в режиме реального времени, по описанному ранее алгоритму. Как можно заметить, удалось обнаружить объект «ThumbUp», данный объект и есть палец вверх, коэффициент «Уверенности» в среднем равен 50%, что является неплохим показателем для небольшого количества вводных данных.
Таким образом, можно сказать, что CreateML является удобным и быстрым способом для создания своей обученной модели и её применения, но не позволяет более гибко настраивать компоненты, чего не скажешь про TensorFlow, Keras и т.п. Для достижения наилучшего результата стоит создавать наибольший набор данных, на сколько это возможно.
Список литературы:
- Apple, Машинное обучение CoreML [электронный ресурс] — Режим доступа. — URL: https://developer.apple.com/machine-learning/core-ml/ (дата обращения 31.09.2020)
- Создание приложения IOS с CoreML с нуля — 2017. [электронный ресурс] — Режим доступа. — URL: https://www.machinelearningmastery.ru/creating-an-ios-app-with-core-ml-from-scratch-b9e13e8af9cb/ (дата обращения 1.10.2020)
Оставить комментарий