Differentiable Binarization (DB): text detection
Пререквизиты
Данная статья является частью цикла статей об OCR и продолжает тему детекции текста, затронутую в посте про CRAFT. Рекомендуем ознакомиться с ним перед прочтением статьи.
Все статьи из цикла про OCR:
- Вводная статья про OCR
- CRAFT
- Детекторы текста на основе трансформеров, часть 1
- Детекторы текста на основе трансформеров, часть 2
Введение
К 2019 году в домене детекции текста появился тренд на использование сегментационных моделей, которые могли бы более точно идентифицировать текстовые области, а также работать с текстом сложной формы (например, изогнутый или наклонный текст). К таким моделям относятся, например, CRAFT и PSENet. Однако они имели ряд ограничений, которые снижали их перфоманс.
Главная проблема таких моделей — сложный постпроцессинг. Из-за него снижается и качество (могут возникать ошибки на этом этапе), и скорость (он требует значимых затрат по времени). При этом постпроцессинг необходим, так как бинарные маски не всегда хорошего качества.
Авторы DB (Differentiable Binarization, дифференцируемая бинаризация) нашли решение проблемы, пойдя от обратного. Вместо улучшения постпроцессинга они предложили улучшать сами бинарные маски. Однако напрямую этого сделать нельзя, так как бинаризация — пороговая (не дифференцируемая) функция. Тогда ресёрчеры воспользовались следующим математически трюком: апроксимировали пороговую функцию гладкой (ниже об этом будет рассказано подробнее). Таким образом, теперь мы предсказываем не только вероятности символов, но и пороги для их бинаризации. За счёт этого существенно упрощается последующий постпроцессинг и, следовательно, значительно уменьшается количество ошибок при детекции, а также её скорость.
Архитектура 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, мы формируем итоговую бинарную маску, из которой будем извлекать полигоны символов.
Отметим, что вся архитектура полносвёрточная, поэтому пространственная информация сохраняется. Для нас это критически важно, поскольку мы хотим работать с отдельными символами разного масштаба.
Дифференцируемая бинаризация
Рассмотрим карту вероятностей \( P \in \mathbb{R}^{H \times W} \), полученную на выходе сегментационной сети, где \( H \text{ и } W \) указывают высоту и ширину карты. Тогда бинаризацию можно представить в виде функции (\( P_{i,j} \) — конкретный пиксель карты выше, \( t \) — статичный порог):
Из формулы видно, что стандартная бинаризация обладает существенным недостатком — она не является дифференцируемой. Это означает, что её невозможно оптимизировать совместно с сегментационной сетью в процессе обучения. Чтобы решить эту проблему, авторы предложили использовать следующую аппроксимирующую функцию для выполнения бинаризации:
\( \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) \)
Теперь можем сделать следующие выводы:
- Градиенты умножаются на коэффициент усиления k;
- Градиенты значительно увеличиваются для большей части ошибочно предсказанной области (x < 0 для \( l_{+} \); x > 0 для \( l_{-} \)). Таким образом, дифференцируемая бинаризация помогает получать более чёткие прогнозы, а при \( x = P_{i,j} — T_{i,j} \) мы эффективно разделяем передний план и задний фон на изображении.
Генерация полигонов текста
Итак, на выходе 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} \) используется для определения границ между текстом и фоном.
- Карта вероятностей: пикселям внутри \( G_{s} \) присваивается положительная метка (текстовая область), а пикселям за пределами \( G_{d} \) — отрицательная (фон). Карта порогового значения: пиксели в области между \( G_{s} \) и \( G_{d} \) получают значения на основе расстояния до ближайшего сегмента \( G_{d} \). Эти метки используются для обучения probability map и threshold map.
- Модуль DB оптимизирует совместную функцию потерь с использованием этих меток:
- BCE loss для probability map.
- L1 loss для предсказания порогов, обеспечивающий точную бинаризацию во время инференса.
При инференсе:
- На этапе предсказания модель генерирует бинарную карту текста на основе обученной карты вероятностей и адаптивного порога. Эта карта используется для выделения текстовых контуров.
Таким образом, дифференцируемая бинаризация обеспечивает адаптивное обучение порогов, что повышает точность на сложных данных, таких как изогнутый или нерегулярный текст.
Обучение
Для обучения использовались следующие датасеты (подробнее о некоторых из них можно почитать здесь):
- 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. В оригинальной статье есть результаты бенчмарков для всех тестовых частей датасетов выше.
Заключение
В заключение отметим сильные и слабые стороны DB:
- Модель DB оптимизирована для быстрого выполнения, что делает её подходящей для задач реального времени — сканирование документов или анализ изображений. Например, по скорости DB значительно превосходит CRAFT.
- Так как в основе DB лежит сегментация, модель эффективно выделяет текстовые области, включая сложные формы текста (например, изогнутый или наклонный текст), что улучшает качество распознавания.
- Хотя DB хорошо справляется с печатным текстом, распознавание рукописного текста остаётся сложной задачей, особенно без дополнительных данных для обучения.
- В случаях, когда документ содержит несколько языков или смешанные алфавиты, могут возникать ошибки при определении границ текста или его интерпретации.
- Есть проблемы с детекцией текста внутри текста by design — модель может объединить области в один объект или не разделить их точным образом. Это связано с тем, что в процессе сегментации трудно различить плотно упакованный или вложенный текст.
Полезные ссылки
- Имплементация на torch: torch-implementation
- DB как детектор текста в популярном фреймворке для OCR — EasyOCR