Efficient and Accurate Arbitrary-Shaped Text Detection with Pixel Aggregation Network

Wenhai Wang, Enze Xie, Xiaoge Song, Yuhang Zang, Wenjia Wang, Tong Lu, Gang Yu, Chunhua Shen

论文介绍

背景简介

场景文本检测是场景文本阅读系统的重要一步,随着卷积神经网络的快速发展,场景文字检测也取得了巨大的进步。尽管如此,仍存在两个主要挑战,它们阻碍文字检测部署到现实世界的应用中。第一个问题是速度和准确性之间的平衡。第二个是对任意形状的文本实例进行建模。最近,已经提出了一些方法来处理任意形状的文本检测,但是它们很少去考虑算法的运行时间和效率,这可能在实际应用环境中受到限制。

之前在CVPR 2019上发的PSENet是效果非常好的文本检测算法,处理速度很快,准确度很高,但后处理过程繁琐,而且没办法和网络模型融合在一起,实现训练,导致其整体运行速度很慢。于是PSENet算法的原班作者提出了PAN网络,使其在不损失精度的情况下,极大加快了网络inference的速度,因此也可以把PAN看做是PSENet V2版本。

网络结构

上图为PAN的整个网络结构,网络主要由Backbone + Segmentation Head(FPEM + FFM) + Output(Text Region、Kernel、Similarity Vector)组成。

本文使用ResNet-18作为PAN的默认Backbone,并提出了低计算量的Segmentation Head(FPFE + FFM)以解决因为使用ResNet-18而导致的特征提取能力较弱,特征感受野较小且表征能力不足的缺点。

此外,为了精准地重建完整的文字实例(text instance),提出了一个可学习的后处理方法——像素聚合法(PA),它能够通过预测出的相似向量来引导文字像素聚合到正确的kernel上去。

下面将详细介绍一下上面的各个部分。

Backbone

Backbone选择的是resnet18, 提取stride为4,8,16,32的conv2,conv3,conv4,conv5的输出作为高低层特征。每层的特征图的通道数都使用1*1卷积降维至128得到轻量级的特征图Fr。

Segmentation Head

PAN使用resNet-18作为网络的默认backbone,虽减少了计算量,但是backbone层数的减少势必会带来模型学习能力的下降。为了提高效率,作者在 resNet-18基础上提出了一个低计算量但可高效增强特征的分割头Segmentation Head。它由两个关键模块组成:特征金字塔增强模块(Feature Pyramid Enhancement Module,FPEM)、特征融合模块(Feature Fusion Module,FFM)。

FPEM

Feature Pyramid Enhancement Module(FPEM),即特征金字塔增强模块。FPEM呈级联结构且计算量小,可以连接在backbone后面让不同尺寸的特征更深、更具表征能力,结构如下:

FPEM是一个U形模组,由两个阶段组成,up-scale增强、down-scale增强。up-scale增强作用于输入的特征金字塔,它以步长32,16,8,4像素在特征图上迭代增强。在down-scale阶段,输入的是由up-scale增强生成的特征金字塔,增强的步长从4到32,同时,down-scale增强输出的的特征金字塔就是最终FPEM的输出。
FPEM模块可以看成是一个轻量级的FPN,只不过这个FPEM计算量不大,可以不停级联以达到不停增强特征的作用。

FFM

Feature Fusion Module(FFM)模块用于融合不同尺度的特征,其结构如下:

最后通过上采样将它们Concatenate到一起。

模型最后预测三种信息:
1、文字区域
2、文字kernel
3、文字kernel的相似向量

Loss

总的loss如上,其中 L t e x Ltex Ltex L k e r Lker Lker分别是文本实例和kernel的分割loss, L a g g Lagg Lagg是衡量文本实例和其对应kernel的loss, L d i s Ldis Ldis是不同文本实例的kernel的loss。 α \alpha α β \beta β是平衡各个loss的值,设为0.5和0.25。

如上图所示, L t e x Ltex Ltex L k e r Lker Lker的公式和psenet一致,使用dice loss。论文的重点在于 L a g g Lagg Lagg L d i s Ldis Ldis,下面分别描述。

Aggregation Loss

L a g g Lagg Lagg用于衡量文本实例和其对应kernel的loss,其作用是保证同一文本实例的kernel和文本实例内其他像素点之间的距离小于 δ a g g \delta agg δagg

其中, N N N是图像中文本实例的数量, T i Ti Ti表示第 i i i个文本实例, K i Ki Ki是文本实例对应的kernel。 D ( p , k i ) D(p,ki) D(p,ki)定义的了文本实例 T i Ti Ti内的像素 p p p K i Ki Ki之间的距离。 δ a g g \delta agg δagg是一个常量,默认0.5, F p Fp Fp是网络在像素 p p p处输出的相似度向量, G ( . ) G(.) G(.) K i Ki Ki的相似度向量。

G ( . ) G(.) G(.)的计算就是对于 K i Ki Ki里的每一个像素 q q q,网络在像素 q q q处输出的相似度向量 K i Ki Ki的像素点数量, ∣ K i ∣ |Ki| Ki K i Ki Ki的L1范数,这里代表的就是 K i Ki Ki里像素点的数量。

D ( p , k i ) D(p,ki) D(p,ki)里的 ∣ ∣ F ( p ) − G ( K i ) ∣ ∣ ||F(p)-G(Ki)|| F(p)G(Ki)表示 F ( p ) − G ( K i ) F(p)-G(Ki) F(p)G(Ki)的L2范数,是一个用于衡量像素点到 K i Ki Ki距离的值,值越小表示相似度越大,公式中距离小于 δ a g g \delta agg δagg的像素点就没必要参与loss计算了,关注那些距离远的值即可。

Discrimination Loss

L d i s Ldis Ldis用于是不同文本实例的kernel的loss,其作用是保证任意两个kernel之间的距离> δ d i s \delta dis δdis。即对于每一个文本实例kernel,分别计算和其他kernel的距离,公式如上所示。

其中, δ d i s \delta dis δdis是一个常量,默认3。当两个kernel之间的距离 ∣ ∣ G ( K i ) − G ( K j ) ∣ ∣ ||G(Ki)-G(Kj)|| G(Ki)G(Kj)> δ d i s \delta dis δdis时,就表示这两个kernel的距离已经足够远了。

另外,在训练过程中, L t e x Ltex Ltex的计算使用的OHEM,正负像素之比是1:3,计算 L k e r Lker Lker L a g g Lagg Lagg L d i s Ldis Ldis时均只考虑ground truth内的文本像素。

后处理

  1. 从kernel中通过连通域确定初始的文本实例集合 K K K
  2. 对于每一个文本实例 K i Ki Ki,按4方向从text_region中融合文本像素。融合条件: 文本像素点 p p p K K K之间similarity vectors的欧式距离< d d d (测试过程中 d d d默认为6)。
  3. 重复步骤2直到text_region没有文本像素。

项目介绍

项目背景

项目为百度飞桨起航菁英计划团队赛中复现的论文。项目基于 Paddle 2.1.2Python 3.7 进行开发并实现论文精度,十分感谢百度提供比赛平台和 GPU 资源!

项目实现

复现心得

正所谓“磨刀不误砍柴工”,复现论文前,如果对论文的整体结构有所把握,接下来的复现过程中可能会省力很多。以复现PANet为例,当了解到PANet是PSENet的改进后,我们学习参考了PSENet的复现,少走了不少弯路。此外,PaddlePaddle与Pytorch的函数并非完全对应,有部分函数需要自己实现。在了解了论文细节后,实现函数能够更加轻松。

在复现过程中,主要参考PaddlePaddle的API文档与Pytorch的API文档,需要耐心与细心。比如PaddlePaddle中Softmax包含参数axis,而Pytorch中Softmax对应参数为dim。

除此以外,遵循PaddlePaddle官方提供的论文复现步骤,可以及时找到问题所在环节,减少后期的debug的时间,提升论文复现效率。

参考链接

论文复现指南

Paddle API 文档

PyTorch-PaddlePaddle API映射表

项目使用

数据集准备

数据集推荐按照$Paddle-PANet-main/data进行设置。如果您的文件结构不同,则可能需要修改dataloader中相应的内容。

Paddle-PANet-main
└── data
    └── CTW1500
        ├── train
        │   ├── text_image
        │   └── text_label_curve
        └── test
            ├── text_image
            └── text_label_curve
!mkdir Paddle-PANet-main/data
!unzip -q /home/aistudio/data/data113487/ctw1500.zip -d Paddle-PANet-main/data

预训练模型准备

下载resent18预训练模型:pretrain_resnet18

密码: j5g3

在正式开始训练前,请将resnet18预训练模型放置到$Paddle-PANet-main/pretrained/文件夹下。如果不使用预训练模型,则需要修改config中的设置。

!mkdir Paddle-PANet-main/pretrained
!mv /home/aistudio/data/data113510/resnet18.pdparams Paddle-PANet-main/pretrained

环境准备

Python 3.6+
paddlepaddle-gpu 2.0.2
nccl 2.0+
mmcv 0.2.12
editdistance
Polygon3
pyclipper
opencv-python 3.4.2.17
Cython

训练

项目的环境准备、启动命令已经写入train.sh中,执行train.sh即可完成环境所需依赖的安装,并启动训练。

%cd Paddle-PANet-main/
sh train.sh

如果需要恢复训练,则执行如下命令:

python train.py ${CONFIG_FILE} --resume ${CHECKPOINTS_STORE_PATH}

例如:

python train.py config/pan/pan_r18_ctw_train.py --resume checkpoints/pan_r18_ctw_train

评估

CTW数据集地址:CTW
执行test.sh进行评估,评估结束后生成res.txt,存储模型的评估结果。

sh test.sh

实验结果

MethodBackboneFine-tuningConfigPrecision (%)Recall (%)F-measure (%)ModelLog
mmocr_PANetResnet18Nctw_config77.683.880.6
PAN (paper)ResNet18Nconfig84.677.781.0--
PaddlePaddle_PANetResNet18Npanet_r18_ctw.py84.5178.6281.46ModelLog

从第500轮开始,每十轮保存一次模型。最终根据F-measure选择了第570轮保存的模型参数,F-measure为81.46,超过验收标准80.6。

关于论文

–> 论文链接
–> 论文 github 地址
–> 复现 github 地址

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐