Добро пожаловать! Этот блог разбивает широко используемую эффективную сеть обнаружения текста (EAST)[4] на ее основные компоненты и исследует, как улучшить поведение сети. Мы надеемся предложить некоторую интуицию относительно того, как каждая из этих частей влияет на окончательный результат обнаружения текста, и предложить некоторые конкретные решения проблем, возникающих с алгоритмом EAST. Этот блог предполагает некоторые базовые знания о глубоком обучении и сверточных нейронных сетях.

Введение в обнаружение объектов

Хотя в этом посте мы более подробно рассмотрим сеть обнаружения текста, мы начнем сначала с рассмотрения строительных блоков более общей сети «Обнаружение объектов». Мы можем рассматривать сеть обнаружения объектов как одну из ветвей постоянно развивающейся области сверточных глубоких нейронных сетей для компьютерного зрения. Когда мы рассматриваем обнаружение объектов, мы обычно рассматриваем задачу размещения «ограничивающей рамки» вокруг объектов, найденных на некотором изображении. Затем мы можем запустить классификационную сеть для фрагмента изображения в ограничивающей рамке, чтобы классифицировать изображение или добавить подпись. Эту задачу можно сравнить с другими задачами глубоких сверточных сетей, такими как классификация изображений, семантическая сегментация или сегментация экземпляров. [1]

Для сети обнаружения объектов на входе будет некоторое изображение, а на выходе — некоторый набор ограничивающих рамок вместе с набором показателей достоверности, которые соответствуют каждой ограничивающей рамке. Основным строительным блоком низкого уровня для каждой части этой сети будет уровень CNN. На более высоком уровне мы увидим, что каждый вариант сети обнаружения объектов может быть разбит на базовую сеть, сеть с объединением функций и выходную сеть. Наша цель в этом посте — понять, как сеть создает функции с помощью слоя CNN, а затем медленно комбинирует эти функции, чтобы получить точные ограничивающие рамки над объектами в случайном наборе. изображений. Обзор существующих методов и идей можно найти в [2].

Сверточные нейронные сети

Сверточные нейронные сети (CNN) — это основная идея компьютерного зрения с использованием глубокого обучения. Основная идея CNN состоит в том, чтобы использовать некоторый фильтр (который называется в CNN ядром) и перемещать его по входному изображению, вычисляя скалярные произведения между сталкивающимися пикселями исходного изображения и фильтр. После перемещения фильтра по всему изображению мы обычно применяем еще несколько фильтров, объединяем выходные данные и применяем некоторую функцию активации (например, ReLU). В конечном итоге это дает нам карту признаков, которая коррелирует с исходным изображением. Параметры сети — это наборы весов, соответствующие набору фильтров, которые мы применяем для получения карты объектов. Пара преимуществ этого типа сети по сравнению с полносвязной сетью заключается в том, что она сохраняет пространственную контрольную точку каждой из изученных функций и обычно требует меньше параметров, поскольку веса распределяются по всему изображению.

Мы не будем вдаваться здесь во все подробности того, как именно все это вычисляется во всех различных формах CNN. (Дополнительную информацию см. в примечаниях к курсу Stanford CS231n [1]), а скорее попытаемся сосредоточиться на общей идее того, почему типы функций, изученных с помощью CNN, будут работать для построения сети обнаружения объектов.

Интуиция свертки

Мы можем представить идею свертки просто как скалярное произведение некоторого набора якорных векторов,которые представлены весами каждого из сверточных фильтров, с сегментами изображения. Мы можем представить, что каждый из этих якорных векторов представляет некоторую фундаментальную функцию, имеющую отношение к нашей последующей задаче. Простым примером этого было бы, если бы сеть изучила фильтр, который представлял обнаружение края. Затем мы можем начать понимать, что каскадная последовательность сверточных слоев может представлять обнаружение иерархического набора признаков и представлять гипотезу о том, что понимание изображения можно анализировать таким образом. Можно получить больше визуальной интуиции, просмотрев конспект лекций Stanford CS231n (лекция 14). [1] Конечно, не гарантируется, что CNN должна изучить такие интуитивные функции, и действительно часть волшебства CNN заключается в том, что мы можем инициализировать фильтры случайным образом, и они будут естественным образом сортироваться по этим функциям. Копаться в этом для другого дня.

Модель обнаружения текста EAST

Базовая модель, которую мы будем рассматривать в этом посте, — это модель обнаружения текста EAST. Как обсуждалось ранее, эта модель состоит из магистрального слоя, слоя слияния признаков и выходного слоя. Магистральным уровнем может быть любая глубокая CNN с понижающей дискретизацией, такая как VGG16, Resnet50, Inception и т. д. В документе EAST они не используют сети большего размера, чем VGG16, хотя нет никаких причин, по которым мы не могли бы использовать гораздо большую сеть, если бы мы хотел получить больший набор карт функций. Затем слой слияния объектов отвечает за то, чтобы взять каждую из карт объектов с пониженной дискретизацией и объединить их таким образом, чтобы использовать функции из разных слоев иерархии и начать повышать дискретизацию до некоторого масштаба исходного изображения, чтобы мы могли рисовать наши окончательные ограничивающие рамки. Затем, наконец, выходной слой возьмет некоторую окончательную карту объектов и выполнит регрессию ограничивающей рамки и сигмовидную классификацию для вывода ограничивающей рамки и оценки достоверности соответственно.

Изменение модели обнаружения текста EAST

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

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

Если бы у нас был доступ к обучающей выборке, в которой мы могли бы гарантировать несколько помеченных примеров небольших фрагментов текста, возможно, это был бы наш самый простой вариант. Однако часто трудно найти большие конкретные категории помеченных примеров, которые легко доступны. Мы могли бы попробовать некоторые приемы, такие как использование метода водораздела для слабой маркировки символов в примерах (как показано в CRAFT [8]), или мы могли бы использовать существующую сеть распознавания текста для создания обучающих примеров для нас (например, Amazon Textract). Но для анализа здесь мы сосредоточимся на том, что мы можем сделать, используя только наши исходные данные.

Таким образом, наш процесс будет заключаться в следующем:

  1. Сделайте нашу модель более выразительной, изменив архитектуру модели.
  2. Полностью используйте выразительность нашей новой модели с некоторым увеличением данных.

Делаем модель более выразительной

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

Правда в том, что мы могли бы поэкспериментировать с любым из них и потенциально увидеть результаты. Например, если мы считаем, что нам поможет более сложная иерархия функций из нашей магистрали, мы можем выбрать обновление уровня магистрали с VGG16 до ResNet50. Или мы могли бы предположить, что выходному слою требуется дополнительный скрытый слой, чтобы понять большее разнообразие способов, которыми окончательная карта объектов может быть преобразована в ограничивающую рамку при оценке достоверности.

Однако для нашего примера мы просто добавим простое изменение в слой Feature Merging. Если мы вернемся к архитектуре EAST, то увидим, что исходная модель не использует никаких функций после первого слоя объединения в VGG16, но использует все последующие слои объединения (самый ранний объединенный слой — «f2», но « f1' опущено). Поскольку наша цель состоит в том, чтобы добавить функции, которые помогут нам захватывать текстовые поля меньшего размера (одиночные цифры), то интуитивно мы можем сказать, что модель с большей вероятностью достигнет этого, если мы объединим некоторые функции самого низкого уровня, которые фиксируются на самом высоком уровне. разрешение исходного изображения. Таким образом, теперь мы будем работать с немного измененной версией EAST, которую мы назовем «EAST-ER», которая будет иметь следующую архитектуру:

Архитектура этой модели почти идентична EAST, за исключением добавления еще одного слоя слияния функций, взятого из более ранних уровней иерархии функций EAST («f1» на изображении).

Использование обретенной выразительности модели

Таким образом, мы утверждаем, что с нашей архитектурой EAST-ER наша модель будет более выразительной и сможет находить меньшие текстовые поля на наших тестовых образцах. Итак, чтобы проверить это, мы могли бы просто повторить обучение модели и посмотреть, увидим ли мы другие результаты. Но предположим, что мы хотим получить немного больше уверенности в том, что мы используем дополнительную сложность нашей модели, и, что еще лучше, если мы хотим вычислить показатель, чтобы увидеть, насколько выразительна действует модель, можем ли мы сделай это?

Измерение выразительности нашей модели

Что мы на самом деле подразумеваем под «выразительностью» модели? Интуитивно мы могли бы понять, что это означает «широту» различных функций, представленных в модели. Мы могли бы сказать, что более широкий спектр функций может быть объединен для понимания более широкого спектра целей (эта идея может быть измерена с помощью отзыва) . Однако мы также хотим убедиться, что наш широкий набор функций по-прежнему структурирован, что означает, что функции достаточно актуальны для целей, чтобы быть полезными (что может быть измерено с помощью точность). Таким образом, наша цель, по сути, состоит в том, чтобы улучшить отзыв нашей модели, сохраняя при этом нашу точность. Мы также предлагаем, чтобы мы могли измерить эту идею «широты» признаков, измерив дисперсию элементов окончательной карты признаков.

В предыдущем уравнении мы принимаем «B» за размер пакета, а «P» за количество «пикселей» в окончательной карте объектов, каждый из которых имеет некоторый набор объектов 𝒇, которые будут переданы в окончательный выходной слой для определите показатель доверия этого пикселя.

Почему мы считаем, что это измерение будет отражать разнообразие функций на карте функций? В конечном итоге именно этот набор окончательных функций будет отправлен на выходной слой, а это означает, что это все, с чем должен работать выходной слой. Значение оценки каждого пикселя будет определяться характером этого конечного вектора признаков (в данном случае длиной 32). Здесь мы можем интуитивно понять, что в общем случае, если все функции кажутся одинаково представленными (что означает дисперсию, близкую к 0), тогда модель будет в состоянии делать меньше различий между различными объектами, чем если бы разные пиксели имели акцент на разных функциях. Хотя это грубое измерение, мы попытаемся обрести некоторую уверенность в этой идее в следующем разделе, используя метод увеличения данных.

Креативный подход к расширению данных

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

Чтобы проверить, действительно ли обучение на более широком наборе функций 1. Вызывает рост нашего показателя «дисперсии признаков» и 2. Коррелирует с отзывом нашей модели, мы можем провести ряд простых экспериментов. Мы будем использовать предварительно обученную модель EAST, которая имеет некоторую базовую полноту, точность и дисперсию признаков (наша новая метрика), и настроим ее на наборе обучающих изображений, масштабированных с некоторым коэффициентом*. Чтобы проверить это, мы попробуем выполнить точную настройку с изображениями, масштабированными с коэффициентами [0,5, 1, 1,5] примерно для 40 эпох. После этого мы получаем обучающие графики для наших метрик, например:

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

Обучение ВОСТОК-ЕР

Во-первых, давайте посмотрим, как наши 3 точно настроенные модели EAST справились с нашей исходной задачей:

Здесь мы видим, что наша тонкая настройка действительно улучшила наши результаты на нашем целевом изображении. Однако мы видим, что даже на нашем финальном изображении мы по-прежнему не можем подобрать некоторые числа (эту надоедливую 4!). Мы могли бы продолжить обучение этой тонко настроенной модели, чтобы увидеть, вырастет ли она, чтобы увидеть эти цифры, или мы можем попробовать что-то, чтобы обучить нашу немного более сложную модель EAST-ER, чтобы увидеть, добьемся ли мы большего успеха.

Теперь, учитывая наше желание существенно улучшить наш отзыв, чтобы найти эти меньшие числа в операторе, а также наше желание не терять слишком много точности, мы теперь рассмотрим возможность обучения модели EAST-ER с нуля с добавленным шаг увеличения данных масштабирования изображения со случайным коэффициентом, установленным для каждой партии в диапазоне от 1 до 1,5. После обучения в течение достаточного времени мы начинаем получать очень высокий показатель отзыва ~ 0,825 (по сравнению с нашим исходным отзывом предварительно обученного EAST ~ 0,78), и именно здесь мы теперь повторно тестируем наш тестовый документ. После этого мы видим наш результат:

Успех! Мы нашли способ сделать модель более выразительной, например, найти все ячейки с меньшими числами, но при этом не потерять возможность находить большие.

Как мы можем показать это более официально?

Итак, похоже, мы нашли модель, которая подходит для поставленной задачи! Однако то, что мы сделали, все еще остается загадкой. Мы видели, что дисперсия признаков, казалось, монотонно масштабировалась с масштабированием входных изображений, но почему? Мы видели здесь, что наш отзыв коррелирует с дисперсией признаков, но всегда ли это так? Кроме того, есть ли способ измерить, насколько полезно было добавить дополнительный слой слияния функций в EAST-ER?

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

_____________

*Кроме того, мы также включили в эту тонкую настройку набор «игнорируемых» текстовых полей из обучающего набора. Это немедленно повлияло на точность и полноту (вызвав падение обоих показателей), но дало хороший полигон для проверки гипотезы.

Связанный репозиторий кода:

Базовый код: https://github.com/SakuraRiven/EAST (автор SakuraRiven)

Расширенный код: https://github.com/surajmenon72/EAST-ER

Использованная литература:

[1] Конспект лекций Stanford CS231n

http://cs231n.stanford.edu/slides/2021/lecture_14.pdf http://cs231n.stanford.edu/slides/2021/lecture_15.pdf

[2] Обзор обнаружения объектов на основе глубокого обучения. https://arxiv.org/pdf/1907.09408.pdf

[3] Блог Паритоша Махто



[4] Бумага для распознавания текста EAST



[5] Реализация SakuraRiven Pytorch EAST



[6] Daniel Keypoints Convolutional GIF

https://giphy.com/gifs/blog-daniel-keypoints-i4NjAwytgIRDW

[7] Часть Datahacker Edge Detection



[8] КРАФТ-бумага



[9] https://www.vectorstock.com/royalty-free-vectors/mouth-speaking-vectors