深度学习cptn+crnn的OCR原理

CPTN

在这里插入图片描述

CRNN

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

首先我们要看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取负数就是最终的损失了

  • 14
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值