Advertisement

ICCV2019《Convolutional Character Networks》论文阅读笔记

阅读量:

前言

新年来临之际,久经沙场的小作者终于完成了这篇论文写作工作。
经过数月的研究与打磨,
本文致力于实现自然场景文本检测识别技术。
文章中设计的是one-stage的模型,
分别对word-level和char-level进行了检测,
并输出完整的框图结构;
然而,在字符级别的识别上仍需进一步优化。
鉴于现有的数据集大多缺乏字符级别的标注信息,
在此提出采用合成图片来辅助提升字符级别的检测能力。
实验结果显示,
在多个公开基准数据集上该方法均取得了显著性能提升,
其中提供了一份代码库(目前仅包含推理接口功能)。
关键词:Scene Text DetectionOne-stage
论文链接:
https://arxiv.org/abs/1910.07954
源码链接:
https://github.com/MalongTech/research-charnet

注:编辑水平有限


概述

一般而言,在处理文本检测和文本识别时通常会采用单独训练后再相互连接的应用方式。然而这种基于两阶段架构的设计存在明显的局限性。主要问题是现有技术未能有效结合并整合这两种功能于同一个一阶段模型中。因此本文提出了以下几项创新性成果:

  • 开发出了基于单阶段架构的CharNet系统实现了字符识别与检测的一体化过程,并为此类任务设计了一种可扩展的模块结构。
    • 通过提出迭代优化的字符检测方案使该系统能够在合成数据环境下进行参数优化,并进一步实现无标签场景下的自监督学习能力。

Convolutional Character Networks

overview
传统的端到端文本识别架构通常受限于区域采样(ROI)操作及池化机制,并与基于RNN的单词级识别模块协同工作。该论文提出了一种 novel的一阶卷积框架CharNet,在单阶段架构下实现了全面的目标提取能力:字符分支专门负责字符级别的检测与识别;而文本检测分支则通过定位每个实例级文本框来完成目标提取任务。该网络架构采用并行设计,在单一计算流程中集成字符级别的语义分析与整体场景理解功能

在这里插入图片描述

字符分支也可以整合为一个单阶段的文本检测框架。训练模型时需要同时处理实例级和字符级的边界框,在推理阶段则一次性输出两个层级的结果。现有的大部分文本数据集缺乏对字符级别的标注(贵),因此论文提出了一种迭代学习策略用于设计字符检测分支。经过训练后得到的字符检测器能够逐渐迁移至真实图像,并使整个模型实现了弱监督学习。Backbone网络采用了ResNet-50与Hourglass网络结构,并最终使用了四分之一原始分辨率的特征图。

  • Character Branch
    word-level的模型一般是基于RNN的序列化模型,相比比char-level模型很难优化。最近一些研究表明引入char-level的注意力机制,能提高RNN-based模型的效果。作者认为,这样相当于引入了附加约束条件,减少了word-level在优化过程中的搜索空间,从而优化结果。(原文: This enables the models to have the ability to identify characters more accurately, and essentially adds additional constraints to the models which in turn reduce the search space, leading to performance boost.
    最后介绍一下作者设计的新字符分支,再上图中可以看到又细分成了三个平行的子分支,分别是:实例分割、字符检测和字符识别。都是用卷积层堆叠起来的,模型结构比较简单,具体可以参照代码。文本实例分割子分支以二值化掩码作label,输出一个文本区/非文本区的二通道概率图。字符检测参照EAST模型的设计,检测框用五个参数表示旋转矩形框。字符识别部分对整个输入的feature map,产生分类label数量channel的概率图。总之,三个分支的输出空间维度都等于输入的feature map,最后保留置信度大于0.95的检测框,并以识别分支接softmax得到最终结果。

  • Text Detection Branch
    该分支专门处理较高层级的对象(如单词、行文),提供丰富的语义信息以将识别出的字符分组。在实际应用中分为两种类型:一种是多方向性和弯曲性的问题场景。
    (1) 多方向性问题场景:采用基于EAST的方法进行改进;同样保留置信度大于0.95的所有预测边界框。
    (2) 弯曲性问题场景:采用方向场对Textfield进行优化。
    最后将所有与识别结果iou超过阈值的对象分配至相应的word框中作为最终结果输出。

随后定义了“correct”实例(即该实例中的检测字符数量与该实例标签字符串长度一致)。主要方法如下:
(i) 对合成数据集进行模型整体训练。
(ii) 在真实数据集上执行一次测试,在测试结果中将被判定为“正确”的correct instance的检测框作为ground truth(GT)。具体而言,在真实数据集中的每一个instance,“正确”的将被用来训练character branch,“错误”的则仅用于训练text detection branch。(这里有一点疑问:是否仅根据数量来判断是否为“正确”的?检测框位置偏移了怎么办?这可能是我对描述的理解出现了偏差。)
(iii) 重复上述过程,在多次迭代后,character branch将逐渐适应真实数据集的分布特性,并最终生成越来越多的“正确”实例。

总结

论文在结构设计方面关注较少,并未对其base model进行深入修改说明。转而将重点放在Iterative Character Detection部分上,在实验结果中取得了显著提升。目前作者提供的源码中未包含相应的训练内容。个人认为模型训练过程可能较为复杂和耗时,并期待作者能提供更多关于模型训练过程的信息

全部评论 (0)

还没有任何评论哟~