Оптимизация производительности OCR: начиная с понимания сетевой структуры BiLSTM

искусственный интеллект

Резюме: Если вы хотите оптимизировать производительность OCR, вы должны сначала понять структуру сети OCR, которую необходимо оптимизировать.С точки зрения мотивации в этом документе показано, как построить сеть OCR на основе структуры Seq2Seq шаг за шагом. шаг.

Эта статья опубликована в сообществе HUAWEI CLOUD.«Серия по оптимизации производительности OCR (1): обзор сетевой структуры BiLSTM», оригинальный автор: HW007.

OCR относится к распознаванию печатного текста на картинках.Недавно производительность модели OCR была оптимизирована.Сеть OCR, написанная на основе TensorFlow, была переписана с помощью Cuda C, и производительность была улучшена в 5 раз. Благодаря этой работе по оптимизации я получил глубокое понимание общей сетевой структуры сети OCR и связанных с ней методов оптимизации.Я планирую записать ее здесь в виде серии сообщений в блоге, а также послужить кратким изложением и учебными заметками для моей недавней работы. .

Если вы хотите оптимизировать производительность OCR, вы должны сначала понять структуру сети OCR, которую нужно оптимизировать.В этой статье я попытаюсь вывести, как сеть OCR, основанная на структуре Seq2Seq, шаг за шагом строится с точки зрения мотивации.

Предпосылкой чтения этой статьи является только понимание закона изменения размерности матрицы при умножении матриц, то есть матрица n*p, умноженная на матрицу p*m, равна матрице n*m. Лучше, если вы знаете структуру сети CNN и RNN и немного понимаете процедуру построения модели машинного обучения.

Во-первых, общая структура сети OCRBILSTM, которая будет проанализирована в этой статье, выглядит следующим образом:

Далее я объясню мотивацию и роль каждой структуры шаг за шагом от правого верхнего угла (выходной конец модели) до левого нижнего угла (входной конец модели) этой фигуры.

1. Построить простейшую сеть OCR

Сначала рассмотрим сцену распознавания OCR в простейшем случае, допустим, на входе только одно текстовое изображение, а высота и ширина изображения 32 пикселя, то есть матрица 32*32, для удобства ее можно удлинить до получить матрицу 1*1024. Что касается вывода, из-за специфики текста мы можем только пометить весь текст и, наконец, вывести номер распознанного текста, так что наш вывод представляет собой матрицу 1 * 1, а содержимое элементов матрицы равно Номер распознанного текста.

Как получить эту матрицу 1*1? В соответствии с процедурой вероятностной статистики мы предполагаем, что в мире существует 10 000 слов, и перечисляем их как числа от 1 до 1 000, тогда эти 10 000 элементов имеют вероятность стать нашим выходом, поэтому, если мы сначала посчитаем эти 10 000 слов в качестве входных данных image Если вероятность результата распознавания равна , то выбрать выход с наибольшей вероятностью. Таким образом, проблема превращается в то, как получить матрицу 1 * 10000 (Y) из матрицы 1 * 1024 (X). Здесь вы можете перейти к наиболее распространенным процедурам линейных предположений в структуре моделей машинного обучения.Предполагается, что Y и X линейно связаны, так что можно получить самую простую и классическую линейную модель: Y = AX + B. Среди них X (размерность: 1*1024) называется входом, Y (размерность: 1*10000) — выходом, A и B — параметрами модели, и из матричного умножения видно, что размерность A должен быть 1024*1000, а размер B должен быть 1*10000. Пока известно только X, нам нужно знать конкретные значения A и B, если мы хотим вычислить Y. В процедуре машинного обучения значения A и B в качестве параметров вначале задаются случайным образом, а затем, подавая большое количество X и его стандартный ответ Y, машина будет медленно корректировать эти два параметра A и B. До оптимального значения этот процесс называется обучением модели, а вводимые данные называются обучающими данными. После обучения вы можете умножить оптимальное значение A на новый ввод X и добавить оптимальное значение B, чтобы получить соответствующее значение Y. Используйте операцию argMax, чтобы выбрать наибольшее число из 1 * 10000 чисел Y. Число — это число распознанный текст.

Теперь вернитесь к верхнему правому углу рисунка 1. Думаю, вы понимаете значение двух желтых матриц 384*10000 и 1*10000. Отличие примера на рисунке от примера, описанного в тексте выше, заключается в том, что ввод на рисунке — это 1 1*1024 картинки, а в приведенном выше тексте — 27 1*384 картинки. Итак, вы узнали, как построить простую сеть OCR. Далее мы начинаем оптимизировать эту простую сеть.

2. Стратегия оптимизации 1: уменьшить количество вычислений

В примере с приведенным выше текстовым описанием нам нужно выполнять вычисление умножения матриц 1 * 1024 и 1024 * 10000 каждый раз, когда мы распознаем текст. Сумма вычислений слишком велика. Некоторые вычисления избыточны? Люди, знакомые с PCA, должны сразу подумать, что на самом деле текстовая картинка 32*32 растянута в матрицу 1*1024. Пространство признаков этого текста составляет 1024 измерения, даже если значения каждого измерения только 0 и 1. Эта функция. Существует 2 ^ 1024 значений, которые могут быть представлены в пространстве, что намного больше, чем 10 000 символов в предполагаемом текстовом пространстве. С этой целью мы можем использовать PCA или различные операции уменьшения размерности, чтобы уменьшить размерность этого вектора входных признаков до менее чем 10 000 измерений, например 128 измерений на рисунке.

3. Стратегия оптимизации 2: учитывайте корреляцию между словами

(Напоминание: на приведенном выше рисунке, чтобы отразить размер партии, он нарисован в соответствии с 27 текстовыми изображениями. Обсуждение ниже относится только к 1 текстовому изображению, поэтому места, где размер равен 1 ниже, соответствуют изображению. 27)

Возможно, вы заметили, что размерность «функции изображения положения», умноженная на желтую матрицу 384*10000 на рисунке, напрямую использует не 1*384, а 1*(128+128+128). На самом деле, здесь подразумевается оптимизация. Эта оптимизация основана на предположении об ассоциации между словами. Простой пример: если предыдущее слово «ты», за ним, вероятно, последует слово «хороший». этот порядок слов Статистический закон должен использоваться для повышения точности распознавания текста и изображений. Итак, как добиться этой связи?

На рисунке мы видим, что в левой части находится матрица параметров 10000*128. Легко понять, что этот параметр является своего рода базой данных, в которой хранятся обработанные признаки всех 10000 текстовых изображений (так называемая обработка упомянуто выше.Уменьшение размерности, исходный признак должен быть 10000*1024), согласно структуре на рисунке, мне нужно ввести результат распознавания предыдущего слова текущего распознанного слова (работа по распознаванию последовательно распознается одно слово после другого). Затем выберите матрицу признаков 1*128, соответствующую предыдущему слову, а затем используйте ее в качестве первой 1/3 ввода 1*384 после некоторой обработки и преобразования.

Точно так же, что означают два 1*128 позади 1*384? Хотя в предложении предыдущее слово имеет большое влияние на следующее слово, даже если текущее предсказуемое слово размыто на картинке, я могу угадать его по предыдущему слову. Можно ли угадать его по первым k словам или по последним k словам? Очевидно, что да. Следовательно, два 1 * 128 сзади соответственно представляют влияние особенностей изображения слов «вперед» и «назад» в изображении предложения на текущее распознаваемое слово, поэтому изображение «двунаправленная сеть LSTM» добавленный впереди, чтобы сгенерировать эти две функции.

На данный момент схема улучшенной версии сети OCR в основном вышла, и есть еще некоторые детали, которые необходимо решить. Интересно, заметили ли вы, что, согласно вышеизложенному, 1*384 содержит три признака 1*128, которые представляют влияние предыдущего слова на текущее слово, а слова во всем предложении на картинке спереди назад (Вперед) на влияние сортировки текущего текста и влияние сортировки в обратном направлении (Назад) каждого текста во всем предложении на картинке на текущий текст.

Но их характерные длины равны 128! ! ! Слово 128, и предложение тоже 128? Для разного текста и картинок длина предложения может быть разной, как ее можно представить характерной длиной одного слова?

Как представить признаки предложения переменной длины? На первый взгляд, это действительно очень сложная задача, но, к счастью, она имеет очень грубое и простое решение — взвешенное суммирование, которое также является рутиной в статистике вероятностей.Независимо от того, сколько у вас ситуаций, вероятность всех ситуаций сумма должна быть равна 1. Я не знаю, шокирован ли я, увидев это здесь. Две вещи, которые кажутся несовместимыми, такие как "изменение" и "неизменное", так волшебно сосуществуют. В этом прелесть математики, и люди не могут не аплодировать!

Диаграмма ниже иллюстрирует, как работает это волшебство, на практическом примере. Когда мы хотим идентифицировать слово «палочка» в текстовом фрагменте, хотя измененное слово было заблокировано, но в соответствии с каким-то накопленным опытом и знаниями в повседневной жизни, когда мы хотим заполнить пробел, мы связываемся с контекстом, фокусируемся на "китаец" вверху и "есть" внизу. Механизм этого весового коэффициента используется для реализации этого механизма внимания. Что касается «опыта повседневной жизни», то он изучается «сетью механизмов внимания» посредством большого количества обучающих данных. Это происхождение 32 альф на рисунке 1. Сеть внимания, как правило, выполняется сетью ГРУ в промышленности.Из-за нехватки места она не будет здесь расширяться.Я расскажу об этом подробно в следующий раз. Наблюдателям нужно только знать, что в правой части рисунка 1 должна быть «сеть внимания» для вывода 32 альфа-значений.

Нажмите «Подписаться», чтобы впервые узнать о новых технологиях HUAWEI CLOUD~