После выступления на конференции WWDC17 мы с моим другом Aleph были в восторге от нового фреймворка Core ML. Затем мы начали экспериментировать и решили поделиться тем, что мы здесь сделали.

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

Core ML поддерживает множество моделей машинного обучения (нейронные сети, ансамбли деревьев, вспомогательные векторные машины и обобщенные линейные модели). Модель должна быть в формате модели Core ML (модели с расширением файла .mlmodel) 1.

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

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

Скачивание модели

В нашем примере мы будем использовать модель, которая уже доступна в формате. mlmodel. Однако, если ваша модель обучена в другой среде, такой как Keras, например, вы можете использовать Core ML Tools, чтобы преобразовать ее в соответствующий формат. 2
Для нашего руководства, Вы можете скачать модель VGG здесь.

После загрузки файла `VGG16.mlmodel` вы можете добавить его в свой проект, просто поместив его рядом с вашими файлами.

Настройка приложения

Приложение, которое мы создадим в нашем примере, довольно простое, поэтому каждый может следовать ему. Если вы хотите увидеть что-то менее простое, посмотрите это репо от Алеф.

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

Когда пользователь нажимает кнопку «+», мы представляем лист действий с параметрами «Библиотека» и «Камера». После выбора одного из них открывается контроллер выбора изображений.

Методы делегата средства выбора изображения действительно просты. В `didCancel` мы просто вызываем` dismiss () `. В `didFinishWithMediaType` мы получаем изображение из словаря` info` и передаем его нашему методу `classify (image: UIImage)`.

Предварительная обработка

Во-первых, нам нужно масштабировать изображение, поскольку наша модель получает на входе размер 224x224. После изменения размера нам нужно создать CVPixelBuffer из данных изображения. CVPixelBuffer - это тип, который наша модель ожидает в качестве аргумента.

Часть «Core ML»

Как только у нас есть данные изображения в CVPixelBuffer, мы можем передать их нашей модели, и код не может быть проще.

Для этого мы создадим нашу модель `VGG16` в` viewDidLoad () `и в нашем методе` classify () `, все, что нам нужно сделать, это вызвать` prediction () `для нашей модели. Метод вернет `VGG16Output`, из которого вы можете взять свойство` classLabel`, которое является строкой.

Наконец-то

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

Если у вас есть предложения, дайте нам знать.

Кроме того, если вы хотите поделиться своими планами по использованию Core ML в своем приложении, мы будем рады услышать ваши идеи!

1 См. Интеграция базовой модели машинного обучения в ваше приложение

2 Скоро будет сообщение об этом! WWDC сейчас сумасшедший, поэтому, когда мы найдем время поиграть с keras и Core ML вместе, мы обязательно поделимся результатами здесь.