Machine Learning, Нейронные сети

Сверточная нейронная сеть и ее интеграция в iOS (часть 2)

Время прочтения: 5 мин.

В предыдущей части мы подготовили данные, а также рассмотрели средства реализации и архитектуру нейросети (ссылка). Начнем следующий этап разработки с препроцессинга данных.

Модернизация

Библиотека Keras предоставляется широкий набор инструментов для препроцессинга данных, особенно для изображений. Метод ImageDataGenerator (Рис.7) позволяет расширять набор данных искусственными преобразованиями.

Рис.7. – Генератор данных

Первое число rotation_range – случайное число, для ротации изображений внутри генератора. Width_shift_range — показывает насколько можно уменьшить значения пикселей по ширине. Height_shift_range – коэффициент на который будет умножаться каждый пиксель для сжатия по высоте. Shear_range – интенсивность сдвига, угол сдвига в направлении против часовой стрелки в градусах. Zoom_range – диапазон для случайного масштабирования. Horizontal_flip – случайное отображение картинки по горизонтали. Vertical_flip – случайное отображение изображения по вертикали. Fill_mode – точки за пределами входных данных заполняются в соответствии с заданным режимом. Data_format – формат данных изображения. Таким образом, нейросеть будет обладать лучшим обобщением, ведь исходный датасет в основном обладает чистыми пикселями, цифры находятся по центру. На реальных фотографиях возможны другие ситуации, когда жест находится в углу или смазан. Процесс обучения переписывается с учетом новых данных.

На Рис.8 график Test, начал убывать, поэтому обучение было остановлено. Если бы для остановки не использовалась метрика val_acc, алгоритм бы продолжил свою работу, в результате получив переобученную нейронную сеть.

По сравнению с прошлыми результатами уменьшилось значение функции потерь и, следовательно, увеличилась степень уверенности алгоритма в предсказаниях. Точность увеличилась чуть более, чем на 2% (Рис.8, Рис. 9).

Рис.8 – График обучения на новых данных
Рис.9. – Метрики модели

Конвертация

Для интеграции в iOS приложение потребуется получить нейросеть определённого формата. Это позволяет сделать фреймворк CoreML. Он позволяет запускать обученные модели машинного обучения в формате. mlmodel в приложениях. Для работы с изображениями существует фреймворк Vision работает на основе Core ML и помогает с отслеживанием и распознаванием лиц, текста, объектов, штрих-кодов. Также доступно определение горизонта и получение матрицы для выравнивания изображения.

Для конвертации модели из формата .h5 в. mlmodel используется библиотека в Python Coremltools. Данная библиотека поддерживает преобразование в формат mlmodel.

Для корректного вывода модели, указывается словарь, который будет соответствовать 10 цифрам. В следующей строчке объявляется, Model_check.h5 — имя модели, далее указывается, что на входной слой нейросети будет принимать изображения. Поле image_scale будет приводить стандартизировать матрицы пикселей. (Рис. 10)

Рис.10. – Конвертация

Мобильное приложение. Работа с подготовленной моделью.

В качестве основы для проекта используется пример с официального сайта разработчиков Apple. Среда разработки XCode последней версии, язык программирования – Swift пятой версии.

Рассматриваются файлы (Рис.11), содержащие код в проекте. AppDelegate.swift запускает стартовое окно приложения и инициализирует все файлы, подключенные к проекту.

Рис.11. – Структура приложения

Добавляется в проект подготовленная модель после конвертации sign_lang.mlmodel (Рис. 12).

Рис.12. – Модель в XCode

Строчка Type сообщает о том, что Machine Learning Model, добавленная в проект, действительно является классифицирующей нейронной сетью. Для предсказания модели на вход будут подаваться черно-белые картинки с элементами серого цвета размерности 64х64, к этому формату программа приводит их с помощью Vision. В качестве выхода будет получаться словарь, в котором парами будут строка с лейблом, который был указан при конвертации, и уверенность (вероятность) с которой нейроеть его предсказывает.

Основные файлы приложения.

Рассматривается основной файл — Image Classification View Controller.swift

ImageView — окно для отображения текущего изображения на экране телефона, отправленного на вход модели.

CameraButton – кнопка, при нажатии на которую будет вызвано контекстное меню предлагающее сделать пользователю следующие действия: Take Photo, Choose Photo. Первое действие откроет камеру смартфона, в которой будет доступен режим фотографии. (Рис. 13)

При выборе альтернативного действия Choose Photo будет открыта внутренняя галерея. Нажатие на кнопку Use Photo вернет пользователя на главный экран, где нейросеть проанализирует изображения и даст свое предсказание, это показано на Рис. 14.

После слова Classification видим вывод двух наиболее вероятных исходов, которые предсказала модель. Число в скобках — это уверенность нейросети в том, что ее предсказание верное. Из Рис.14 видно, что алгоритм с уверенностью 0.99 говорит, что показана цифра 0. И это совпадает с действительностью. Ни один алгоритм машинного обучения не способен дать 100% точность на реальных данных, и построенная нейронная сеть не исключение, и возможны ложные предсказания, что можно увидеть на Рис. 15.

Рис.13. – Работа с камерой
Рис.14. – Предсказание нейросети
Рис.15. – Ложное
предсказание

В итоге мы спроектировали архитектуру сверточной нейронной сети для распознавания цифр языка жестов. Было выполнено обучение нейронной сети, и, в результате расширения обучающих данных и подбора гиперпараметров, была получена точность 81% на тестовом наборе данных. Алгоритм успешно конвертирован для портирования на смартфон. Разработано мобильное приложение, в которое была интегрирована нейронная сеть.

Советуем почитать