文章目录
Scene Text Detection via Holistic, Multi-Channel Prediction
arXiv 2016
pipeline
考虑文本区域,单个字符以及它们之间的关系作为三个需要被估计的性质。
pipeline很简单,原图输入网络,最终输出三个map,对应text regions, characters and linking orientations of adjacent characters。
ground truth
gt也是对应的三个map:文本区域,字符,以及相邻字符之间的连接方向。
- 文本区域map的构建很简单,前景置1,背景置0;
- 字符map的构建和文本区域map类似,但为了避免单词内的字符堆在一起,所以就将前景区域缩小为原来的1/2;
- 相邻字符之间的连接方向:赋值为该处对应的gt多边形的角度,且角度范围被规范为 [ − π / 2 , π / 2 ] [-\pi/2,\pi/2] [−π/2,π/2]内,linking orientations都通过shift 和normalization归一化到[0,1]之间。
loss function
训练时通过比较gt maps和pred maps即可计算损失,所以损失包含三个部分。
文本和字符区域的损失都可以用balanced交叉熵来计算,而连接方向作者定义了损失函数:
inference
在给出文本区域的预测后,我们需要通过处理pred maps完成检测任务。
- 通过使用自适应阈值分割相应的预测图来搜索文本区域候选;
- 通过使用自适应阈值分割相应的预测图得到字符的候选。请注意,由于在训练阶段字符的比例缩小到其原始比例的一半,因此候选字符的估计半径乘以系数2。
- 同一文本区域内的字符候选们:利用Delaunay triangulation来生成的三角形的边作为每两个顶点的边,边的权值定义为两个字符的相似性;
- 用最大生成树求图模型的分割,分割中的每个集合组成一个text line。
(很多细节没有在此陈列,但可以看得出,这个inference过程太复杂了吧!)
有些数据集的特定任务上,还涉及到单词分割。
experienment
在不同数据集上的表现都还行,在640×640的图上,平均需要0.42s产生三个预测maps。没有经过其他语言的测试,直接将模型用于处理其他语言时,该模型也能很好的泛化。
Limitations
在处理某些特定场景时,效果不好,如模糊或者高亮。
模型size很大,speed不够。
WordFence: Text Detection in Natural Images with Border Awareness
ICIP 2017 WordFence
这篇论文提出了一个新的概念:wordfence。
pipeline
论文篇幅过短,没有涉及到pipeline的很多大篇幅讲解,作者设计的网络使用了三个平行的卷积层,均使用相同的kernel size,但使用了不同的dilation parameters,这使得网络可以具备不同尺寸的感受野,从而捕捉到不同尺寸的文本信息。且dilated conv没有引入参数,保证了网络能够很好地训练。
pixelwise的softmax loss倾向于让网络在单词的边缘产生merged segmentations,为了解决这个问题,作者提出了一种简单的方法:不是简单地用0 1来做文本和非文本的分类,而是将每个独立的单词的边缘作为第三类。这一类像素点将会收到惩罚,从而模型被驱使用一个认为的barrier围绕每个单独的单词,这大大降低了阅读单独单词的难度和计算成本。在Inference阶段,单个单词被清晰的相互分割,然后可以使用CC来提取。
ground truth
loss function
weighted softmax loss function:
为了避免由于样本点的类别分布不均衡导致最终网络会倾向于在每个像素点都产生那个类别的众数,所以这里提出了一个weighted softmax loss function,对ground truth labels做统计,对相应的损失加上对应的权重。
PixelLink
作者认为,语义分割产生的score map中蕴含着很多的位置信息,所以bounding regression不是必不可少的。但如果单纯依靠一个score map来检测文本,那么当两个文本距离非常近的时候,是很难通过区分的,所以这里需要借用instance segmentation来解决。
pipeline
从上图可以看出pipeline:
- 用CNN提取得到text /non text和link 预测对应的maps,分别channels数位2和16。其中,16是因为每个pixel预测其附近的8个邻居是否有连接关系(16=8×2);
- 使用两个threshold来处理预测的pixel prediction和link prediction,得到positive pixels和positive links;
- 根据positive links来连接邻近的pixels,产生多个连通分量,每个连通分量代表着一个文本实例;
注意的是:每对pixels之间的link会被预测两次,当这两个links中的任意一个为正时,将会认为这两个pixels应该被连接。 - 使用OpenCV的minAreaRect之类的方法得到最终的连通分量的bounding boxes。
(上述的后面三步都是inference阶段的工作,训练阶段直接得到pred然后计算损失)
ground truth
训练阶段比较的是link map和text or non text map,所以需要生成相应的这两个gt maps。
文本区域内部的像素被标记为正,外面的像素被标记为负,如果有重叠区域的话,将重叠区域标记为负。
如果给定某个像素和其8个邻居,如果它们属于一个文本实例,则它们之间的连接被标记为正,否则为负。
loss function
L = λ L p i x e l + L l i n k L=\lambda L_{pixel}+L_{link} L=λLpixel+Llink
loss on pixels
由于不同的文本实例具有不同的大小,如果我们直接对所有像素赋予相同的权值,那么小区域的文本实例预测出错时,可能仍然会有较高的评价指标,因而影响模型在小的文本实例上的预测效果。作者这里的做法时,让每个文本实例都能拥有相同的权值,而文本实例内部的像素点进一步对该权值进行瓜分。
假设第 i i i个实例的面积是 S i S_i Si,每个实例都有相同的权值 B = S N B=\frac{S}{N} B=NS,也就是总面积除总实例数。那么第 i i i个实例中的每个正像素的权重是: w i = B S i w_i=\frac{B}{S_i} wi=SiB。
加上online hard example mining策略,最终得到了一个权重矩阵 W W W,该矩阵中包含了所有正像素点和被选择的负像素点的权重信息,最终 L p i x e l = 1 1 + r W L p i x e l _ C E L_{pixel}=\frac{1}{1+r}WL_{pixel\_{CE}} Lpixel=1+r1WLpixel_CE。
loss on links
正links和负links的损失计算是独立的,且只会在正的pixels上计算:
最终的link预测损失是一个class balanced 交叉熵损失:
L
l
i
n
k
=
L
l
i
n
k
_
p
o
s
r
s
u
m
(
W
p
o
s
_
l
i
n
k
)
+
L
l
i
n
k
_
n
e
g
r
s
u
m
(
W
n
e
g
_
l
i
n
k
)
L_{link}=\frac{L_{link\_pos}}{rsum(W_{pos\_link})}+\frac{L_{link\_neg}}{rsum(W_{neg\_link})}
Llink=rsum(Wpos_link)Llink_pos+rsum(Wneg_link)Llink_neg
inference
- 使用两个threshold来处理预测的pixel prediction和link prediction,得到positive pixels和positive links;
- 根据positive links来连接邻近的pixels,产生多个连通分量,每个连通分量代表着一个文本实例;
注意的是:每对pixels之间的link会被预测两次,当这两个links中的任意一个为正时,将会认为这两个pixels应该被连接。 - 使用OpenCV的minAreaRect之类的方法得到最终的连通分量的bounding boxes。
- 设置某些限制筛选掉一部分极大概率是噪声的预测,比如在IC5的实验中,如果一个box的最短边小于10像素,或者面积小于300,就会被丢弃。
experienment
使用了online haed example mining:假设一张图片中总的文本面积是S,将会采样 r × S r\times S r×S个负像素样本点。
数据增强:按0.2的概率旋转图片,随机crop。最后resize。小于10个像素的文本案例将会被忽略,处理数据后保留小于20%的也会被忽略。