Развертывание классификатора изображений, построенного на фреймворке fastai, на героку. Полный код проекта смотрите на github: https://github.com/we-make-ai/detect-eye-diseases

Во всем мире более 1 миллиарда человек страдают нарушением зрения или слепотой из-за невылеченной катаракты (65,2 миллиона), глаукомы (6,9 миллиона) и заболеваний сетчатки (3 миллиона).

В этом сообщении в блоге показано, как использовать фреймворк fast.ai для выявления заболеваний глаз — спасибо Джереми Ховарду за разработку этого замечательного фреймворка — и развернуть модель на такой платформе, как heroku (в качестве веб-приложения на Python).

Классификатор изображений может отнести изображение сетчатки глаза к одному из следующих четырех классов:

  • нормальный
  • катаракта
  • глаукома
  • заболевание сетчатки

Для обучения я использую довольно небольшой набор данных, содержащий около 300 изображений с конкурса kaggle: https://www.kaggle.com/jr2ngb/cataractdataset/version/2.

Хотя набор данных не очень большой, я получаю точность около 75% с помощью трансферного обучения. Просматривая блокнот, я объясню, что я сделал, чтобы показать, как использовать fast.ai для решения проблемы классификатора изображений.

caveat: я не обсуждал результаты с офтальмологом.

В этом сообщении блога основное внимание будет уделено этапам развертывания полностью обученной модели. Если вас больше интересует использование фреймворка fastai, взгляните на файл блокнота jupyter, содержащийся в репозитории проекта на github.

Набор данных

Давайте посмотрим на некоторые данные обучения:

Также покажите матрицу путаницы:

Окончательная модель дает точность около 75%. Неплохо для первой попытки.

Экспорт модели

После обучения модели мы должны экспортировать ее:

learn.export()

Эта функция сохраняет модель в пути к проекту (export.pkl).

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

defaults.device = torch.device(‘cpu’)

Теперь мы можем использовать load_learner(PROJECT_PATH) для перезагрузки модели в нашем веб-приложении.

Создание веб-приложения

Фреймворк starlette — это простой способ развернуть нашу модель в Интернете. Мы можем использовать любой веб-интерфейс для доступа к нашей модели.

Мы должны реализовать файл веб-приложения, который обслуживает нашу модель.

Просто посмотрите мою реализацию на github. Starlette очень прост, просто определите маршрут и реализуйте код для предоставления API-Backend. Для этой простой демонстрации я просто использую статический HTML, но вы также можете реализовать любой внешний клиент javascript.

Я использовал код шаблона из репозитория Джереми: https://github.com/render-examples/fastai-v3/blob/master/app/server.py

Для доступа к классификатору я предоставляю возможность загрузить изображение или вставить URL-адрес изображения.

@app.route(“/upload”, methods=[“POST”])async def upload(request): data = await request.form() bytes = await (data[“file”].read()) return predict_image_from_bytes(bytes) 
@app.route(“/classify-url”, methods=[“GET”])async def classify_url(request): bytes = await get_bytes(request.query_params[“url”]) return predict_image_from_bytes(bytes)

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

Чтобы настроить конвейер развертывания, я интегрировал свой репозиторий github с heroku. Просто создайте новое приложение:

Нажмите Создать и выберите «Создать новое приложение».

Выберите имя для своего приложения и ближайший регион развертывания. Затем нажмите «Создать приложение».

Далее вы переходите в раздел «Подключиться к GitHub». Выберите свою организацию/учетную запись github и репозиторий, который вы хотите связать со своим приложением.

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

Теперь всякий раз, когда вы нажимаете свою ветку master в репозитории github, heroku создает и развертывает новую версию вашего приложения. Вы видите журнал процесса сборки на вкладке «Активность».

Кроме того, вы можете использовать cli-tools heroku. После установки cli-tools (https://devcenter.heroku.com/articles/heroku-cli) просто войдите в свой терминал и введите:

heroku logs -t — app=NAME_OF_YOUR_APP

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

Для развертывания необходимы дополнительные файлы

Добавьте эти файлы в свой репозиторий:

Procfile (без расширения файла!). Этот файл содержит команды при запуске приложения heroku:

heroku ps:scale web=0
heroku ps:scale web=1
web: uvicorn ./app/detect-eye-diseases:app — host=0.0.0.0 — port=${PORT:-5000}

Мне пришлось добавить «heroku ps:scale web=0» и «heroku ps:scale web=1», чтобы деактивировать и активировать динамометр для моего приложения. Я думаю, что это также можно сделать через панель инструментов.

requirement.txt указывает ваши модули Python. Выберите все, что вам нужно.

runtime.txt указывает базовую систему. Я использую питон 3.7.2

.slugignore Heroku допускает макс. размер слага 500MB. Добавьте любые файлы из вашего репозитория, которые вам не нужны при развертывании, чтобы уменьшить размер slugsize. Этот файл работает так же, как файл .gitignore.

Почему я выбрал heroku для развертывания?

Прежде всего: Heroku бесплатен для небольших демо-приложений. Что ж, если вы хотите разместить рабочее приложение, вам потребуется больше мощности, а большая мощность означает «пожалуйста, добавьте еще немного монет…».

Во-вторых, процесс развертывания довольно прост (если вы преодолели препятствия в первый раз…)

Где я могу найти это замечательное приложение?

Просто перейдите по ссылке https://detect-eye-diseases.herokuapp.com/

Если вам нужны медицинские изображения для тестирования: https://www.medicinenet.com/image-collection/retinal_detachment_picture/picture.htm

См. полный исходный код на github: https://github.com/we-make-ai/detect-eye-diseases

Если вы хотите узнать больше о том, как получить максимальную отдачу от глубокого обучения с помощью pytorch и fastai, давайте заглянем в нашу ИИ-академию: https://academy.we-make.ai/courses/.

Кто я?

Я один из соучредителей компании we-make.ai, предоставляющей ai-услуги. Мы команда консультантов по управлению и инженеров-программистов, специализирующихся на искусственном интеллекте (особенно на глубоком обучении).

Вам интересны наши идеи о том, как изменить бизнес с помощью искусственного интеллекта? Взгляните на нашу новую книгу! Доступно через амазон.

https://amzn.to/2TUimWL