DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论

文章目录

  • 一、OCR简介
  • 二、CTPN(Connectionist Text Proposal Network)连接文本提议网络
    • 2.1 CTPN简介
    • 2.2 CTPN模型创新点
    • 2.3 CTPN与RPN网络结构的差异
    • 2.4 CTPN网络结构
      • 2.4.1 CTPN的整体结构与流程
    • 2.5 如何通过FC层输出产生Text proposals?
    • 2.6 竖直Anchor定位文字位置
    • 2.7 文本线构造算法
    • 2.8 CTPN的训练策略
    • 2.9 CTPN总结

CTPN论文下载:https://arxiv.org/pdf/1609.03605.pdf

一、OCR简介

文字识别也是图像领域一个常见问题。然而,对于自然场景图像,首先要定位图像中的文字位置,然后才能进行文字的识别。

所以一般来说,从自然场景图片中进行文字识别,需要包括2个步骤:

  • 文字检测(CTPN):解决的问题是哪里有文字,文字的范围有多少

  • 文字识别(CRNN):对定位好的文字区域进行识别,主要解决的问题是每个文字是什么,将图像中的文字区域进转化为字符信息。

OCR的作用:提取图像中的文字,并转换成文本形式,供后续NLP任务使用。

二、CTPN(Connectionist Text Proposal Network)连接文本提议网络

2.1 CTPN简介

文本检测本质上也属于物体检测,但是文本却跟常规的物体有较大区别。

CTPN的提出,基于:
①文本通常都是从左往右写的(水平),并且字之间的宽度都大致相同。
②固定宽度,来检测文本高度即可,但是如何应对变长序列呢?
③本质上还是RPN方法(可参考faster-RCNN),可将检测到的框拼在一起。
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第1张图片

2.2 CTPN模型创新点

CTPN的创新点主要由以下三点:

① 将文本检测任务转化为一连串小尺度文本框的检测;
② 引入RNN提升文本检测效果;
③ Side-refinement(边界优化)提升文本框边界预测精准度。

2.3 CTPN与RPN网络结构的差异

DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第2张图片
如上图所示,左图为RPN,右图为CTPN的网络结构。可以看到,CTPN本身就是RPN,唯一不同的是加入了双向LSTM获取时序方向的信息,使得模型可以序列性的预测文本的小片。

当然这里的不同之处主要有以下几点:
① 双向LSTM对文本行方向编码
② 标签构造方式不同:CTPN使用水平方向的切片框作为回归目标。

2.4 CTPN网络结构

原始CTPN只检测横向排列的文字。CTPN结构与Faster R-CNN基本类似,但是加入了LSTM层(CNN学习的是感受野内的空间信息,LSTM学习的是序列特征。对于文本序列检测,显然既需要CNN抽象空间特征,也需要序列特征,毕竟文字是连续的)。假设输入N Images:
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第3张图片
网络输出了三部分:
2K得分,2K回归,1K边界调整。
边界调整使得文本检测效果更好。

2.4.1 CTPN的整体结构与流程

整体思路:
VGG提取特征,BLSTM融合上下文信息,基于RPN完成检测。

细节流程:
1.首先通过BackBone架构网络VGG16进行特征的提取,其Conv5层输出N x C x H x W的特征图,由于VGG16的卷积网络中经过4个池化层累计的Stride为16。也就是Conv5层输出的Feature map中一个像素对应原图的16像素。

2.然后在Conv5上做3 x 3的滑动窗口,即每个点都结合周围3 x 3区域特征获取一个长度为3 x 3 x C的特征向量。如下图所示,输出为N x 9C x H x W的Feature map,该特征依然是由CNN学习到的空间特征。
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第4张图片
3.之后继续对上一步输出的Feature map进行Reshape操作:
在这里插入图片描述
4.然后以Batch = NH且最大时间长度Tmax=W的数据流输入Bi-LSTM,学习每一行的序列特征。Bi-LSTM输出为(N H) x W x 256,再经Reshape回复形状:
在这里插入图片描述
该特征既包含了空间特征,也包含了Bi-LSTM学习到的序列特征。

双向RNN的作用:
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第5张图片
如果我们单纯依靠1号框内的信息来直接预测1号框中否存在文字(或者说是不是文本的一部分),其实难度相当大,因为1号框只包含文字的很小一部分。但是如果我们把2号框和3号框的信息都用上,来预测1号框是否存在文字,那么我们就会有比较大的把握来预测1号框确实有文字。我们还可以看看为什么边缘的文本框的置信度会较中间的低呢?个人认为很大一部分原因就在于因为这些框都位于总文本的边缘,没有办法充分利用左右相邻序列的信息做预测(比如位于最左的文本框丢失了其右边的信息)。这就是双向LSTM的作用,把左右两个方向的序列信息都加入到学习的过程中去。

5.再然后经过“FC”层,变为N x 512 x H x W的特征

6.最后经过类似Faster RCNN的RPN网络,获得Text Proposals。

2.5 如何通过FC层输出产生Text proposals?

CTPN通过CNN和BLSTM学到一组“空间 + 序列”特征后,在"FC"后接入RPN网络。这里的RPN与Faster R-CNN类似,分为两个分支:

左边分支用于Bounding Box Regression。由于FC Feature map每个点配备了10个Anchor,同时只回归中心y坐标与高度2个值,所以RPN_bboxp_red有20个Channels;

右边分支用于Softmax分类Anchor。
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第6张图片

2.6 竖直Anchor定位文字位置

由于CTPN针对的是横向排列的文字检测,所以其采用了一组(10个)等宽度的Anchors,用于定位文字位置。Anchor宽高为:
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第7张图片
需要注意,由于CTPN采用VGG16模型提取特征,那么Conv5 Feature map的宽高都是输入Image的宽高的1/16。同时FC与Conv5 width和height都相等。如下图所示,CTPN为FC Feature map每一个点都配备10个上述Anchors。
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第8张图片
这样设置Anchors是为了:

  • 1.保证在x方向上,Anchor覆盖原图每个点且不相互重叠。

  • 2.不同文本在y方向上高度差距很大,所以设置Anchors高度为11-283,用于覆盖不同高度的文本目标。

注意:Anchor大小为什么对应原图尺度,而不是conv5/fc特征尺度?

这是因为Anchor是目标的候选框,经过后续分类+位置修正获得目标在原图尺度的检测框。那么这就要求Anchor必须是对应原图尺度!除此之外,如果Anchor大小对应conv5/FC尺度,那就要求Bounding box regression把很小的框回归到很大,这已经超出Regression小范围修正框的设计目的。

获得Anchor后,与Faster R-CNN类似,CTPN会做如下处理:

  • 1.Softmax判断Anchor中是否包含文本,即选出Softmax Score大的正Anchor;

  • 2.Bounding box regression修正包含文本的Anchor的中心y坐标与高度。
    在这里插入图片描述

vc,vh是回归预测的坐标;cya,ha是Anchor的中心y坐标和高度,vc*,vh*是Ground Truth

Anchor经过上述Softmax和bounding box regeression处理后,会获得下图所示的一组竖直条状text proposal。后续只需要将这些text proposal用文本线构造算法连接在一起即可获得文本位置。
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第9张图片

2.7 文本线构造算法

在上一个步骤中,已经获得了一串或多串text proposal,接下来就要采用文本线构造办法,把这些text proposal连接成一个文本检测框。
规则:分前向和后向两部分:
先向前走,对于Xi,基于重合度0.7(2K得分值)与位置距离(50像素)找到score值最大的Xj,接下来再反向走(规则不变),比较两次得分值大小来判断序列。
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第10张图片
为了说明问题,假设某张图有上图所示的2个text proposal,即蓝色和红色2组Anchor,CTPN采用如下算法构造文本线:

1.按照水平x坐标排序Anchor;

2.按照规则依次计算每个Anchor boxi的pair(boxj),组成pair( boxi,boxj);

3.通过pair( boxi,boxj)建立一个Connect graph,最终获得文本检测框.

下面详细解释。假设每个Anchor index如绿色数字,同时每个Anchor Softmax score如黑色数字。

文本线构造算法通过如下方式建立每个Anchor boxi的pair( boxi,boxj):

正向寻找:

1.沿水平正方向,寻找和 boxi水平距离小于50的候选Anchor;

2.从候选Anchor中,挑出与 boxi竖直方向overlapv > 0.7的Anchor;

3.挑出符合条件2中Softmax score最大的boxj

再反向寻找:

1.沿水平负方向,寻找和boxj水平距离小于50的候选Anchor;

2.从候选Anchor中,挑出与boxj竖直方向overlapv > 0.7的Anchor;

3.挑出符合条件2中Softmax score最大的boxk

最后对比scorei和scorek:

1.如果scorei >= scorek,则这是一个最长连接,那么设置Graph(i,j)=True;

2.如果scorei < scorek,说明这不是一个最长的连接(即该连接肯定包含在另外一个更长的连接中)。
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第11张图片
举例说明,如上图,Anchor已经按照x顺序排列好,并具有图中的Softmax score(这里的score是随便给出的,只用于说明文本线构造算法):

对于i=3的box3,向前寻找50像素,满足overlapv > 0.7且score最大的是box7,即j=7;box7反向寻找,满足 overlapv > 0.7且score最大的是box3,即k=3。由于score3 >= score3,pair( box3,box7)是最长连接,那么设置Graph(3,7)=True

对于box4正向寻找得到box7;box7反向寻找得到box3,但是score4 < score3,即pair( box4,box3)不是最长连接,包含在pair( box3,box7)中。

然后,这样就建立了一个N X N的Connect graph(其中N是正Anchor数量)。遍历Graph:

1.Graph(0,3)=True且Graph(3,7)=True,所以Anchor index 1→3→7组成一个文本,即蓝色文本区域。

2.Graph(6,10)=True且Graph(10,12)=True,所以Anchor index 6→10→12组成另外一个文本,即红色文本区域。

这样就通过Text proposals确定了文本检测框。

2.8 CTPN的训练策略

该Loss分为3个部分:
DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(1)——CTPN理论_第12张图片
Anchor前后景分类误差:该Loss用于监督学习每个Anchor中是否包含文本。 s^{*}_{i}={0,1}表示是否是Groud truth。

竖直方向坐标偏移回归误差:该Loss用于监督学习每个包含为本的Anchor的Bouding box regression y方向offset,类似于Smooth L1 loss。其中vj是si中判定为有文本的Anchor,或者与Groud truth vertical IoU>0.5。

边界处Anchor x的矫正误差:该Loss用于监督学习每个包含文本的Anchor的Bouding box regression x方向offset,与y方向同理。

前两个Loss存在的必要性很明确,但这个Loss有何作用作者没有解释(从训练和测试的实际效果看,作用不大)说明一下,在Bounding box regression的训练过程中,其实只需要注意被判定成正的Anchor,不需要去关心杂乱的负Anchor。这与Faster R-CNN类似。

2.9 CTPN总结

1.由于加入LSTM,所以CTPN对水平文字检测效果超级好。

2.因为Anchor设定的原因,CTPN只能检测横向分布的文字,小幅改进加入水平Anchor即可检测竖直文字。但是由于框架限定,对不规则倾斜文字检测效果非常一般。

3.CTPN加入了双向LSTM学习文字的序列特征,有利于文字检测。但是引入LSTM后,在训练时很容易梯度爆炸,需要小心处理

参考:
中文文字检测与识别项目

你可能感兴趣的:(AI,pytorch,OCR,算法,计算机视觉,pytorch,深度学习,OCR,图像智能字符识别)