Ранее в этом месяце на WWDC 2017 Apple представила массу новых функций, включая фреймворки и API.

Одно особенно привлекло мое внимание: Core ML. Core ML позволяет интегрировать обученные модели машинного обучения в ваше приложение.

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

«Обученная модель - это результат применения алгоритма машинного обучения к набору обучающих данных». - Документация Apple

В настоящее время в разделе специального веб-сайта Apple доступен небольшой набор моделей CoreML.

Но что, если мы захотим использовать или создать другую модель? Что ж, посмотрим как!

Реальный пример

В сеансе 703 (Введение в Core ML) демонстрационное приложение было классификатором цветов, предсказывающим тип цветка на основе изображения цветка.

Я сразу думаю о PlantNet. Это французское приложение (#baguette #camembert), которое выполняет примерно ту же работу. Однако для PlantNet необходимо подключение к Интернету. Приложение отправляет фотографию цветка на свой сервер, и вы получаете список цветов с вероятностью их совпадения.

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

Вот где приходит Core ML и решает эту проблему: модель встраивается в устройство, поэтому для ее работы больше ничего не нужно.

Что ж, давайте попробуем создать собственный классификатор цветов!

Worflow

Традиционный рабочий процесс создания модели с нуля можно представить следующим образом:

Окончательная модель содержится в файле .mlmodel. Это новый открытый формат файла, который описывает слои в вашей модели, входные и выходные данные, метки классов и любую предварительную обработку, которая должна быть выполнена с данными. Он также содержит все изученные параметры (веса и смещения).

Затем мы можем просто загрузить. mlmodel в Xcode и начать делать прогнозы!

Чтобы упростить задачу, предположим, что у нас уже есть Источник модели, обученный на данных. В интернете тонна этой модели. Мы можем сосредоточиться на части преобразования между Model Source и MLModel.

Поддерживаемый формат модели

В настоящее время для преобразования поддерживаются только следующие форматы:

  • Керас
  • Кафе
  • scikit-learn
  • XGBoost
  • libsvm

Полный (и актуальный) список можно найти здесь:



Преобразование

Чтобы преобразовать нашу обученную модель в формат .mlmodel, Apple выпустила инструмент с открытым исходным кодом coremltools.



И документация:



Последняя часть сеанса 710 показывает, как его использовать и преобразовывать базовую модель. Я использовал его как базу, и я призываю вас посмотреть его.

Установка

В настоящее время для coremltools требуется Python 2.7. Поскольку использование Python в macOS является настоящей головной болью, нам нужно найти небольшое обходное решение, чтобы иметь возможность использовать coremltools. В противном случае вы можете столкнуться с бессмысленными ошибками (как и я), такими как:

Неустранимая ошибка Python: PyThreadState_Get: нет текущего потока

Я предполагаю, что у вас уже установлен pip . Давайте подробно рассмотрим следующие команды:

  • Строка 1: устанавливает virtualenv, что позволяет нам создавать отдельные среды, в нашем случае среду Python.
  • Строка 2: создайте среду Python и каталог python27 в текущей папке.
  • Строка 3: активирует среду

Теперь вы можете проверить текущую версию Python:

Чтобы отключить эту среду, просто используйте:

Теперь в нашей временной среде Python используйте это для установки coremltools:

И вы сделали! Первая часть достигнута 🎉

Подготовка

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

Для конвертации нам потребуются:

  • обученная .caffemodel
  • .prototxt, описывающий модель .caffemodel

Я решил использовать модель, основанную на наборе данных цветов категории Оксфорд 102.

.caffemodel (~ 230 Мб) можно скачать здесь, а .prototxt - здесь.

Также вам понадобится список этикеток, название цветка, которые можно скачать здесь.

Давайте напишем сценарий, чтобы это преобразовать!

Сценарии

Давайте подробно рассмотрим следующие команды:

  • Строка 3: определение модели Caffe, которую мы хотели бы преобразовать, используя. prototxt.
  • Строка 7: мы используем функцию, предоставляемую coremltools, используя модель, определенную выше; мы также даем названия цветов; наконец, имя входа, здесь изображение.
  • Строка 14–21: некоторая настройка для отображения описания в Xcode при чтении файла .mlmodel.
  • Строка 23: сохраните созданную модель в файл.

Примечание. В модели Caffe принято использовать имя входа «данные», но проверьте файл .prototxt и найдите строку input. Если имена не совпадают, конвертер выдаст ошибку.

Сохраните это в файл .py и запустите с помощью:

Эта часть может занять некоторое время (несколько минут), в зависимости от вашего компьютера. Возьмите кофе или чашку чая и охладитесь 💅

использование

У вас должен быть файл FlowerClassifier.mlmodel! Работающее автономное приложение PlantNet! Чтобы попробовать это, я сделал образец приложения, и результаты говорят сами за себя:

Это пример приложения и скрипт для преобразования модели доступны в репозитории Github! Перетащите свою FlowerClassifier.mlmodel, и все в порядке!



Ограничения

Core ML отлично подходит для быстрого запуска модели в ваших приложениях. Однако есть некоторые ограничения из-за простоты:

  • поддерживается только контролируемое машинное обучение; без присмотра или подкрепления
  • без тренировок на устройстве
  • инструменты преобразования Core ML ограничены; например, TensorFlow не поддерживается; но вы можете написать свой собственный скрипт конвертации
  • Core ML скрывает свою логику; работает ли он на ЦП или ГП, о которых вы не знаете; и вы не можете заставить его работать, например, на графическом процессоре

Куда пойти в следующий раз ?

Теперь у вас есть модель, вы можете ею пользоваться! Например, с помощью новой платформы Vision для подачи на вход модели видеопотока с камеры в реальном времени!