Задача сегментации рукописного текста на фото
Вам предстоит работать с фотографиями разлинованных тетрадных листов с рукописным текстом. Ваша задача - разработать алгоритм, который сможет определить, относится ли пиксель изображения к тексту или нет.
Предсказанием для входного изображения является бинарная маска размера исходного изображения, в которой 1 - означает, что данный пиксель относится к тексту, 0 - к фону. Таким образом в датасете всего один класс - text.
В проверяющую систему необходимо отправить код алгоритма, запакованный в ZIP-архив. Решения запускаются в изолированном окружении при помощи Docker. Время и ресурсы во время тестирования ограничены.
В корне архива обязательно должен быть файл metadata.json
со структурой:
{
"image": "<docker image>",
"entry_point": "<entry point or sh script>"
}
Например:
{
"image": "maloyan/ai-nto-task1:0.0.1",
"entry_point": "python run.py"
}
Здесь image
– поле с названием docker-образа, в котором будет запускаться решение, entrypoint
– команда, при помощи которой запускается скрипт инференса. Решение запускается в Docker контейнере. Вы можете воспользоваться готовым образом "maloyan/ai-nto-task1:0.0.1"
. Dockerfile и requirements.txt для сборки данного образа. В нем предустановлены CUDA 10.1 и актуальные версии Python библиотек для запуска бейзлайна. При желании вы можете использовать свой образ, выложив его на https://hub.docker.com.
Вебинар о том, как собрать докер, чтобы он работал, от призера профиля прошлого года Виталия Гребенника
Доступные ресурсы:
Ограничения:
В контейнер помещается папка images
, в которой находятся изображения, на которых необходимо сделать предсказания. Модель должна сформировать файл предсказания, например prediction.npz
.
Пути к данным для (полный путь к папке images
) и файл, в котором необходимо сохранить результат (путь куда нужно сохранить файл формата .npz
) передаются как первые два аргумента при запуске вашего решения. Их можно считать с помощью sys.argv[1:]
.
Посмотрите архив sample_submit.zip, в котором содержатся примеры загружаемого решения.
В загружаемом архиве должны быть следующие файлы:
metadata.json
- обязательный файл для каждого решения; в нём должны быть указаны пути к образу и скрипту выполнения моделиrun.py
- основной скрипт для инференса моделиmodel_final.pth
- веса модели, которые подгружаются во время исполнения скрипта run.pyДля оценки качества будет использоваться метрика F1-score:
$$F1 = 2 \cdot \frac{Recall \cdot Precision}{Recall + Precision}$$
F1-score вычисляется на основе значений Precision (точности) и Recall (полноты), которые, в свою очередь, зависят от набора статистик по прогнозам – true positive (TP, истинно-положительный результат), false positive (FP, ложно-положительный результат) и false negative (FN, ложно-отрицательный результат):
$$Precision= \frac{\text{True Positive}}{\text{True Positive + False Positive}}$$
$$Recall = \frac{\text{True Positive}}{\text{True Positive + False Negative}}$$
Сначала F1-score считается для каждого изображения из тестового набора. Для этого попиксельно сравниваются две маски - верная и предсказанная. Затем F1-score усредняются по всем изображениям. Так что, в каком то смысле мы считаем mean F1-score.
Вам доступно базовое решение от разработчиков задачи: baseline.ipynb
Вебинар с разбором базового решения
Для сегментации рукописного текста в бейзлайне используется фреймворк Detectron2 и архитектура Mask-RCNN. Для запуска бейзлайна скачайте данные для обучения и положите их в папку data. Должна получиться такая структура:
Cookies help us deliver our services. By using our services, you agree to our use of cookies.