近年来文本检测相关工作梳理

引言

场景文本检测任务,一直以来是OCR整个任务中最为重要的一环。虽然有一些相关工作是端对端OCR工作的,但是从工业界来看,相关落地应用较为困难。因此,两阶段的OCR方案一直是优先考虑的。

在两阶段中(文本检测+文本识别),文本检测是极为重要的一环。自从DBNet提出后,工业界似乎找到了法宝,DBNet算法迅速成为大家做文本检测的首选。

但是,通过近来阅读的一些论文,我逐渐发现了DBNet后,文本检测任务相关算法的一些趋势:DBNet是只考虑了图像的信息,并没有考虑文本的信息。最近的算法,在逐渐向多模态方向靠近,利用CLIP等相关multi-model来增强文本检测backbone能力。

本文算是将最近看的一些相关论文做一下梳理,算是抛砖引玉。难免挂一漏万,还望大家多多指教。

⚠️注意:行文顺序是从新到旧排列

(2024 ODM) ODM: A Text-Image Further Alignment Pre-training Approach for Scene Text Detection and Spotting

code: https://github.com/PriNing/ODM

ODM

该篇工作是我无意刷到的,刚贴出来不久(2024-03-01)。通篇看下来,ODM做的工作很简单,就是将带有文本图像中的背景都去除掉,得到如上图中右侧的黑底白字的图像,再送到后续文本检测算法中做检测。

这样的想法,我之前做过类似的,用的是U-Net系列。但是效果较差。原因有三:
一是训练这种模型需要pixel-level数据集;
二是模型推理较为耗时;
三是泛化性能较差,因为文本所在位置千变万化,换一种场景,模型去除背景能力就会差很多。

文中也提到了如何制作的数据集:

  • 对于四点坐标标注的框,作者计算四边形的尺寸,并根据字符的数量估计每个字符的大小和位置。然后用指定字体贴上去。
  • 对于多边形坐标的框,作者采用ABCNet论文中合成方法,使用坐标提供的Bezier curves来计算弯曲文本的位置。然后计算每个字的倾斜角度贴上去。

示例图如下:
在这里插入图片描述

以上做法会存在gt图和原始图,文本像素点不能一一对应的问题。论文作者显然也考虑到了,特地在论文中提了一句:
在这里插入图片描述

PS: 目前对该方法效果持保留态度,等待后续作者开源源码和demo(只有空仓库),再来试试看吧!

(CVPR2023 TCM) Turning a CLIP Model into a Scene Text Detector

code: https://github.com/wenwenyu/TCM
TCM

该工作正如题目所说,将CLIP模型用到了文本检测场景中,不同于之前工作,都是将文本模态信息用到预训练阶段,之后再迁移backbone到fine-tuning部分。

TCM直接用CLIP模型中的Image encoder和Text encoder作为编码器,同时又提出了一个language prompt generator用于为每张图像产生conditional cue。同时为了adapting CLIP的text encoder用于文本检测任务,设计了一个visual prompt generator来学习image prompt.

为了对齐 image embedding和text embedding,设计了一个instance-language matching方法来鼓励image encoder 探索来自cross-modal visual-language priors的text regions.

PS: 得益于CLIP强大的泛化能力,该工作在few-shot方面具有较大潜力。但是引入了另外一个比较大的问题:耗时。因为基于CLIP,其后期推理部署仍然是一个很大的问题。即使后来又出了Fast-TCM工作,速度也是一个问题。

(ECCV 2022 oCLIP) Language Matters: A Weakly Supervised Vision-Language Pre-training Approach for Scene Text Detection and Spotting

code: https://github.com/bytedance/oclip
oCLIP

该篇工作和VLPT-STD工作很类似,也是意图加强text embedding和image embedding之间的交互。但是其在训练过程中,优化目标是masked language modeling这一个任务。这一点没有VLPT-STD丰富。

其中亮点在于提出了Character-Aware Text Encoder。

在自然场景的图像中,图像通常包括一个或多个 text instances。在每一个text instance中,text tokens是序列相关的,而不同text instances中,text tokens往往是不相关的。这个特性就导致用一个general text encoder来encode这一张图像的text有些困难。这一点,在VLPT-STD中就没有考虑到。

而在character-aware text encoder中添加了learnt positional encooding来捕获每一个text instance中序列信息,忽略text instance间的相关性。这一点在Decoder部分也有所体现:在decoder中,并没有使用self-attention layer,就是为了忽略不同text instances间的相关性,消除没有标注text instances的影响。

PS: oCLIP与VLPT-STD工作各有所长。算是同时期工作,将两者工作结合,或许可以水一篇论文。嘻嘻。

(CVPR 2022 VLPT-STD) Vision-Language Pre-Training for Boosting Scene Text Detectors

code: 无
VLPT-STD

STKM工作是直接从image representations中decoding文本信息,本篇工作则通过仔细设计的pre-training任务(image-text contrasitive learning, masked language modeling, word-in-image predictioin)中,增加文本信息和图像信息的mutual alignment和cross-modal interaction,从而进一步增强backbone的能力。这一点参看下图即可明白:
在这里插入图片描述

PS: VLPT-STD工作,相比于STKM,更加一步加强了multi-model的交互和对齐,是的backbone提取特征能力更加丰富。在看这篇工作时,我就在想可以直接将文本框坐标信息也加入到训练中,类似于LayouLM系列。在论文Conlusion部分,也看到了作者也有同样想法,不知道现在有没有小伙伴已经做过了。

(CVPR 2021 STKM) Self-attention based text knowledge mining for text detection

code: https://github.com/CVI-SZU/STKM

STKM

论文的整体结构如上图所示,作者首次提出了text knowledge mining network,该network可以用于增强已有的各种文本检测算法,无痛涨点的同时,不影响已有文本检测算法推理的速度。

文本检测模型的训练,一般分为两个阶段:第一个阶段基于Synthtext数据集预训练,第二阶段基于ICDAR2015、ICDAR2017等数据集做fine-tuning。

STKM工作致力于设计一个text feature mining网络来使得第一阶段中的backbone学到更强的prior knowledge。STKM结构由CNN Encoder + Self-attention Decoder两大部分组成,如上图中的(a)部分。

PS:我个人比较喜欢这种工作。总结来说,不同于之前的EAST、PSENet,STKM引入文本信息到backbone中,丰富了backbone的特征提取能力。从论文中实验来看,并没有DBNet的对比工作,感觉应该是DBNet与STKM差不多算是同时期的工作了。

posted @ 2024-03-09 21:14  Danno  阅读(58)  评论(0编辑  收藏  举报