Русский
Русский
English
Статистика
Реклама

Lstm

Рекурсивные нейронные сети пример генерации музыки

23.06.2020 22:21:05 | Автор: admin


Сегодня попробуем создать простую музыку при помощи сетей LSTM.


Целю статьи есть указание возможностей сетей на практике, будет интересно какой результат получится у читателя, сможете оставить ссылки на свой варианты в комментариях.
Минимальные навыки, нужные читателю, чтобы мочь сделать собственный вариант:


  • Python3
  • BASH
  • jupyter-notebook.

Не буду одобрять комментарии, в которых есть суть только:


  • причинить досаду автору, примерно про опечатки(я не являюсь носителем русского языка).
  • нериторические замечания и комментарии.
  • все что не касается сути стати.

Входные данные


Мы используем входные данные в формате ABC
Примерные строки:


[V: S] (BA) !p!G2 |z AGA|(FG) A2|w: ple -na, Do-mi-nus te -cum,[V: A] F2       E2|z FEC|(DE) F2 |w: ple-na, Do-mi-nus te -cum,[V: T] (dc)     c2|z ccA|(Ac) c2 |w: ple -na, Do-mi-nus te -cum,[V: B] (B,,F,) C,2|z F,C,F,|(D,C,) F,2 |w: ple -na, Do-mi-nus te -cum,

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


Чтение файла


Для вашего удобства, используйте jupyter notebook .


import numpy as npimport matplotlib.pyplot as pltimport tensorflow as tf

with open('my_song.abc', 'r') as f:    text = f.read()

Прослушивание песни


Чтобы прослушать песню, мы должны установить в нашу среду несколько дополнительных инструментов


!apt-get install -y -qq abcmidi timidity

Сохраняем выбранную песню в файл:


#этот шаг зависит от входных данных, тут нужен гибкий подходsong = text.split('\n\n')with open('my_song.abc', "w") as f:    f.write(song)

Мы конвертируем в файл mid, а затем wav.


!abc2midi "my_song.abc" -o "my_song.mid" && timidity "my_song.mid" -Ow "my_song.wav"

Результат


from IPython.display import AudioAudio('my_song.wav')#ссылка#https://github.com/fuwiak/Habr/blob/master/my_song.wav

Время на LSTM


Результат my_song.wav оказывается неплохим, сейчас попробуем сделать свой вариант при помощи LSTM.


Создание обучающей выборки


#уникальные символы, найденные в песнях.vocab = set(text)# словарь: ключ=символ, значение=индекс, указав символ, мы получаем его индексchar_to_index = {char_ :ind for ind, char_  in enumerate (vocab)}ind_to_char = np.array(vocab)text_as_int = np.array([char_to_index[c] for c in text])#'X:1\nT:dfkjds ' ----- > [49 22 13  0 45 22 26 67 60 79 56 69 59]

Генерация последовательности


Создаются обучающие последовательности


  • input: строка из 100 символов
  • target: строка из 100 символов, но сдвинутая на 1.

Нашей модели будет поручено научиться прогнозировать следующий знак на основе 100 предыдущих. Это будет модель RNN версии "many to many", которая на самом деле будет прогнозировать один следующий символ, но в процессе обучения ошибка будет учитываться по всей последовательности (100 предсказаний).


seq_length = 100step = 10sequences = np.array([text_as_int[i:i+seq_length+1] for i in range(0, len(text_as_int)-seq_length-1,step)])input_text = np.array([seq[:-1] for seq in sequences])target_text = np.array([seq[1:] for seq in sequences])

LSTM


from tensorflow.keras.models import Modelfrom tensorflow.keras.layers import Input, LSTM, Dense, Embeddingvocab_size = len(vocab)#new valueembedding_dim = 256*2rnn_units = 1024*2x = Input(shape=(seq_length,))e = Embedding(vocab_size, embedding_dim)(x)l = LSTM(rnn_units, return_sequences=True)(e)d = Dense(vocab_size, activation='softmax')(l)model = Model(inputs=x, outputs=d)model.summary()

Обучение сети


from tensorflow.keras.optimizers import Adammodel.compile(optimizer=Adam(), loss='sparse_categorical_crossentropy')EP=5BS = 128hist = model.fit(input_text, target_text, batch_size=BS, epochs=EP)

Создание музыки из модели


def generate_text(model, start_string, generation_length=100):  input_eval = np.array([char_to_index[s] for s in start_string])  x = np.zeros((1, seq_length))  x[0,-len(input_eval):] = input_eval[:]  text_generated = []  model.reset_states()  for i in range(generation_length):      predictions = model.predict(x)[0,-1]       predictions = predictions.astype(np.float64)      predictions = predictions/np.sum(predictions)          predicted_id = np.argmax(np.random.multinomial(1, predictions))      x[0,:-1] = x[0,1:]      x[0,-1] = predicted_id      text_generated.append([predicted_id])   return (start_string + ''.join(text_generated))

new_song = generate_text(model, "X:", generation_length=500)

Наш результат


with open('new_song.abc', "w") as f:    f.write(new_song)

!abc2midi "new_song.abc" -o "new_song.mid" && timidity "new_song.mid" -Ow "new_song.wav"

Audio('new_song.wav')#https://github.com/fuwiak/Habr/blob/master/new_song.wav

Итоги


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


Ссылки:


Подробнее..

Упадок RNN и LSTM сетей

04.06.2021 18:05:38 | Автор: admin

Автор: Eugenio Culurciello, оригинальное название: The fall of RNN / LSTM

Перевод: Давыдов А.Н.

Ссылка на оригинал

Мы полюбили RNN (рекуррентные нейронные сети), LSTM (Long-short term memory), и все их варианты. А теперь пора от них отказаться!

В 2014 году LSTM и RNN, были воскрешены. Но мы были молоды и неопытны. В течении нескольких лет они был способом решения таких задач как: последовательное обучение, перевод последовательностей (seq2seq). Так же они позволили добиться потрясающих результатов в понимании речи и переводе ее в текст. Эти сети поспособствовали восхождению таких голосовых помощников как Сири, Кортана, Гугл и Алекса. Не забудем и машинный перевод, который позволил нам переводить документы на разные языки. Или нейросетевой машинный перевод, позволяющий переводить изображения в текст, текст в изображения, делать субтитры для видео и т.д.

Затем, в последующие годы (2015-16) появились ResNet и Attention (Внимание). Тогда начало приходить понимание, что LSTM была умной техникой обойти, а не решить задачу. Так же Attention показал, что MLP сеть (Multi-Layer Perceptron Neural Networks -многослойные персептроны) может быть заменена усредняющими сетями, управляемыми вектором контекста. (более подробно об этом дальше).

Прошло всего 2 года, и сегодня мы можем однозначно сказать:

Завязывайте с RNN и LSTM, они не так хороши!

Можете не принимать наши слова на веру, просто посмотрите, что сети на основе Attention используют такие компании как Гугл, Фэйсбук, Сэйлфорс и это только некоторые из них. Все эти компании заменили RNN сети и их варианты на сети основанные на Attention и это только начало. Дни RNN сочтены во всех приложениях, так как они требуют больше ресурсов для обучения и работы, чем модели основанные на Attention.

Но почему?

Вспомним, что RNN, LSTM и их производные используют в основном последовательную обработку во времени. Обратите внимание на горизонтальную стрелку на диаграмме ниже:

Рис.1 Последовательность процессов в RNN сетяхРис.1 Последовательность процессов в RNN сетях

Она означает, что долгосрочная информация должна последовательно пройти через все ячейки, прежде чем попасть в текущую обрабатываемую ячейку. Это означает, что ее можно легко повредить, многократно умножая на малые числа близкие к 0, что является причиной исчезновения градиента.

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

Рис.2 Последовательность процессов в LSTM Рис.2 Последовательность процессов в LSTM

У нас есть последовательный путь от старых ячеек к текущей. Фактически, путь теперь еще более сложен, так как оброс добавочными и забытыми ветвями. Несомненно, LSTM, GRU и их производные могут оперировать намного более долгосрочной информацией! Но они могут помнить последовательности из сотен (100), а не из тысяч или десятков тысяч.

И еще одна проблема RNN сетей заключается в том, что они очень требовательны к оборудованию. Требуют много ресурсов, как для обучения (это значит мы не можем обучить их быстро), так и для запуска. Для моделей основанных на RNN в облаке требуется много ресурсов. Учитывая, что потребность в преобразовании речи в текст быстро растет, а облако не масштабируется, нам потребуется производить обработку прямо на Amazon Echo!

Что нам делать?

На сентябрь 2018г я бы настойчиво рекомендовал бы рассмотреть этот подход - Постоянное внимание (Pervasive Attention)

Это 2D свёрточная нейронная сеть, которая может превзойти как модели RNN/LSTM, так и модели на основе Attention, такие как Transformer

Метод Transformer был отличным решением с 2017 года до статьи, ссылка на которую дана выше. Как уже говорилось ранее, он дает большие преимущества по ряду параметров.

В качестве альтернативы: если последовательной обработки следует избегать, мы можем найти блоки данных, которые смотрят вперед или, лучше сказать оглядываются назад, поскольку большую часть времени мы имеем дело с причинно-следственными данными в реальном времени (когда мы знаем прошлое и хотим повлиять на будущие решения) Другой случай, когда нам надо перевести предложение или проанализировать видео, у нас есть все данные и мы можем размышлять над ними больше времени. Такие блоки, смотрящие вперед/назад являются модулями нейронного внимания.

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

Рис.3 Иерархический нейронный кодировщик вниманиРис.3 Иерархический нейронный кодировщик внимани

Лучший способ заглянуть в прошлое - использовать модули внимания, чтобы суммировать все прошлые закодированные вектора в контекстный вектор Ct

Обратите внимание, что здесь есть иерархия модулей внимания, очень похожая на иерархию нейронных сетей. Это также похоже на временную свёрточную сеть (TCN), описанную в примечании 3 ниже.

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

Это способ заглянуть глубже в прошлое, чтобы эффективнее влиять на будущее.

Но что еще более важно, взгляните на длину пути, необходимого на распространение вектора данных, поданного на вход сети: в иерархических сетях, он пропорционален логарифму N (log(N)), где N количество уровней иерархии. Это контрастирует с шагами Т, которые должна выполнить RNN, где Т максимальная длина запоминаемой последовательности. Как мы видимо T многократно больше N (T>>N)

Последовательности легче запомнить, если данные проходят через 3-4 слоя нежели чем через 100!

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

Но как на счет объема памяти? Вышеупомянутая архитектура сохраняет все предыдущие данные в памяти, в отличии от нейронной машины Тьюринга. Это, кажется, не очень эффективным: представьте, что мы будем хранить данные о каждом кадре в видео в большинстве случаев вектор данных не меняется от кадра к кадру, поэтому мы будем хранить слишком много данных об одном и том же. Что мы можем сделать, так это добавить еще один модуль, чтобы предотвратить сохранение коррелированных данных. Например, не запоминать вектора слишком похожие на ранее запомненные. Но это реально геморрой, лучше всего позволить нейросети самой решить, какие вектора запоминать, а какие нет.

В итоге забудьте о RNN и вариантах. Используйте Attention. Внимание, - действительно всё, что вам нужно!

Дополнительная информация

О тренировке RNN\LSTM: RNN и LSTM сложно обучить, потому что они требуют вычислений с ограничением полосы пропускания памяти, что является худшим кошмаром для разработчика оборудования и в конечном итоге ограничивает применимость решений на основе таких нейронных сетей. Короче говоря, LSTM требует 4 линейных слоя (слой MLP) на ячейку для работы на каждом временном шаге последовательности. Для вычисления линейных слоев требуется большая пропускная способность памяти, фактически они не могут часто использовать много вычислительных единиц, потому что системе не хватает пропускной способности памяти для питания вычислительных единиц. И легко добавить больше вычислительных блоков, но сложно добавить больше пропускной способности памяти (обратите внимание на достаточное количество строк на микросхеме, длинные провода от процессора к памяти и т. Д.). В результате RNN / LSTM и их варианты не подходят для аппаратного ускорения, и мы говорили об этой проблеме раньше здесь и здесь. Решение будет вычисляться в устройствах памяти, подобных тем, над которыми мы работаем в FWDNXT.

Примечание

1: Иерархическое нейронное внимание похоже на идеи в WaveNet. Но вместо свёрточной нейронной сети мы используем иерархические модули внимания. Также: иерархическое нейронное внимание может быть двунаправленным.

2: RNN и LSTM - это проблемы с ограниченной пропускной способностью памяти (подробности см. Здесь). Блоку (ам) обработки требуется столько пропускной способности памяти, сколько операций / с они могут обеспечить, что делает невозможным их полное использование! Внешней пропускной способности никогда не будет достаточно, и способ немного решить проблему - использовать внутренние быстрые кеши с высокой пропускной способностью. Наилучший способ - использовать методы, которые не требуют перемещения большого количества параметров из памяти взад и вперед или которые могут быть повторно использованы для многократных вычислений на каждый передаваемый байт (высокая арифметическая интенсивность).

3: вот статья, в которой CNN сравнивается с RNN. Временная сверточная сеть (TCN) превосходит канонические рекуррентные сети, такие как LSTM, в разнообразном диапазоне задач и наборов данных, демонстрируя при этом более эффективную память.

4: С этой темой связан тот факт, что мы мало знаем о том, как наш человеческий мозг учится и запоминает последовательности. Мы часто изучаем и запоминаем длинные последовательности в более мелких сегментах, например, телефонный номер 858 534 22 30, запоминаемый в виде четырех сегментов. Поведенческие эксперименты предполагают, что люди и некоторые животные используют эту стратегию разбиения когнитивных или поведенческих последовательностей на фрагменты для решения широкого круга задач - эти фрагменты напоминают мне небольшие свёрточные сети или сети, подобные Вниманию (Attention), на более мелких последовательностях, которые затем иерархически связаны друг с другом, как в иерархическом кодировщике нейронного внимания и временной сверточной сети (TCN). Дополнительные исследования заставляют меня думать, что рабочая память похожа на сети RNN, которые используют рекуррентные реальные нейронные сети, и их емкость очень мала. С другой стороны, кора и гиппокамп дают нам возможность запоминать действительно длинные последовательности шагов (например, где я припарковал свою машину в аэропорту 5 дней назад), предполагая, что может быть задействовано больше параллельных путей для запоминания длинных последовательностей, где механизм внимания блокирует важные фрагменты и форсирует прыжки в частях последовательности, которые не имеют отношения к конечной цели или задаче.

5: Приведенные выше свидетельства показывают, что мы не читаем последовательно, фактически мы интерпретируем символы, слова и предложения как группу. Основанный на внимании или свёрточный модуль воспринимает последовательность и проецирует представление в нашем сознании. Мы не ошиблись бы в этом, если бы обрабатывали эту информацию последовательно! Остановимся и заметим нестыковки!

6: Недавняя статья показывающая обучение без использования методов Attention или Transformer, показала удивительную эффективность в обучении без учителя. VGG или NLP? Эта работа также является продолжением новаторской работы Джереми и Себастьяна, где LSTM со специальными процедурами обучения смог научиться без учителя предсказывать следующее слово в последовательности текста, а затем также мог передавать эти знания новым задачам. Здесь приводится сравнение эффективности LSTM и Transformer (на основе внимания), которое показывает, что внимание обычно побеждает, и что обычный LSTM превосходит Transformer на наборе данных - MRPC

7: Здесь вы можете найти отличное объяснение архитектуры Transformer и потока данных!

Подробнее..
Категории: Python , Lstm , Tensorflow , Attention , Rnn

Эксперимент в распознавании рукописных текстов на кириллице

16.12.2020 14:07:22 | Автор: admin

Введение

Распознавание рукописного текста (англ. Handwritten Text Recognition, HTR) - это автоматический способ расшифровки записей с помощью компьютера. Оцифрованный текст рукописных записей позволило бы автоматизировать бизнес процессы множества компаний, упростив работу человека. В данной работе рассматривается модель распознавания рукописного текста на кириллице на основе искусственной нейронной сети. В исследовании использовалась система SimpleHTR разработана Гаральдом, а также LineHTR, расширенной версией системыSimple HTR. Подробнее о SimpleHTR можно почитать здесь.

Датасет

В этом разделе опишу два типа наборов данных: Первый набор данных содержит рукописные цитаты на кириллице. Он содержит 21 000 изображений из различных образцов почерка (названия стран и городов). Мы увеличили этот набор данных для обучения, собрав 207 438 изображений из доступных форм или образцов.

Второй HKR для рукописной казахско-русской базы данных состоял из отдельных слов (или коротких фраз), написанных на русском и казахском языках (около 95% русского и 5% казахского слова/предложения, соответственно). Обратите внимание, что оба языка являются кириллическими написаны и разделяют одни и те же 33 символа. Кроме этих персонажей, в казахском алфавите есть еще 9 специфических символов. Некоторые примеры набора данных HKR показаны ниже:

Некоторые образцы набора данныхНекоторые образцы набора данных

Этот окончательный набор данных был затем разделен на обучающие (70%), валидация (15%) и тестовые (15%) наборы данных. Сам тестовый набор данных был разделен на два субданных (по 7,5% каждый): первый набор данных был назван TEST1 и состоял из слов, которые не были включены в обучающий и проверочный наборы данных; другой субдатасет был назван TEST2 и состоял из слов, которые были включены в обучение набор данных, но полностью различные стили почерка. Основная цель разбиения тестового набора данных на наборы данных TEST1 и TEST2 нужно было проверить разница в точности между распознаванием невидимых слов и слов, видимых на стадии обучения, но с невидимыми стилями почерка.

SimpleHTR модель

Предлагаемая система использует ANN, при этом для извлечения объектов используются многочисленные слои CNN с входной фотографии. Затем выход этих слоев подается в RNN. RNN распространяет информацию через последовательность. Вывод RNN содержит вероятности для каждого символа в последовательности. Для прогнозирования конечного текста реализуются алгоритмы декодирования в выход RNN. Функции CTC отвечают за декодирование вероятностей в окончательный текст. Для повышения точности распознавания декодирование может также использовать языковую модель. CTC используется для получения знаний; выход RNN представляет собой матрицу, содержащую вероятности символов для каждого временного шага. Алгоритм декодирования CTC преобразует эти символические вероятности в окончательный текст. Затем, чтобы повысить точность, используется алгоритм, который продолжает поиск слов в словаре. Однако время, необходимое для поиска фраз, зависит от размеров словаря, и он не может декодировать произвольные символьные строки, включая числа.

Операции: CNN: входные изображения подаются на слои CNN. Эти слои отвечают за извлечение объектов. Есть 5х5 фильтры в первом и втором слоях и фильтры 3х3 в последних трех слоях. Они также содержат нелинейную функцию RELU и максимальный объединяющий слой, который суммирует изображения и делает их меньше, чем входные данные. Хотя высота изображения уменьшается в 2 раза в каждом слое, карты объектов (каналы) добавляются таким образом, чтобы получить выходную карту объектов (или последовательность) размером от 32 до 256. RNN: последовательность признаков содержит 256 признаков или симптомов на каждом временном шаге. Соответствующая информация распространяется РНН через эти серии. LSTM-это один из известных алгоритмов RNN, который переносит информацию на большие расстояния и более эффективное обучение, чем типичные РНН. Выходная последовательность RNN сопоставляется с матрицей 32х80.

CTC: получает выходную матрицу RNN и прогнозируемый текст в процессе обучения нейронной сети, а также определяет величину потерь. CTC получает только матрицу после обработки и декодирует ее в окончательный текст. Длина основного текста и известного текста не должна превышать 32 символов

Модель SimpleHTR, где зеленые значки - это операции, а розовые- потоки данныхМодель SimpleHTR, где зеленые значки - это операции, а розовые- потоки данных

Данные: Входные данные: это файл серого цвета размером от 128 до 32. Изображения в наборе данных обычно не имеют точно такого размера, поэтому их исходный размер изменяется (без искажений) до тех пор, пока они не станут 128 в ширину и 32 в высоту. Затем изображение копируется в целевой образ размером от 128 до 32 дюймов Белый. Затем значения серого цвета стандартизированы, что упрощает процесс нейронной сети.

LineHTR модель

Модель LineHTR - это просто расширение предыдущей модели SimpleHTR, которая была разработана для того, чтобы позволить модели обрабатывать изображения с полной текстовой строкой (а не только одним словом), таким образом, чтобы еще больше повысить точность модели. Архитектура модели LineHTR очень похожа на модель SimpleHTR, с некоторыми различиями в количестве слоев CNN и RNN и размере входных данных этих слоев: она имеет 7 слоев CNN и 2 слоя Bidirectinal LSTM (BLSTM) RNN.

Ниже кратко представлен конвейер алгоритма LineHTR:

  • На входе изображение в градациях серого фиксированного размера 800 x 64 (Ш x В).

  • Слои CNN сопоставляют это изображение в градациях серого с последовательностью элементов размером 100 x 512.

  • Слои BLSTM с 512 единицами отображают эту последовательность признаков в матрицу размером 100 x 205: здесь 100 представляет количество временных шагов (горизонтальных позиций) в изображении с текстовой строкой; 205 представляет вероятности различных символов на определенном временном шаге на этом изображении)

  • Слой CTC может работать в 2 режимах: режим LOSS - чтобы научиться предсказывать правильного персонажа на временном шаге при обучении; Режим ДЕКОДЕР - для получения последней распознанной текстовой строки при тестировании

  • размер партии равен 50

Экспериментальные Материалы

Все модели были реализованы с использованием Python и deep learning библиотеки Tensorflow. Tensorflow позволяет прозрачно использование высоко оптимизированных математических операций на графических процессорах с помощью Python. Вычислительный граф определяется в скрипте Python для определения всех операций, необходимых для конкретных вычислений. Графики для отчета были сгенерированы с помощью библиотеки matplotlib для Python, а иллюстрации созданы с помощью Inkscape-программы векторной графики, аналогичной Adobe Photoshop. Эксперименты проводились на машине с 2-кратным " Intel Процессоры Xeon(R) E-5-2680, 4x " NVIDIA Tesla k20x и 100 ГБ памяти RAM. Использование графического процессора сократило время обучения моделей примерно в 3 раза, однако это ускорение не было тщательно отслежено на протяжении всего проекта,поэтому оно могло варьироваться.

SimpleHTR эксперименты

SimpleHTR модель-это обучение, валидация и тестирование на двух различных датасетах. Для того чтобы запустить процесс обучения модели на наших собственных данных, были предприняты следующие шаги:

Создан словарь слов файлов аннотаций

Файл DataLoader для чтения и предварительного владения набором данных изображений и чтения файла аннотаций принадлежит изображениям

Набор данных был разделен на два подмножества: 90% для обучения и 10% для проверки обученной модели. Для повышения точности и снижения частоты ошибок мы предлагаем следующие шаги: во-первых, увеличить набор данных, используя данные увеличение; во-вторых, добавьте больше информации CNN слоев и увеличение ввода размера; в-третьих, удалить шум на изображении и в скорописи стиле; В-четвертых, заменить ЛСТМ двусторонними ГРУ и, наконец, использование декодера передача маркера или слово поиска луча декодирование, чтобы ограничить выход в словарь слова.

Первый Набор Данных: Для обучения на собранных данных была обработана модель SimpleHTR, в которой есть 42 названия стран и городов с различными узорами почерка. Такие данные были увеличены в 10 раз. Были проведены два теста: с выравниванием курсивных слов и без выравнивания. После изучения были получены значения по валидации данных, представленных в Таблице ниже.

Алгоритм

выравнивание скорописи

нет выравнивания

CER

WAR

CER

WAR

bestpath

19.13

52.55

17.97

57.11

beamsearch

18.99

53.33

17.73

58.33

wordbeamsearch

16.38

73.55

15.78

75.11

Эта таблица показывает точность распознавания SimpleHTR для раличных методов декодирования (bestpath, beamsearch, wordbeamsearch). Декодирование наилучшего пути использует только выход NN и вычисляет оценку, принимая наиболее вероятный символ в каждой позиции. Поиск луча также использует только выход NN, но он использует больше данных из него и, следовательно, обеспечивает более детальный результат. Поиск луча с character-LM также забивает символьные последовательности, которые еще больше повышают исход.

Результаты обучения можно посмотреть на рисунке ниже:

Результаты эксперимента с использованием SimpleHTR (lr=0,01): точность модели.Результаты эксперимента с использованием SimpleHTR (lr=0,01): точность модели.Результаты эксперимента с использованием SimpleHTR (lr=0,01): погрешность модели.Результаты эксперимента с использованием SimpleHTR (lr=0,01): погрешность модели.

На рисунке ниже показано изображение с названием региона, которое было представлено на вход, а на другом рисунке мы видим узнаваемое слово " Южно Казахстанская с вероятностью 86 процентов.

Пример изображения с фразой " Южно-Казахстанская на русском языкеПример изображения с фразой " Южно-Казахстанская на русском языкеРезультат распознаванияРезультат распознавания

Второй набор данных (HKR Dataset): Модель SimpleHTR показала в первом тесте набора данных 20,13% символьной ошибки (CER) и второго набора данных 1,55% CER. Мы также оценили модель SimpleHTR по каждому показателю точности символов(рисунок ниже). Частота ошибок в словах (WER) составил 58,97% для теста 1 и 11,09% для теста 2. Результат например TEST2 показывает что модель может распознавать слова которые существуют в обучающем наборе данных но имеют полностью различные стили почерка. Набор данных TEST1 показывает, что результат не является хорошим, когда модель распознает слова, которые не существуют в обучении и наборы данных проверки.

Следующий эксперимент проводился с моделью LineHTR, обученной на данных за 100 эпох. Эта модель продемонстрировала производительность со средним CAR 29,86% и 86,71% для наборов данных TEST1 и TEST2 соответственно (рисунок ниже). Здесь также наблюдается аналогичная тенденция переобучения обучающих данных.

Заключение

Эксперименты по классификации рукописных названий городов проводились с использованием SimpleHTR и LineHTR на тестовых данных были получены следующие результаты по точности распознавания: 57,1% для SimpleHTR рекуррентного CNN с использованием алгоритмов декодирования с наилучшим путем, 58,3% для Beamsearch и 75,1% wordbeamsearch. Лучший результат был показан для Wordbeamsearch, который использует словарь для окончательной коррекции текст при распознавании.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru