深度学习cptn+crnn的OCR原理

CPTN

深度学习cptn+crnn的OCR原理_第1张图片

CRNN

深度学习cptn+crnn的OCR原理_第2张图片
深度学习cptn+crnn的OCR原理_第3张图片
深度学习cptn+crnn的OCR原理_第4张图片

总结

首先我们要看ocr要做的是什么,识别一张图片里面的一行文字,输出来,
假如我一张图片里面只有一行文字,但是这一行文字只占了中间的一个区域,两边有很多空的地方,那么我怎么做呢,我首先肯定是要把这张图片中这一行文字给找到,给框出来,找到之后在去识别里面的每个文字是什么文字,也就是两个步骤
1.找到一张图片中的一行文字,就是把这行文字给框出来(ctpn)
2.找到这行文字之后,再去识别这行文字里面的每个文字是什么文字(rcnn)

cptn过程

那么ctpn是怎么把这一行文字给框出来的呢,它是首先把这一行里的每个字给框出来,然后把所有的字的框合并,就得到一行文字的框,那么它是怎么把每个字给框出来呢,这就是和目标检测一样的呢,借鉴了faster rnn的思想,也是最后一个feature map每个像素点生成若干个ancor,与真实框重合最大的ancor负责预测,然后将每个文字的预测ancor先送到lstm网络中提取特征,然后再送到全连接层,进行目标置信度分类,横向中心点偏移回归、竖向中心点、竖向长度回归,训练完了之后对每个文字的预测ancor加上训练好的偏移量就得到了每个文字修正后的预测ancor了,然后将所有修正后的ancor合并就得到了一行文字的预测框
注意:
为什么每个文字生成的预测ancor要先送到lstm网络中提取特征,然后再送到全连接层去分类和回归,而一般的目标检测网络比如faster rcnn可能是直接送到全连接层进行回归和分类的,原因是因为像一般的目标检测网络它检测图片上的某个目标都是人啊,动物啊,还有其它的目标啊,,它们之间是没有前后关系的,而一行文字里面的每个文字都是有前后关系的,所以需要将每个文字生成的ancor先送到lstm中提取特征,然后再来回归和分类

crnn过程

rcnn要做的是把一行文字的每个字给识别出来,它首先是将cptn检测到一行文字图片,送入卷积网络中去提取特征,得到n个向量,n是一个图片一行文字的最多个数,然后将这n个向量送入到lstm网络中,得到n个m维的向量,m是字典字的个数,每个位置的m维的向量,表示对应位置字是字典里面那个字的概率,每个m维的向量可以得到字典里面的一个字,注意这个时候不一定选最大softmax概率对应的字,为什么呢?因为n个m维的向量最终生成n个字,这个字和最终这一行字的标签不是一一对应的n个字生对应最终的标签是有很多中组合的,每种组合都有一种概率,把所有组合对应的概率相加起来,然后加log取负数就是最终的损失了

你可能感兴趣的:(深度学习cptn+crnn的OCR原理)