上一篇介绍了一下使用开源代码测试,这一篇介绍一下原理。
参考:https://www.jianshu.com/p/5668e1e01e26
参考:《Shape Robust Text Detection with Progressive Scale Expansion Network》
网络结构:
论文中主要内容从第3节开始,PSENet的总流水线(管道)如上图所示。网络架构受FPN(Feature Pyramid Network)启发。
3.1 管道结构 如上图。
3.2 渐进尺度展开算法
实际文章中n=6,但是为了更方便解释,这里假设n=3,即网络最终输出了3张分割结果,首先从最小的分割结果开始,如上图(a)所示,能够找出四个分割区域。这四个分割区域用四种不同的颜色表示,这样能得到所有文本的中心区域,然后将这些区域与进行合并得到最终结果,结果分别如上图(c)和图(d)所示。上述依次合并的规则如上图(g)所示(Breadth-First-Search algorithm)。在合并的过程中可能会遇到如上图(g)中的冲突情况,在遇到冲突的情况下,采用"先到先得"的方式。
In the pseudocode, T,P are the intermediate results. Q is a queue. Neighbor(·) represents the neighbor pixels of p. GroupByLabel(·) is the function of grouping the intermediate result by label. “S i [q] =True” means that the predicted value of pixel q in S i belongs to the text part.
上面的伪代码中,T、P是中间结果,Q是队列,Neighbor(·)代表p的邻接像素,GroupByLabel(·)是按标签分组的函数,S i [q] =True表示Si中的像素q的预测值属于文本部分。
3.3 标签生成
因为网络输出有n个分割结果,所以对于一张输入图片来说groundtruth也要有n个。这里groundtruth就是简单的将标定的文本框进行不同尺度的缩小,如下图所示。下图中(b)就是标定框也是最大的groundtruth ,如下图(c)的最右侧图所示。为了获得下图(c)中的其他图,文章采用Vatti clipping算法将原多边形缩小个像素得到。最终得到的n个groundtruth用表示。需要缩小的像素通过下面式子得到:
(1)
上式中,表示要缩小的像素值,表示多边形的面积,表示多边形的周长,表示缩小的比例。
缩小比例的计算方式如下所示:
(2)
上式中,表示最小的缩放比例,是一个超参数,取值范围为(0,1],本文取m=0.5。n为最终输出多少个尺度的分割结果,文章设为6。
3.4 损失函数
PSENet损失函数可以定义如下:
(3)
其中与分别代表文本的损失和多个缩小的文本的损失,用于平衡与之间的权重。
一般,在自然图像中,文本只占很小的区域,这会导致使用二值交叉熵时网络的预测结果偏向于非文本区域。受论文[20]的影响,我们在实验中采用了dice coefficient。 dice coefficient的定义如(4)式:
(4)
其中,和是像素的分割结果和Ground Truth 。
此外,还有许多类似于文字笔画的模式,如栅栏、格等。因此,我们在训练中采用在线难例挖掘(OHEM) 到LcL_cLc,以便更好地区分这些模式。
的重点是分割文本和非文本区域。 让我们考虑OHEM给出的训练mask为M,因此可以写为:
(5)
是收缩文本实例的损失。 由于它们被完整文本实例的原始区域包围,因此在分割结果SnS_nSn中忽略了非文本区域的像素,以避免一定的冗余。因此,可以定义为:
(6)
其中,W是一个掩码,它忽略中非文本区域的像素,指中像素(x,y)的值。
上面时论文作者实验结果,从图(a)中可以看出n=6(3.2 渐进尺度展开算法中有对n的说明)时就能取得较好的结果,没有必要再增加缩放个数;从图(b)中可以看出m=0.5时取得较好的结果,太大或太小性能都会有所下降。n=1,m=1.0对应的是原图不缩放。