Когда я впервые начал изучать машинное обучение и глубокое обучение, мне потребовалась целая вечность, чтобы научиться создавать классификатор изображений, я прошел все курсы машинного обучения, изучил pandas, numpy и sklearn, а затем я понял, что, используя это, я все еще не могу создать классификатор изображений, поэтому мне пришлось изучить Deep Learning, CNN и структуру keras, все это было просто для создания обычного классификатора изображений CNN.

Но теперь, в 2019 году, чтобы создать классификатор изображений, все, что вам нужно изучить, - это Fastai, с менее чем 6 строками кода вы можете создать готовую к развертыванию модель классификации изображений, которая превосходит большинство результатов бумаги SOTA.

Fastai - первая библиотека глубокого обучения, которая предоставляет единый согласованный интерфейс для всех наиболее часто используемых приложений глубокого обучения для визуализации, текста, табличных данных, временных рядов и совместной фильтрации.

До сих пор все хорошо! Теперь мы можем использовать fastai для создания классификатора изображений.

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

У рендера есть ответ.

Render - это унифицированная платформа для создания и запуска всех ваших приложений и веб-сайтов с бесплатным SSL, глобальным CDN, частными сетями и автоматическим развертыванием из Git.

Все, что вам нужно, это сохранить вашу модель после обучения и добавить ее в шаблон, предоставленный Render (можно клонировать из github), и ваша модель будет развернута.

пример: https://catdogfastai.onrender.com/

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

Давайте начнем!

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

Теперь давайте откроем нашу записную книжку jupyter или наш скрипт на Python (независимо от того, что плавает ваша лодка).

Первым делом перед началом кодирования вам необходимо установить PyTorch и fastai,

Вы можете установить их, используя:

if you are using anaconda:
conda install -c pytorch pytorch-cpu torchvision
conda install -c fastai fastaiorpip install 
or
pip install http://download.pytorch.org/whl/cpu/torch-1.0.0-cp36-cp36m-linux_x86_64.whl
pip install fastai

Теперь, после установки необходимых библиотек, приступим.

Сначала нам нужно импортировать фастай.

from fastai.vision import *

Если вы инженер-программист, вы можете заметить, что мы импортировали * (все) из fastai.vision, что противоречит передовым методам разработки программного обеспечения.
Это совершенно верно, но в области науки о данных, когда мы При создании моделей самое важное - как можно быстрее взаимодействовать с объектами, а когда дело доходит до запуска модели в производство, вы можете импортировать все, что вам нужно, из материнской библиотеки.

Прохладный! теперь нам нужно импортировать данные.

path="/images/"
np.random.seed(42)
data = ImageDataBunch.from_folder(path+'.', train=path+'.',valid_pct=0.2,ds_tfms=get_transforms(), size=224,num_workers=4).normalize(imagenet_stats)

мы использовали класс ImageDataBunch для импорта изображений.

Это одна из самых сильных функций fastai, этот класс может автоматически обрабатывать множество вещей без какой-либо настройки.

valid_pct относится к проценту данных проверки во время обучения при применении перекрестной проверки.

мы присвоили размер 244 всем изображениям и 4 рабочим процессорам.

Функция нормализации в конце предназначена для нормализации всех изображений, поскольку наша модель глубокого обучения может быть хорошо адаптирована, если среднее значение всех изображений равно 0, а стандартное отклонение равно 1. (нет необходимости углубляться в это).

Давайте теперь проверим наши классы:

data.classes

Out [5]: [«кошки», «собаки»]

Прекрасно, теперь наши данные импортированы, классы назначены (кошки и собаки).

Давайте проверим наш объект dataBunch.

data.show_batch(rows=3, figsize=(7, 8))

Наши данные выглядят так, как будто они были импортированы правильно.

Теперь давайте создадим нашу модель.
В этом примере мы будем использовать Resnet34, который является остаточной NN.

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

ResNet удалось превзойти многие результаты Paper's SOTA по классификации изображений, так что он достаточно хорош, чтобы использовать его в нашей задаче.

Если вы не понимаете, что такое ResNet, вам не о чем беспокоиться.

from fastai.metrics import error_rate
learn = cnn_learner(data, models.resnet34, metrics=error_rate,model_dir="/tmp/model/")

таким образом мы создаем нашего ученика, cnn_learner, мы назначили error_rate в качестве метрики для расчета точности.

и мы добавили models.resnet34 в качестве архитектуры, предоставляемой fastai.

Если вы впервые используете эту архитектуру, она будет загружена при запуске этого фрагмента кода.

Хорошо, теперь мы создали нашу модель.

Давай тренируемся !!

defaults.device = torch.device('cuda') # makes sure the gpu is used
learn.fit_one_cycle(4)

Коэффициент ошибок последней эпохи составлял 0,15, что означает, что нашей модели удалось правильно классифицировать 85% изображений, отметив, что некоторые изображения в наборе данных являются черными изображениями или случайными зашумленными изображениями.

Круто, вообще-то меня эта точность устраивает, если нет, добавь эпох.

Теперь давайте сохраним модель, чтобы мы могли позже развернуть ее в Интернете.

learn.save("model")

Итак, мы прошли обучение и сохранили нашу модель.

Давайте развернем его сейчас.

Сначала вы перейдете по адресу: https://github.com/render-examples/fastai-v3
и создадите новый репозиторий из этого.

Теперь вам необходимо создать бесплатную учетную запись в Render: https://render.com/register

Загрузите модель, которую вы где-то сохранили, например: DropBox

Теперь вернитесь в свой репозиторий на github, ›server.py

Измените URL-адрес файла на свой URL-адрес, а имя файла - на имя файла.

Также не забудьте изменить классы на [«кошка», «собака»] или другие классы, которые у вас есть.

Сохраните свой код в github (вам даже не нужно клонировать его на своем ПК)

Теперь заходим в Render Dashboard Services.

Щелкните New Web Service.

Он попросит вас авторизовать github, после чего появится список всех ваших репозиториев.

нажмите на тот, который вы клонировали ранее.

Добавьте имя для своего приложения, проигнорируйте платежную часть и нажмите «Создать веб-службу».

Вам нужно немного подождать, пока приложение будет построено и развернуто, затем вы можете проверить его по ссылке: yourappname.onrender.com

Вот небольшая демонстрация:

Заключение

Мы создали классификатор изображений с помощью fastai и развернули его с помощью Render.
И это было быстро.

Если у вас есть какие-либо вопросы, рекомендации или критические замечания, со мной можно связаться через Twitter: @ loulyadam

Вы можете найти исходный код здесь: https://github.com/AdamLouly/CatDogRender

Вы можете найти набор данных о кошках и собаках здесь, по этой ССЫЛКЕ.