问题描述
我们需要从任何图像(包含文本)检测文本区域,这个图像可以是任何具有不同背景的东西。在检测到图像后,我们也必须识别它。
FOTS的完整形式是快速定向文本点亮。可以在任何自然场景中检测和识别任何文本。
在上面的图像中,FOTS给出了结果,它检测到“间隙”文本区域和图像(场景)中的所有文本区域,并识别出它是“间隙”、“50”和“GAP”等。这就是我们在这篇文章中要做的。
现在这个任务可以用两个不同的部分检测和识别来完成。在检测部分检测场景中的文本区域,在识别部分识别文本,什么是文本?(见上图)所以对于检测,我们使用CNN,对于识别,我们将在每个检测区域上使用一些序列解码器。
数据集
对于这个问题,我们将使用ICDAR 2015数据集。我们也将使用一个合成的文本图像数据集。
这里我们将使用ICDAR 2015数据集。其中有三种类型的数据。
训练集图像-
我们有1000个图像用于检测文本目的。
训练集定位和转录目标标注-
我们有1000个带有角坐标和标签(文本)的文本文件。假设在一个文本文件中,我们有5行,这意味着我们在相应的图像中有5个文本多边形。在每一行,我们有8个坐标(x1, y1, x2, y2…)和一个标签。
训练集文字图像,文本标注-
提供了与单词的轴向包围框相对应的~4468个切出的单词图像,并提供了单个文本文件,其中包含每个单词图像内包围形状的相对坐标。在一个单一的文本文件中提供的真实值。
同时也有测试图像来进行识别和检测。
但是对于训练识别模型,我使用了数据的增广,从合成的文本数据中提取了近15万幅文本图像。
在合成数据中,我们有文本图像,而在图像中写入的文本就是图像的名称,因此我们可以从图像的名称中提取图像名称。
损失函数
我们将使用在实际论文中建议的损失函数。对于score-map,我们将使用交叉熵损失。
在这一损失中,我们正在计算score-map中的预测概率与实际概率的差异
对于边框,我们使用IOU,对于旋转,我们使用λθ(1−cos(θx, θ∗x)旋转角损失。
这里R_cap是预测的边界框,R*是实际的边界框,所以这里log中的分子项是预测和实际之间的交叉区域,而标记项是这两个区域的并集。现在我们用这个来求截面积
其中d1、d2、d3、d4为一个像素到上、右、下、左边界的距离。这里w_i和h_i是截面积的宽度和高度,现在我们可以通过两者相乘得到截面积。
现在联合区域将是- area_real+area_pred-intersected_area
对于角度,我们用-
其中,ta_cap是预测的角度,而ta_*是实际的角度。
现在合并这两个损失的最后损失的方位是-
现在检测的全部损失是-
这里的L_reg和L_g是一样的。
对于识别部分,使用的损失是CTC loss-
准备检测数据
我们必须转换数据以便我们可以将其输入我们的模型并对输出计算损失。对于输入,我们只会在一次输入一批图像和输出score-map(代表文本在哪里,不是0和1)和geo-map(这有5通道与图片相同的高度和宽度,前四个分别是 上下左右,最后一个是角度)。基于这两个输出,我们的模型通过损失计算和优化将会收敛,我们也将返回一个训练掩码,以便在计算损失时,我们将不考虑那些非常小的文本区域,标签文本没有给出。
对于每个图像,输入的形状是(512,512,3),输出的形状是(512,512,6),这里有6个通道,一个是score map,四个是top, right, bottom, and left的距离,还有一个是training mask。
如果我们的批大小是32,那么输入形状将是(32,512,512,3),输出形状将是(32,512,512,6)。
现在来看geo-map的样子,因为我们知道它的通道与一个真正的文本矩形只有像素的距离,这个矩形的文本有上方、右侧、底部和左侧。你可以看这个图像更清楚-
我也根据论文画了图,看起来像这样