最近要做一些ocr的事情,阅读了文字定位的相关论文,主要是ctpn和east.下面对这两篇论文的药店进行一个记录。
CTPN
ctpn结合了卷积神经网络和循环神经网络。卷机神经网络用于提取图片特征,循环神经网络能够帮助提升对文字的定位和分类的准确度(文中对使用和不适用rnn的结果进行了对比)。
下面对网络结构进行一个介绍。
首先是通过VGG16的卷积层进行特征提取,这里使用了vgg的五层卷积。对vgg的五层卷积进行一个介绍:这五个卷积层每一层都进行了一次池化操作,池化后特征图的大小变为了原来的0.5倍。经过四次卷积层之后,特征图的大小与原图的比例为1:16.也就是说,当我们在特征图上移动一个像素位置时,在原图上则移动了16个像素位置。经过四层卷积层之后,在经过一次卷积操作,这次就不再进行池化,将得到的特征图用于之后的分类和定位。
我们得到这个特征图,假设他的shape是w*h*c,这里的w是宽度,h是高度,c是通道数。对特征图上每个位置以3*3的窗口进行滑窗,每一行都可以得到w个3*3*c的特征矩阵。我们可以知道,这里的一次滑窗(水平方向移动一个像素),在原图上对应的是在水平方向上移动16个像素。这里作者固定了水平方向上的位置,对竖直方向上的高度进行了预测。每个滑窗在原图上对应11个(可能记错了)anchor,这些anchor在水平方向上都是一样的大小和位置,但在竖直方向上的高度各不相同。这些anchor共享一个特征矩阵。
我们将得到的特征矩阵按行输入rnn中,也就是每次输入w个3*3*c的特征矩阵到rnn中,rnn输出大小为w*256的输出。将得到的输出传给全连接层进行特征的组合,再传入分类层和位置回归层。
这里的分类层将数据分为两类,分别是有字和无字。
位置回归层则根据预测的高度的偏离程度、预测的中心位置的偏离程度以及水平位置的微调进行位置回归。
损失函数的构造结合了类别分类的结果和位置偏离程度的计算。
最后将得到的宽度为16像素的框进行结合,则得到了文字的位置。
结合的判定规则比较简单,从水平距离和竖直距离上两个方向进行了判断。
注意:在训练时,输入图像的短边被resize成了600像素大小,原图像比例保持不变。
我们可以考虑调整的参数:针对具体的情景,比如如果我们要识别的文字大小是固定的,那么我们可以把anchor的高度进行调整,以更加适用于我们的具体情景。另外就是图像resize的大小,可以进行调整。其余的参数我认为没必要调整。
EAST
我认为east的思想比较简单。主要是结合了FPN的思想,将底层特征和上层特征进行了融合。据作者说,east的实验结果比之前的文字定位的效果都好,我个人还没有对训练好的结果进行实验,从思想上来说,我觉得ctpn的更加有趣些。east是一些比较经典的思想的融合,当然啦经典的常常有用。east的相比于ctpn来说,一个比较明显的优势是,它可以识别倾斜的文字,这一点ctpn是做不到的。
下面对网络结构进行一个介绍。首先是一些卷积层对特征进行了提取,然后对这些卷积得到的特征图通过上下采样的操作做融合,最后得到一个融合的特征图,这个特征图就结合了底层的细节特征,也结合了高层的语义信息。这种进行特征图融合的方式最早可以参见FPN,我在我的博客中也解读了这篇论文。融合后的特征图再输入到分类层和位置回归层中。
这里的位置回归层分为两种,分别是倾斜四边形的位置回归和矩形的位置回归。倾斜四边形的位置回归增加了一个倾角的预测。














