上一篇介绍了一下使用开源代码测试,这一篇介绍一下原理。
参考: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用
表示。需要缩小的像素通过下面式子得到:
上式中,表示要缩小的像素值,
表示多边形的面积,
表示多边形的周长,
表示缩小的比例。
缩小比例的计算方式如下所示:
上式中,表示最小的缩放比例,是一个超参数,取值范围为(0,1],本文取m=0.5。n为最终输出多少个尺度的分割结果,文章设为6。
3.4 损失函数