Назад
107

Differentiable Binarization (DB): text detection

107

Пререквизиты

Данная статья является частью цикла статей об OCR и продолжает тему детекции текста, затронутую в посте про CRAFT. Рекомендуем ознакомиться с ним перед прочтением статьи.

Все статьи из цикла про OCR:

Введение

К 2019 году в домене детекции текста появился тренд на использование сегментационных моделей, которые могли бы более точно идентифицировать текстовые области, а также работать с текстом сложной формы (например, изогнутый или наклонный текст). К таким моделям относятся, например, CRAFT и PSENet. Однако они имели ряд ограничений, которые снижали их перфоманс.

Главная проблема таких моделей — сложный постпроцессинг. Из-за него снижается и качество (могут возникать ошибки на этом этапе), и скорость (он требует значимых затрат по времени). При этом постпроцессинг необходим, так как бинарные маски не всегда хорошего качества.

Авторы DB (Differentiable Binarization, дифференцируемая бинаризация) нашли решение проблемы, пойдя от обратного. Вместо улучшения постпроцессинга они предложили улучшать сами бинарные маски. Однако напрямую этого сделать нельзя, так как бинаризация — пороговая (не дифференцируемая) функция. Тогда ресёрчеры воспользовались следующим математически трюком: апроксимировали пороговую функцию гладкой (ниже об этом будет рассказано подробнее). Таким образом, теперь мы предсказываем не только вероятности символов, но и пороги для их бинаризации. За счёт этого существенно упрощается последующий постпроцессинг и, следовательно, значительно уменьшается количество ошибок при детекции, а также её скорость.

Рисунок 1. Пайплайн детекции текста (синие стрелочки) и пайплайн DB (красные стрелочки). Пунктирные стрелки обозначают операции только на инференсе; сплошные стрелки — операции как при обучении, так и при инференсе

Архитектура DB

Основу архитектуры DB составляет классический FPN-like бэкбон, который эффективно собирает многоуровневые фичи за счёт bottom-up и top-down блоков. Полученные таким образом признаки разного масштаба приводятся к одному размеру с помощью transposed свёрток и конкатенируются. С полученной итоговой картой признаков мы и будем работать далее.

Затем нам нужно предсказать вероятности символов. В голове CRAFT у нас находились для этого два слоя — region score (для предсказания центров символов) и affinity score (для предсказания центров промежутков между символами). В DB у нас также две карты. Если первая — аналог region score (карта вероятностей, probability map), то вторая — карта обучаемых порогов (threshold map). На выходе, накладывая threshold map на probability map, мы формируем итоговую бинарную маску, из которой будем извлекать полигоны символов.

Отметим, что вся архитектура полносвёрточная, поэтому пространственная информация сохраняется. Для нас это критически важно, поскольку мы хотим работать с отдельными символами разного масштаба.

Рисунок 2. Архитектура модели DB: «pred» состоит из свёрток 3×3 и двух transposed свёрток с шагом 2. Значения «1/2», «1/4», … и «1/32» указывают на соотношение размера карты признаков по сравнению с размером входного изображения

Дифференцируемая бинаризация

Рассмотрим карту вероятностей \( P \in \mathbb{R}^{H \times W} \), полученную на выходе сегментационной сети, где \( H \text{ и } W \) указывают высоту и ширину карты. Тогда бинаризацию можно представить в виде функции (\( P_{i,j} \) — конкретный пиксель карты выше, \( t \) — статичный порог):

\( B_{i,j} = \begin{cases}1 & \text{если } P_{i,j} \geq t, \\ 0 & \text{в противном случае.} \end{cases} \)

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

\( \hat{B}{i,j} = \frac{1}{1 + e^{-k(P{i,j} — T_{i,j})}}, \)

где \( \hat{B}{i,j} \) — приближенная бинарная маска, \( T{i,j} \) — обучаемые трешхолды (по сути ещё одна карта), \( k \) — «усиливающий» фактор (эмпирически был взят равным 50).

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

Теперь давайте рассмотрим, что у нас происходит на этапе обратного распространения ошибки. Возьмём кросс-энтропию как функцию потерь и \( f(x) = \frac{1}{1 + e^{-kx}} \) — как функцию дифференцируемой бинаризации (\( x = P_{i,j} — T_{i,j} \)). Тогда запишем часть лосса для положительных лейблов \( ( l_{+} ) \) и часть лосса для отрицательных лейблов \( l_{-} \) следующим образом:

\( l_{+} = -\log\left(\frac{1}{1 + e^{-kx}}\right) \\ l_{-} = -\log\left(1 — \frac{1}{1 + e^{-kx}}\right) \)

Далее запишем их производные:

\( \frac{\partial l^+}{\partial x} = -k f(x) e^{-kx} \\ \frac{\partial l^-}{\partial x} = k f(x) \)

Теперь можем сделать следующие выводы:

  1. Градиенты умножаются на коэффициент усиления k;
  2. Градиенты значительно увеличиваются для большей части ошибочно предсказанной области (x < 0 для \( l_{+} \); x > 0 для \( l_{-} \)). Таким образом, дифференцируемая бинаризация помогает получать более чёткие прогнозы, а при \( x = P_{i,j} — T_{i,j} \) мы эффективно разделяем передний план и задний фон на изображении.
Рисунок 3. Дифференцируемая бинаризация и её производная по \( x = P_{i,j} — T_{i,j} \). a) \( DB \) — дифференцируемая бинаризация, SD — стандартная бинаризация; b) Производная от \( l_+ \) (часть лосса для положительных лейблов); c) Производная от \( l_{-} \) (часть лосса для отрицательных лейблов). А ещё при \( k \) = 50 приближенная функция хорошо аппроксимирует порог

Генерация полигонов текста

Итак, на выходе DB мы получаем бинарные маски. Нам нужно, во-первых, их обучать, а во-вторых, получать на этапе инференса полигоны с текстом. Разберём этот алгоритм.

При обучении:

  • Текстовые области на изображении аннотируются в виде полигонов \( G \).
  • Полигоны \( G \) сжимаются до меньших полигонов \( G_{s} \) с помощью алгоритма Vatti, чтобы создать «ядро текста», представляющее центральную область текстового объекта. Этот процесс сжатия помогает разделить пересекающиеся текстовые объекты, что упрощает их различение моделью. Смещение, используемое для сжатия, рассчитывается следующим образом: \( D = \frac{A(1 — r^2)}{L} \), где \( A \) — площадь исходного полигона, \( L \) — его периметр, а \( r \) — коэффициент сжатия (насколько уменьшается размер полигона; эмпирически лучше брать значение 0.4).
  • Для генерации областей границ текстовых объектов полигоны расширяются до большего размера \( G_{d} \) с тем же смещением \( D \). Область между сжатым полигоном \( G_{s} \) и расширенным полигоном \( G_{d} \) используется для определения границ между текстом и фоном.
Рисунок 4. Генерация полигонов текста. Аннотация текстового полигона отображается красными линиями. Сжатый \( G_s \) и расширенный полигон \( G_{d} \) — синими и зелеными линиями соответственно
  • Карта вероятностей: пикселям внутри \( G_{s} \) присваивается положительная метка (текстовая область), а пикселям за пределами \( G_{d} \) — отрицательная (фон). Карта порогового значения: пиксели в области между \( G_{s} \) и \( G_{d} \) получают значения на основе расстояния до ближайшего сегмента \( G_{d} \). Эти метки используются для обучения probability map и threshold map.
  • Модуль DB оптимизирует совместную функцию потерь с использованием этих меток:
    1. BCE loss для probability map.
    2. L1 loss для предсказания порогов, обеспечивающий точную бинаризацию во время инференса.

При инференсе:

  • На этапе предсказания модель генерирует бинарную карту текста на основе обученной карты вероятностей и адаптивного порога. Эта карта используется для выделения текстовых контуров.

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

Рисунок 5. Визуализации работы DB на текстовых примерах различной формы, включая изогнутый текст, текст разной направленности, вертикальный текст и длинные текстовые строки. Для каждого элемента в правом верхнем углу отображается threshold map, в правом нижнем — probability map

Обучение

Для обучения использовались следующие датасеты (подробнее о некоторых из них можно почитать здесь):

  • SynthText;
  • MLT-2017;
  • ICDAR 2015 (IC15);
  • MSRA-TD500 (TD500);
  • CTW-1500 (CTW);
  • TotalText (TotalText);

Авторы экспериментировали с различными вариантами ResNet в качестве бэкбона, как и с вариациями свёрток (обычной и deformable) в последних CNN-блоках (которые формируют каскад в FPN). В итоге они остановились на бэкбонах на базе ResNet-18 (побыстрее) и ResNet-50 (покачественнее) с deformable свёртками.

Ниже приведены результаты модели DB на популярном бенчмарке ICDAR 2015. В оригинальной статье есть результаты бенчмарков для всех тестовых частей датасетов выше.

Рисунок 6. Результаты бенчмарков моделей на датасете ICDAR 2015. Значения в скобках — высота входных изображений. «TB» и «PSE» — сокращения от TextBoxes++ и PSENet. P, R, F — precision, recall и F (F1-score) соответственно. FPS — количество кадров, которое модель может обработать в секунду

Заключение

В заключение отметим сильные и слабые стороны DB:

  1. Модель DB оптимизирована для быстрого выполнения, что делает её подходящей для задач реального времени — сканирование документов или анализ изображений. Например, по скорости DB значительно превосходит CRAFT.
  2. Так как в основе DB лежит сегментация, модель эффективно выделяет текстовые области, включая сложные формы текста (например, изогнутый или наклонный текст), что улучшает качество распознавания.
  3. Хотя DB хорошо справляется с печатным текстом, распознавание рукописного текста остаётся сложной задачей, особенно без дополнительных данных для обучения.
  4. В случаях, когда документ содержит несколько языков или смешанные алфавиты, могут возникать ошибки при определении границ текста или его интерпретации.
  5. Есть проблемы с детекцией текста внутри текста by design — модель может объединить области в один объект или не разделить их точным образом. Это связано с тем, что в процессе сегментации трудно различить плотно упакованный или вложенный текст.

Полезные ссылки

  1. Имплементация на torch: torch-implementation
  2. DB как детектор текста в популярном фреймворке для OCR — EasyOCR

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!