Это мой диплом, мальчики. Йо, йо, йо, как дела, ребята. Это моя первая статья об обнаружении и распознавании рукописных слов с помощью нейронных сетей. Надеюсь, вам понравится…
Итак, как я узнаю рукописные слова? Прежде всего, вам нужно выбрать набор данных для обучения вашей нейронной сети.
Набор данных
Я выбрал базу данных рукописного ввода IAM, которую вы можете найти здесь. База данных рукописного ввода IAM содержит формы рукописного английского текста, которые можно использовать для обучения и тестирования распознавателей рукописного текста, а также для проведения экспериментов по идентификации и проверке автора.
Распознавание слов
Итак, давайте начнем с обзора нейронной сети. Это будет сеть crnn. Я использовал в качестве базовой сверточной модели resnet34, которая довольно хорошо работает в ImageNet и не очень потребляет cuda. Для RNN я выбираю сеть AWT-LSTM. как простой lstm, но с множеством различных регуляризаций. Я настоятельно рекомендую вам посмотреть потрясающие руководства по быстрому ИИ об этой сети. Они достигли результатов SOTA в наборе данных imdb. В качестве общего обзора отсева я использовал:
- Отсев на seq_len. Если у нас есть ввод x :( bs, seq_len, vocab_size), мы используем отсев для обнуления некоторых случайных выходных данных по измерению seq_len. Означает, что некоторые выходные данные для каждого временного шага от 1 до seq_len получают ноль.
- Регурализация активации. Это всего лишь штраф 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. Извините за мой плохой английский в дальнейших статьях, я обещаю, что исправлю его.