Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Переход на эффективную архитектуру (EfficientDet) #31

Open
3 tasks
SpaceD0ge opened this issue Dec 24, 2020 · 4 comments
Open
3 tasks

Comments

@SpaceD0ge
Copy link
Collaborator

SpaceD0ge commented Dec 24, 2020

Текущая реализация не позволяет отойти от использования серверов с GPU. Достаточно высокое время обработки изображения на стандартных CPU серверах AWS/GCP может стать ещё выше после внедрения языковых моделей. Одно из решений этой проблемы - реализация более эффективной архитектуры object detector-a. Подобный процесс можно разделить на следующие шаги:

  • Переход на EfficientDet

EfficientDet в 2-8 раз быстрее RetinaNet на CPU. Для его внедрения нужно:

  • Модифицировать основу https://github.com/rwightman/efficientdet-pytorch

  • Обучить модель для русского языка

  • Обновление инструментов проверки скорости и качества работы

Скрипты validate_retinanet не подходят для другой архитектуры.

  • Перевод модели в ONNX/Torchscript

Перевод в ONNX (опционально - с квантизацией) может положительно сказаться на эффективности

@IlyaOvodov
Copy link
Owner

Я пробовал переводить в Torchscript, но только на GPU. Улучшения производительности не заметил. А вот на CPU надо будет попробовать.

@SpaceD0ge
Copy link
Collaborator Author

Torchscript нужен скорее для избавления от ненужных зависимостей, с ним легче тестировать разные архитектуры и запускать несколько flask-серверов на одной машине. Выигрыш в производительности должен быть именно от перехода на ONNX, но судя по rwightman/efficientdet-pytorch#32, всё, что касается post-processing, перевести не удастся, да и основную модель придется редактировать.

@SpaceD0ge
Copy link
Collaborator Author

EfficientDet обучен и работает неплохо. Теперь возникает проблема внедрения полученного кода сюда. В моей версии используется Pytorch Lightning вместо Ignite, данные переводятся в файлы аннотаций формата COCO. Можно, конечно, раскидать файлы с кодом по model/data_utils, но это всё равно не будет работать без модификаций веб-сервера. Пока предлагаю мой код оставить в https://github.com/SpaceD0ge/Braille-OCR (чуть позже опубликую код обучения effdet), и как я там дойду до рабочего прототипа flask-сервера, слить всё вместе здесь. Или даже здесь оставить только ссылки на модели со всем frontend-ом, а код обучения вынести куда-то ещё.
OK? Или всё же делать PR?
efficientdet_d5, 384crop, 12bs, 0.01lr, 129epoch, 0.7 min visibility выдаёт такие боксы (почти все символы совпадают)
example

@IlyaOvodov
Copy link
Owner

Привет! Очень хорошая новость. Давай пока в твоем репо, потом подумаем как сливать в одно.
Свой репозиторий я сейчас буду сильно перерабатывать в части отделения UI на flask от расчетной части. Так что пока туда лучше ничего не лить. А вот посмотреть, чем интерфейс к использованной тобой реализации EffecientDet отличается от использованного мной RetinaNet, хочется посмотреть. Так что жду появления в твоем репо конфигурации для обучения и тестирования EffecientDet (пока, как я понимаю, ее там нет).
Кстати, интересно было бы сравнить результаты тестов для того же разделения train-test, которое использовал я (оно есть в https://github.com/IlyaOvodov/AngelinaDataset).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants