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

Содержание

· Сбор данных
· От данных к загрузчикам данных
· Расширение данных
· Обучение модели
· Превращение модели в онлайн-приложение < br /> · Развертывание приложения с помощью MyBinder
· Дальнейшая работа
· Справочник

Сбор данных

По многим типам проектов вы можете найти данные на Kaggle или на любом другом веб-сайте. Проект, который мы завершим в этом блоге, - это классификатор обуви. Он будет классифицировать по четырем типам обуви - Nike Air Jordan, Adidas Yeezy, Gucci и Balenciaga. Нам просто нужен способ их найти и загрузить. Я буду использовать библиотеку очистки изображений в Python, чтобы удалять изображения из Интернета. Вы можете установить библиотеку из терминала anaconda через pip, просто набрав pip install -q jmd_imagescraper.

Приведенный выше код сначала создаст каталог test_images в текущем рабочем каталоге, и он загрузит 100 изображений для каждого поискового запроса, который мы упомянули в списке, и сохранит их в подкаталоге, который будет назван после нашего поиска. срок.

От данных к загрузчикам данных

Я буду использовать загрузчики данных fastai, чтобы предоставить данные для модели. Вот что нам нужно для создания загрузчика данных для только что загруженного набора данных.

Давайте рассмотрим каждый аргумент по очереди. Во-первых, я предоставляю кортеж, определяющий независимую и зависимую переменную. В этом случае наша независимая переменная - это набор изображений, а зависимая переменная - это категории. Кроме того, у нас нет отдельного набора для проверки / тестирования, поэтому я случайным образом разбиваю наши изображения на набор для обучения и тестирования, вызывая splitter. Для маркировки изображений я передаю get_y = parent_label, который просто получает имя папки, в которой находится изображение. Мы помещаем изображения нашей обуви в папки, соответствующие различным типам обуви, так что это даст нам нужный ярлык. В конце концов, я уменьшаю размер каждого изображения до 128 пикселей. Теперь наш загрузчик данных настроен, и мне просто нужно указать путь к нашим данным.

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

Увеличение данных

Поскольку все изображения теперь имеют одинаковый размер (128 пикселей), я буду увеличивать изображения, например переворачивать их, изменять контрастность и яркость и т. Д. Все это можно легко сделать, вызвав функцию aug_transform функция. Чтобы сообщить Fastai, что мы должны использовать это преобразование для пакета изображений, я буду использовать параметр batch_tfms.

Обучение модели

Мы все готовы, наконец, обучить модель, поскольку мы собрали все данные, пометили их и вызвали загрузчики данных fastai для их загрузки. Теперь я создам обучаемого и настрою ResNet для нашего обучения.

Я запустил точно настроенную модель для четырех эпох в Google Colab, и это заняло менее 5 секунд для каждой эпохи, поскольку у нас не так много данных (100 изображений для каждого класса). Но, несмотря на это, наша модель работала очень хорошо и развенчала миф о том, что нейронные сети требуют большого количества данных для хорошей работы. Вам просто нужны хорошо размеченные данные, а не больше данных.

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

Теперь посмотрим, какие ошибки допускает наша модель. Чтобы визуализировать это, я создал матрицу путаницы. Строки представляют все различные типы обуви в нашем наборе данных, а столбцы представляют изображения, предсказанные нашей моделью как adidas yeezy, balenciaga, gucci и nike air jordan. Диагонали матрицы нечеткости показывают изображения, которые были правильно классифицированы. С помощью цветового кодирования цель состоит в том, чтобы белый цвет был везде, кроме диагоналей. Наш классификатор обуви не допускает много ошибок. Мы можем пойти еще на один шаг вперед и проверить верхние n потерь, то есть библиотека fastai позволяет нам видеть изображения, на которых потери были выше.

На изображении выше вы можете увидеть 5 лучших изображений обуви, на которых потери были самыми высокими. Верхняя левая обувь относится к классу adidas yeezy, но наша модель предсказывала, что это будет balenciaga с вероятностью 0,76, и, следовательно, потеря на этом изображении составила 3,89.

Превращение модели в онлайн-приложение

Теперь мы собираемся превратить эту модель в работающее онлайн-приложение. Первым шагом будет сохранение архитектуры модели и ее обученных параметров. Сделать это очень просто, код ниже делает именно это.

Метод экспорта сохраняет как архитектуру, так и обученные параметры модели. Перед развертыванием модели я сначала покажу вам, как создать подобное приложение в блокноте jupyter. Для этого я буду использовать ipywidgets.

Приведенный выше код преобразует нашу модель в простое приложение. Результатом будет прогнозируемый класс обуви и вероятность того же.

Изображение выше - результат функции, которую мы создали для преобразования нашей модели в простое приложение. Нажав кнопку загрузки, вам нужно будет загрузить изображение, и после нажатия кнопки классификации мы получим три результата - изображение, которое вы загрузили, прогнозируемый класс обуви для него и вероятность того же. Мы сделали 95% работы. Теперь нам просто нужно сохранить наш код в репозитории Github и использовать mybinder для преобразования записной книжки jupyter в приложение.

Развертывание приложения с помощью MyBinder

Чтобы опубликовать наше веб-приложение в Binder, нам просто нужно выполнить следующие действия:

  1. Загрузите записную книжку в репозиторий Github.
  2. Вставьте URL-адрес этого репозитория в поле URL-адреса Binder.
  3. Измените раскрывающийся список файлов на URL.
  4. В поле «URL для открытия» введите voila / render / notebook_name.ipynb (замените notebook_name на имя вашей записной книжки jupyter).
  5. Нажмите «Запуск» и скопируйте предоставленный URL.

Создание сайта займет около 5 минут, после чего браузер перейдет к вашему новому веб-приложению. Вот и все, развернуть модель глубокого обучения в виде веб-приложения очень просто.

Будущая работа

В этом блоге мы узнали, как развернуть его в биндере без какой-либо настройки. В следующем блоге мы увидим, как развернуть любую модель глубокого обучения на Heroku и как использовать инструменты HTML, чтобы сделать веб-приложение более привлекательным.

Ссылка

  1. Https://course.fast.ai/
  2. Https://mybinder.org/

Все подробности и код можно найти в моем репозитории на github -



Свяжитесь со мной в Linkedin -