Ended 3 years ago
557 participants
2862 submissions

Hidden
2 этап. Задача 1. Сегментирование строк

Задача сегментации рукописного текста на фото

Задача

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

Предсказанием для входного изображения является бинарная маска размера исходного изображения, в которой 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

Вебинар о том, как собрать докер, чтобы он работал, от призера профиля прошлого года Виталия Гребенника

Доступные ресурсы:

  • 8 ядер CPU
  • 48Gb RAM
  • Видеокарта NVidia Tesla V100

Ограничения:

  • 5Gb на архив с решением
  • 15 минут на работу решения

Структура данных

В контейнер помещается папка 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

Вам доступно базовое решение от разработчиков задачи: baseline.ipynb

Вебинар с разбором базового решения

Для сегментации рукописного текста в бейзлайне используется фреймворк Detectron2 и архитектура Mask-RCNN. Для запуска бейзлайна скачайте данные для обучения и положите их в папку data. Должна получиться такая структура:

  • baseline.ipynb
  • data
    • train
      • images
      • annotations.json
      • binary.npz

Cookies help us deliver our services. By using our services, you agree to our use of cookies.