Это мой диплом, мальчики. Йо, йо, йо, как дела, ребята. Это моя первая статья об обнаружении и распознавании рукописных слов с помощью нейронных сетей. Надеюсь, вам понравится…

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

Набор данных

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

Распознавание слов

Итак, давайте начнем с обзора нейронной сети. Это будет сеть crnn. Я использовал в качестве базовой сверточной модели resnet34, которая довольно хорошо работает в ImageNet и не очень потребляет cuda. ​​Для RNN я выбираю сеть AWT-LSTM. как простой lstm, но с множеством различных регуляризаций. Я настоятельно рекомендую вам посмотреть потрясающие руководства по быстрому ИИ об этой сети. Они достигли результатов SOTA в наборе данных imdb. В качестве общего обзора отсева я использовал:

  1. Отсев на seq_len. Если у нас есть ввод x :( bs, seq_len, vocab_size), мы используем отсев для обнуления некоторых случайных выходных данных по измерению seq_len. Означает, что некоторые выходные данные для каждого временного шага от 1 до seq_len получают ноль.
  2. Регурализация активации. Это всего лишь штраф l2 на выходе нашего awt-lstm. Для вывода hid_states (bs,seq_len,hid_size) мы регуляризуем так (полная форма регуляризации): l2(hid_states[:,1:,:]-hid_states [:,:-1,:)+l2(hid_states).

После обучения с ctc-loss с использованием batch_size 16 и константой learning_rate = 0,0001 мы получаем точность 0,81. Это означает, что наш алгоритм правильно распознает 81% слов при проверке.

Обнаружение слов

Для определения слов я использовал уже обученный детектор opencv east. Вот отличное руководство по его использованию.

Результаты

Поэтому сначала хочу представить простой пример со словами, написанными краской.

Надеюсь, вы узнали, что это Beatles :). Так что мы можем заметить, что не все слова распознаются идеально. Вот результаты самых сложных случаев для моего crnn

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

Некоторые слова

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

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

P.S. Извините за мой плохой английский в дальнейших статьях, я обещаю, что исправлю его.