EAST模型与seglink模型
一、EAST(Efficient and Accuracy Scene Text)模型
相关资料:https://blog.csdn.net/attitude_yu/article/details/80724187(中文翻译)
论文原文:https://arxiv.org/abs/1704.03155
代码地址:https://github.com/argman/EAST
内容:
1.概述:该模型只有两个阶段:
第一个阶段是基于全卷积网络(FCN)模型,直接产生文本框预测;
第二个阶段是对生成的文本预测框(可以是旋转矩形或矩形)经过非极大值抑制(NMS,简单地说就是基于高度相关的条件下通过阈值合并相邻文本框)以产生最终结果。该模型放弃了不必要的中间步骤,进行端到端的训练和优化
2.网络结构
特征提取-特征合并-输出层
输入:虽然这个网络中没有提输入,但是还是有必要简单了解一下,该模型的输入的图像为512x512;
此外,虽然原文用的PVANet网络,但实际运用中多采用vgg16;
特征提取:首先,利用在ImageNet数据集上预训练的卷积网络参数初始化;然后,基于VGG16模型从特征提取阶段中提取四个级别的特征图(记为fi),其大小分别为输入图像的1/32 1/16 1/8和1/4。另外,提取了pooling-2到pooling-5后的特征图用于特征合并。
特征合并:逐层合并,在每个阶段合并。
首先,将来自上一个阶段的特征图首先被输入到一个unpooling层来扩大其大小;然后,与当前层特征图进行合并(通道);最后,通过conv1×1 减少通道数量和计算量;conv3×3,将局部信息融合以最终产生该合并阶段的输出。在最后一个合并阶段之后,conv3×3层会生成合并分支的最终特征图并将其送到输出层。
输出层:
包含若干个conv1×1操作,以将32个通道的特征图投影到1个通道的分数特征图Fs和一个多通道几何图形特征图Fg。几何形状输出可以是RBOX或QUAD中的任意一种
RBOX:几何形状由4个通道的水平边界框(AABB)R和1个通道的旋转角度θ表示。AABB 4个通道分别表示从像素位置到矩形的顶部,右侧,底部,左侧边界的4个距离
QUAD:使用8个数字来表示从矩形的四个顶点到像素位置的坐标偏移,由于每个距离偏移量都包含两个数字(Δxi;Δyi),因此几何形状输出包含8个通道。
3.关键操作
(a)文本矩形(黄色虚线)和缩小的矩形(绿色实线); ——缩小:一般将标注框缩小0.3比例的大小进行训练,减少标注误差。
(b)文本score 特征图;
(c)RBOX框几何图;
(d)每个像素到矩形边界的4个通道距离;
(e)旋转角度。
对上述过程总结:
首先,缩小矩形,然后生成一个旋转矩形,以最小面积覆盖该区域;然后,对于RBOX标注框,计算每个有正分数的像素与文本框4个边界的距离;对于QUAD 标注框,计算每个有正分数的像素与文本框4个顶点的坐标偏移。
NMS:局部感知(本文提出逐行合并几何图形,假设来自附近像素的几何图形倾向于高度相关)
1.先对所有的output box集合结合相应的阈值(大于阈值则进行合并,小于阈值则不合并),将置信度得分作为权重加权合并,得到合并后的bbox集合;
2.对合并后的bbox集合进行标准的NMS操作。
4.损失函数:
其中,Ls和Lg分别表示分数图和几何图的损失,λg表示两个损失之间的重要性(本文实验λg=1)
对应的值:ls:分数损失,是指预测值与标注值之间的损失,具体采用的方法是:类平衡交叉熵(解决类别不平衡训练)
lg指图形损失:包括RBOX的损失,采取的是IOU损失以及角度损失;和QUAD损失,计算的则是文本框的预测偏移量。
二、SEGlink
1.论文网址:https://arxiv.org/abs/1703.06520
2.代码地址:https://github.com/bgshih/seglink
3.具体实现解读:
(1)网络结构图
输入与输出:
首先是输入,因为网络全部采用卷积结构,所有对输入图片大小没有要求,可以是任意大小和任意长宽比
输出文章称为segments和links。segments可以理解为是一个一个的小框,这些小框类似于SSD中的default boxes,它们不一定一个框能框一个字,可能就框一个字的一部分,一个segment用公式
表示,其中xb,yb表示segment的中心,wb,hb表示segment的宽和高,θb表示该segment的旋转角。links就是将segments连接起来,说白了就是两个框是不是同一个文本的一个概率值。
网络的backbone(骨架)采用的是VGG-16,将VGG中所有的全连接层改为卷积层(fc6、fc7改为conv6、conv7),并在conv7后面还加了若干个卷积层(conv8_1 - conv11),训练与检测的网络结构类似于SSD,只是这里的feature map是从conv4_3,conv7,conv8_2,conv9_2,conv10_2,conv11这6个层中提取出来的。最后这六层feature map经过卷积处理得到segments和links
(2)Segment的检测方法:
首先需要计算default box(均是没有旋转角的矩形);
default boxes的位置可以这样理解,相对于每一个卷积出来的feature map中的每个点都可以找到在原图中的对应点,这个对应于feature map上的在原图中的点就是default boxes的位置。值得注意的是因为提取出了6层feature map,每层都要输出segments。具体的定义如下:
假定输入图片大小为wi x hi;segments定义为b:
其中:1个点在feature map上的坐标为(x,y)对应原图的坐标为(xa,ya)
此外根据经验函数可得出al(default box 的长宽均为该常数):
每个feature ma 经过卷积后输出的pipline为7;其中两个表示segment的置信度(0,1)以及五个位置偏移量:
因此可以求得segment的位置
(3)links的检测方法:其中links分为Within-Layer与Cross-Layer Link
Within-Layer link 检测
一个link连接着相邻两个segment,表示他们是属于同一个字或者在同一框中。link的作用不仅是将相邻的segment连接起来,还可以区分邻近的segment但是不属于同行或者同一个标定框。
检测link使用的feature map与检测segment使用的是同一feature map,所以对于同一层feature map来说,一个segment有其他8个相邻的segment,那links就是每个feature map经过卷积后输出16个通道,每两个通道表示segment与邻近的一个segment的link。
Cross-Layer Link
简单的说就是相邻层的feature map之间的segments相连(为了避免不同层输出segment是同一个位置可能只是大小不一样,最终导致不同层产生的框的合并会出现问题);
这个网络有个重要的属性方便我们进行Cross-Layer Link连接,就是我们提取出来的6个feature map中,上一层的大小是下一层的四倍(长宽各两倍)。但是值得注意的是,只有feature map是偶数的时候才满足这个属性,所以在实际操作中,输入图像的长宽大小都要缩放到128的整数倍。例如,一张1000*800的图片,首先会先缩放到1024*768大小。
由于上层的feature map为下一层的四倍大小,那相当于一个segment与另一层的四个segment相邻。这时除1-th的feature map外,其他五个feature map每个经过卷积后都要输出8个通道,每两个通道表示一个Cross-Layer Link。
每层feature map的输出:
(4)利用Links连接segments
上述思路大致可以简述为:
1.将连接后的所有segments当作一个集合B;
2.求解B集合中的旋转角的平均值,作为文本框的旋转角
3.将tanθb作为斜率建立一些列直线,然后利用最小二乘法(B中所有segments的中心点到直线距离的的最小值)找到那条直线。
4.将segment的中心垂直投影到找到的直线。然后找到最远的两个点,其坐标均值为最终输出的框的中心,然后就是长度为两点距离;θ为均值
(5)训练
正样本:
(1)default box的中心在标定文本框内
(2)default box的长宽al与文本框的高h满足一定公式:
负样本:不满足上述两点即为负样本
位置偏移量:计算方式
损失函数:
参数解读:
ys,yl:segments 和links的标签值
cs,cl:segments 和links的预测值
Lconf:softmax loss,用于计算segments和links置信度的损失
Ns:图像中所有正样本的default boxes的个数
Nl:图像中所有正样本的links的个数
λ作者默认均为1;
(6)结果:
不足:还是不能很好的的解决同行的画在一个框的问题。例如(a),(b)中的红色的框。