Задача сегментации рукописного текста на фото
Вам предстоит работать с фотографиями разлинованных тетрадных листов с рукописным текстом. Ваша задача - разработать алгоритм, который сможет определить, относится ли пиксель изображения к тексту или нет.
Предсказанием для входного изображения является бинарная маска размера исходного изображения, в которой 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. Должна получиться такая структура:
Our website uses cookies, including web analytics services. By using the website, you consent to the processing of personal data using cookies. You can find out more about the processing of personal data in the Privacy policy