Как стать автором
Обновить
34
-1
Станислав Калинин @befuddle

Computer Vision Engineer

Отправить сообщение

Как написать пайплайн для чтения рукописного текста

Время на прочтение14 мин
Количество просмотров4.2K

Привет, Хабр! В этой статье мы, команда Sber AI, расскажем о пайплайне для распознавания текста и о нюансах обучения HTR‑моделей, а также поделимся датасетом школьных обезличенных тетрадей. Это почти 2 тысячи страниц с полной разметкой полигонов слов (более 300 тысяч текстов). Если нужно, то датасет есть в открытом доступе на hugging face.

Мы в Sber AI в рамках одного из наших направлений занимаемся распознаванием рукописного текста. В частности наша команда написала пайплайн для более удобного и быстрого проведения экспериментов под разные датасеты. Он состоит из двух модулей — (1) детекция слов и (2) чтение слов. К этому ещё можно добавить этап извлечения связного текста — объединение слов в предложения и страницы. Сложность HTR задачи (handwritten text recognition) в том, что рукопись каждого человека уникальна, на неё влияет множество факторов, включая возраст и настроение. Модель чтения печатного текста можно ускорить добавлением синтетики на основе печати простыми шрифтами на фонах. А вот с HTR‑моделью это не даст такой сильный прирост, так что лучше воспользоваться синтетической рукопиской от GAN.

Отметим, что интересные задачи возникают и в модели для детекции рукописного текста. В таких данных текст, как правило, «прыгает» по странице, каждое слово под своим углом. Некоторые слова накладываются друг на друга, а строка может изгибаться, чтобы она поместилась на одной странице. Есть нюансы и при объединении двух моделей, например, нюансы даунгрейда качества чтения текста при объединении с детекцией (ошибки двух моделей мешают друг другу).

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии3

Обучение рукописной OCR на синте от GAN'ов

Время на прочтение13 мин
Количество просмотров6.3K

Модели распознавания печатного текста (например, с фотографий документов) дают довольно высокие результаты. Это происходит за счёт ограниченного набора шрифтов, цель которых – быть максимально понятными человеку, а также благодаря генерации простой синтетики в виде печати разнообразными шрифтами текста на каком-нибудь фоне.

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

Тут же возникает трудность и с разметкой (которой особенно мало на русском языке). Например, при работе с рукописями Петра I пришлось задействовать историков. Конечно, это особый случай документов начала XVIII века, но даже в простых датасетах важно иметь дублирующую разметку нескольких человек для исправления ошибок, которые нередко совершают разметчики при чтении рукописного текста.

Мы в Sber AI заинтересовались идеей генерации синтетических рукописных изображений с помощью GAN, и в этой статье предлагаю рассмотреть несколько таких моделей. А также попробуем сгенерировать синтетику, используя одну из архитектур, и посмотрим, как сильно дополнительные данные улучшают качество OCR-модели (Optical Character Recognition).

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии3

Сверточная сеть на python. Часть 3. Применение модели

Время на прочтение7 мин
Количество просмотров33K

Это заключительная часть статей о сверточных сетях. Перед прочтением рекомендую ознакомиться с первой и второй частями, в которых рассматриваются слои сети и принципы их работы, а также формулы, которые отвечают за обучение всей модели. Сегодня мы рассмотрим особенности и трудности, с которыми можно столкнуться при тестировании вручную написанной на python сверточной сети, применим написанную сеть к датасету MNIST и сравним полученные результаты с библиотекой pytorch.
Читать дальше →
Всего голосов 62: ↑61 и ↓1+60
Комментарии8

Сверточная сеть на python. Часть 2. Вывод формул для обучения модели

Время на прочтение5 мин
Количество просмотров30K

В прошлой статье мы рассмотрели концептуально все слои и функции, из которых будет состоять будущая модель. Сегодня мы выведем формулы, которые будут отвечать за обучение этой модели. Слои будем разбирать в обратном порядке — начиная с функции потерь и заканчивая сверточным слоем. Если возникнут трудности с пониманием формул, рекомендую ознакомиться с подробным объяснением (на картинках) метода обратного распространения ошибки, и также вспомнить о правиле дифференцирования сложной функции.
Читать дальше →
Всего голосов 67: ↑66 и ↓1+65
Комментарии0

Сверточная сеть на python. Часть 1. Определение основных параметров модели

Время на прочтение8 мин
Количество просмотров71K

Несмотря на то, что можно найти не одну статью, объясняющую принцип метода обратного распространения ошибки в сверточных сетях (раз, два, три и даже дающих “интуитивное” понимание — четыре), мне, тем не менее, никак не удавалось полностью понять эту тему. Кажется, что авторы недостаточно внимания уделяют обычным примерам либо же опускают какие-то хорошо понятные им, но не очевидные другим особенности, и весь материал по этой причине становится неподъемным. Мне хотелось разложить все по полочкам для самого себя и в итоге конспекты вылились в статью. Я постарался исключить все недостатки существующих объяснений и надеюсь, что эта статья ни у кого не вызовет вопросов или недопониманий. И, может, следующий новичок, который, также как и я, захочет во всем разобраться, потратит уже меньше времени.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии10

Информация

В рейтинге
Не участвует
Работает в
Зарегистрирован
Активность