Обзор соревнований и задач

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

В этой статье мы хотим поделиться с нашей командой решением, занявшим 2-е место в конкурсе Artificial Intelligence Journey Junior 2020 (трек Digital Peter). Этот конкурс был посвящен построчному признанию рукописей Петра Великого. Задача связана с несколькими технологиями AI (компьютерное зрение, NLP и графы знаний). Данные конкурса подготовлены Сбербанком России, Санкт-Петербургским институтом истории (усадьба Н.П. Лихачева) РАН, Федеральным архивным агентством России и Российским государственным архивом древних актов.

Наша команда:

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

Итак, давайте разберем данные. У нас было более 6000 изображений с вырезанными линиями из рукописей. Могут быть отдельные символы, слова или даже очень длинные предложения, поэтому размер изображения для каждого изображения различается. Давайте посмотрим на пример изображения:

Типа плохой почерк, а? Фактически, в этой задаче ИИ может достичь довольно низкого коэффициента ошибок символов (CER). Ярлык для этого образца:
зело многа в гафѣ i непърестано выхо

Кроме того, в обучающей выборке были повернутые по вертикали образцы, которые сильно влияли на ошибку, поэтому ее пришлось исправить. Более того, обучающие данные содержали множество изображений с перечеркнутым текстом.

Обработка данных

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

  • Преобразование изображений в оттенки серого. Совершенно очевидно, что ввод рукописного текста в оттенках серого помогает, поскольку становится легче изучать важные функции из текста.
  • Небольшое вращение изображения. Мы повернули наши образцы в диапазоне от -2 до 2 градусов, чтобы расширить обучающий набор. Это очень помогло.
  • Уменьшение размера изображений. Мы заметили, что после применения поворота некоторые маленькие буквы могут стираться, поэтому мы немного уменьшили масштаб изображения, чтобы убедиться, что все в порядке.

  • Интеллектуальное изменение размера. Реализация этого подхода особенно интересна. Поскольку у нас были изображения разных размеров, образцы, содержащие только одну букву, были сильно растянуты из-за параметров изменения размера (ширина = 1024, высота = 128). Было крайне важно сохранить соотношение сторон изображения. Решением стало объединение исходного изображения с белой областью с разных сторон для преобразования соотношения сторон изображения до 8: 1 (1024: 128).

  • Увеличение количества дополнительных линий. Значительный импульс дала вставка в изображение одной или нескольких тонких черных линий. Мы считаем, что этот метод помог нашей модели лучше распознавать образцы с перечеркнутым текстом.

  • Постобработка. Мы столкнулись с серьезными проблемами при прогнозировании пробелов. Было много случаев, когда модель предсказывала две части одного слова отдельно и два слова объединялись. Из-за этого мы использовали постобработку с огромными словарями. Мы получили их, проанализировав все метки обучения (около 9 тыс. Слов), а затем проанализировали слова из моделей официального языка, предоставленных организаторами соревнований (около 160 тыс. Слов в конечном итоге). Этот твик работает следующим образом:
    Прогноз: мы сделали вам подарок
    После PP: мы сделали вам подарок
  • Вращение вертикальных выборок. Этот метод относится только к нашему случаю, поскольку у нас было много вертикальных выборок в обучающей выборке (также с вертикально написанным текстом). Таким образом, поворот этих изображений на 90 градусов значительно повысил оценку.

Обзор модели

Мы использовали модель seq2seq (извлечение функций с использованием CNN в качестве основы + преобразователь кодировщика-декодера для генерации вывода). Фактически, мы начали с потрясающей базовой линии, созданной Владиславом Крамаренко.
Для позвоночника мы выбрали две основные модели:

  1. ResNeXt101_32x8d
  2. DenseNet161

Также мы использовали AdamW в качестве оптимизатора, ReduceLROnPlateau в качестве планировщика и простой CrossEntropyLoss. Конечно, мы настроили некоторые гиперпараметры, такие как скорость обучения, размер пакета, отсев и т. Д.

Наконец, мы реализовали ансамблевую технику для 3 магистралей. Мы не использовали нашу лучшую модель с интеллектуальным изменением размера для этого ансамбля, так как ее представление не удалось из-за ограничения по времени (более того, мы сохранили наш словарь 9k из-за той же проблемы).
1. DenseNet161 (с последними чистыми образцами и интеллектуальное изменение размера, CER 5.025, Val CER 4.553)
2. ResNeXt101 (с последними чистыми образцами и интеллектуальным изменением размера, CER 5.047, Val CER 4.750)
3. ResNeXt101 (со стандартными образцами и изменением размера по умолчанию, CER 5.286 , Val CER 4.711)
- - - - - - - - - - - - - - - - - - - - - -
Окончательная публичная оценка: CER 4.789, WER 24.068, String Accuracy 45.157

Заключение

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

На этом мы завершаем нашу публикацию о конкурсе AI Journey 2020.

Хлопайте 👏 пару раз, если вам понравилось и вы хотите видеть больше сообщений, связанных с соревнованиями по Data Science!