Sparkly

Ссылка на бот:

https://t.me/laundrysymbolsbot

Ссылка на презентацию:

https://www.figma.com/proto/gEeOugZUeR0OSuutsSRROu/Moms-helper_bot?page-id=0%3A1&node-id=1%3A2&viewport=539%2C-494%2C0.27&scaling=contain

Аннотация

Суть проекта заключается в распознавании символов по уходу за одеждой. Реализация проекта делится на две основные части: распознавание символов по фотографии с помощью Detectron2 и в режиме реального времени с помощью YOLO5.

Сбор данных и препроцессинг

Для нашего проекта мы собрали ~1200 фотографий лейблов и на каждый из них нанесли bounding boxes. Всего у нас получилось 35 классов. На самом деле, значков существует чуть больше, но некоторые очень редко встречаются или относятся к определенному производителю одежды. Так же, мы столкнулись с тем, что символы не имеют единого требования к оформлению. Например, для азиатских регионов некоторые символы сильно отличаются и на них нанесены иероглифы. Такие знаки мы не размечали. Далее для наших фотографий мы сделали аугментацию и, в итоге, у нас получился датасет в ~ 2700 фотографий.

Обучение для изображений

Для задачи object detection мы использовали предобученную на датасете COCO модель faster_rcnn_X_101_32x8d_FPN_3x. Мы выбрали именно ее, так как она имеет наибольшое колчиство параметров и по метрикам качества boxAP имеет наивысшее значение среди предобученных моделей из "зоопарка моделей" Detectron2. На сайте paperwithcode можно увидеть, что данная модель на самом деле является лучшей. Это было выяснено и эмпирических путем: мы экспереминтировали с разными моделями, пробовали Fast RCNN и RetinaNet, но их результаты были хуже. Все обучение проходило в Google Colab на их видеокартах. Оценивали модели мы по метрике AP50.

Обучение для Real-Time Detection

Далее мы решили испытать нашу модель в режиме реального времени. Для начала мы точно так же использовали Faster-RCNN из Detectrion'a 2, но возникли некоторые трудности: из-за большого количества параметров и нехватки наших мощностей real-time работал очень медленно, мы решили применить одноэтапный метод детекции объектов - архитектуру YOLO5. 17 часов мы обучали самую маленькую модель YOLO, далее мы использовали скрипт с сайта YOLO для режима реального времени и подгрузили туда модель. Оценивали модель мы с помощью метрики mAP, наш результат 73%.

Имплементация в telegram бота

Для реализации проекта мы использовали сервис Telegram. Делали мы то с помощью библиотеки aiogram — ассинхронного фреймворка для Telegram Bot API основанный на asyncio и aiohttp.

Структура бота

bot.py

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

src/predict.py

После того, как пользователь загрузил фотографию в бот, она попадает в этот модуль. Здесь она обрабатывается с помощью нашей обученной модели с весами, которые мы сохранили ранее из Google Colab. Здесь распознаются значки и на их границы наносятся bounding boxes. Каждый символ относится к определенному классу, которые пронумерованы. Далее этот номер класса соотносится со словарем. Несмотря на то, что размеченные символы на bounding boxes могут повторяться из-за разных географических регионов, описания к классам никогда не повторяются.

src/static_text.py

Здесь находятся тексты для нашего бота: начиная с приветственного сообщения и до описания классов в виде словаря.

./configs

В этой папке находятся конфиги для запуска Detectron2 и настройки логирования.

requirements.txt

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