Ранее в этом месяце на 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 для подачи на вход модели видеопотока с камеры в реальном времени!