/digital_peter_aij2020

Материалы соревнования AI Journey 2020, посвященного распознаванию рукописей Петра Великого

Primary LanguageJupyter NotebookMIT LicenseMIT

AI Journey 2020 Digital Peter

The English version of this document is here

Соревнование по распознаванию древних текстов, написанных рукой Петра Великого.

Описание задачи и данных

Участникам предлагается построчно распознавать рукописный текст Петра I.

Развернутое описание задачи (с погружением в проблематику) можно прочитать в desc/detailed_description_of_the_task_ru.pdf

Train выборку можно скачать тут.

Внутри находятся 2 папки: images и words. В папке images лежат jpg-файлы с вырезанными строками из документов Петра Великого, в папке words - txt-файлы (транскрибированные версии jpg-файлов). Маппинг осуществляется по названию.

Например,

оригинал (1_1_10.jpg):

его перевод (1_1_10.txt):

                                  зело многа в гафѣ i непърестано выхо

Выборка была подготовлена совместно с рабочей группой, состоящей из научных сотрудников СПбИИ РАН - специалистов по истории Петровской эпохи, а также палеографии и археографии. Большую помощь оказали Росархив и РГАДА, которые предоставили цифровые копии автографов.

Бейзлайн

Ноутбук с бейзлайном задачи: baseline.ipynb

Для распознавания текста (в бейзлайне) используется следующая архитектура:

Описание метрик

В лидерборде будут учитываться следующие метрики качества распознавания (на тестовой выборке)

  • CER - Character Error Rate

Здесь - это расстояние Левенштейна, посчитанное для токенов-символов (включая пробелы), - длина строки в символах.

  • WER - Word Error Rate

Здесь - это расстояние Левенштейна, посчитанное для токенов-слов, - длина строки в словах.

  • Sentence Accuracy - отношение количества полностью совпавших строк к количеству строк в выборке.

В этой формуле используется скобка Айверсона:

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

Про метрики дополнительно можно прочитать тут.

Методику подсчета метрик можно изучить подробнее в скрипте eval/evaluate.py. Он принимает на вход два параметра - eval/pred_dir и eval/true_dir. В папке eval/true_dir должны находиться txt-файлы с истинным переводом строк (структура как в папке words), в папке eval/pred_dir - txt-файлы, содержащие распознанные (моделью) строки. Маппинг опять же осуществляется по названию, поэтому списки названий файлов в папках eval/true_dir и eval/pred_dir должны полностью совпадать!

Качество можно посчитать следующей командой (вызванной из папки eval):

python evaluate.py pred_dir true_dir

Результат отображается в следующем виде:

Ground truth -> Recognized
[ERR:3] "Это соревнование посвящено" -> "Эт срвнование посвящено"
[ERR:3] "распознаванию строк из рукописей" -> "распознаваниюстр ок из рукписей"
[ERR:2] "Петра I" -> "Птра 1"
[OK] "Удачи!" -> "Удачи!"
Character error rate: 11.267606%
Word error rate: 70.000000%
String accuracy: 25.000000%

Главная метрика, по которой сортируется лидерборд, - CER, %, (меньше - лучше). В случае совпадения CER у двух или более участников, сортировка для них будет вестись по WER, %, (меньше - лучше). Если и CER, и WER совпадают, - смотрим на Sentence Accuracy, %, (больше - лучше). Следующий показатель - время работы модели на тестовой выборке, Time, sec., (меньше - лучше). Если все метрики сопадают, тогда первым будет решение, загруженное раньше по времени (если и тут все совпадает, то сортируем по алфавиту по названиям команд).

Последняя версия модели (см. baseline.ipynb) имеет следующие значения метрик качества, посчитанных на public-части тестовой выборки:

CER = 10.526%
WER = 44.432%
String Accuracy = 21.662%
Time = 60 sec

Формат решения

В качестве решений принимается алгоритм (код + необходимые файлы) и описание точки запуска в виде одного архива. В корне архива с решением должен лежать файл metadata.json со структурой:

{
   "image": "<docker image>",
   "entrypoint": "<entry point or sh script>"
}

Например:

{
   "image": "odsai/python-gpu",
   "entrypoint": "python predict.py"
}

Данные следует читать из папки /data, предсказания писать в /output. Для каждой картинки из папки /data вида <image_name>.jpg нужно записать в /output <image_name>.txt с распознанным текстом.

Решение запускается в Docker контейнере. Вы можете воспользоваться готовым образом https://hub.docker.com/r/odsai/python-gpu. В нем предустановлены CUDA 10.1, CUDNN 7.6 и актуальные версии Python библиотек. При желании вы можете использовать свой образ, выложив его на https://hub.docker.com.

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

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

Ограниченя:

  • 5Gb памяти для рабочей директории
  • 5Gb на архив с решением
  • 10 минут на работу решения

Пример можно посмотреть в submit_example