OCR学习

OCR (Optical Character Recognition,光学字符识别)OCR学习

在图像中提取文本?

  1. 先检测文字所在位置
  2. 识别区域中的内容
    OCR学习

场景文字检测(Connection Text Proposal Network, CTPN)

CTPN网络架构:

OCR学习

首先用VGG模型来提取特征,用来生成很多候选框,再筛选掉一些不含有文字的候选框(相当于二分类任务,即是否含有?0或者1),
OCR学习

对待定的像素点进行选取框定,通过宽度设定为不变的[16],其他的长度为可变的[11,16,23,33,48,68,97,139,198,283],Anchor大小不变,宽度固定,长度选取不同的10个。

OCR学习

网络输出为三个东西:

  • 2k得分:k为设定的一个小像素点变换多少个候选框,这里是10个,乘以2是因为有前景和背景,也就是说每一个小候选框的得分。
  • 2k回归:同上的每个高度的微调。
  • 1k边界调整:对边界候选框进行x的微调。

将所有小的候选框拼接成一个完整的文本区域。
OCR学习

通过框的2k得分来得出可以合并的候选框:
OCR学习
OCR学习

在候选框中,从第i个候选框向最后查找,找到得分最大的值,之后再从最后往最前查找,如果从前往后找的得分最值 >从后往前找的得分最值,那么这是个长序列。
如果从前往后找的得分最值 <从后往前找的得分最值,那可能还存在更长的序列,继续往前找。

CRNN算法

OCR学习

在最后提取的时候有重复字符的问题:
OCR学习

其中解决方案有加入CTC模块,目的为对齐输入和输出,以前的时候,对这种类型的重复字符,一般设置空字符\epsilon来代替空字符或者重复字符。
如下图:
OCR学习

其中的\epsilon就是用来代替空字符或者重复字符的。

长短期记忆(Long short-term memory, LSTM)

OCR学习

在LSTM中核心在于状态(state),
OCR学习

其中C表示的是记忆,记忆的修改和添加主要:
其可以通过sigmoid和t-1点乘来实现。
遗忘门:通过sigmoid决定哪些信息被遗忘
输入门:决定哪些信息会被输入
Sigmoid: 决定输入多少比例的信息
Tanh: 决定输入什么信息
输入门:
输出当前时刻的结果和hidden-state
Hidden-state==ht
输出和输入
输入:hidden-state, Xt, Ct-1
输出:Ht, Ht-1, Ct
OCR学习
OCR学习

相当于一次更新操作,

OCR学习
OCR学习

GRU,LSTM的变形
门控循环单元(Gated Recurrent Neural Network, GRU)
两个门:更新门和输出门
输入输出:
两个输出:hidden-state, hidden-state
两个输入:xt, ht-1

OCR学习

双向LSTM
OCR学习

双向的LSTM、GRU
正向的LSTM
反向的LSTM
两个输出concat
目的:输出具有正向的记忆,还有反向的记忆。

Seq2seq原理

  1. Seq2seq = encoder + decoder
  2. Encoder: 对句子进行理解
  3. Decoder: 对句子进行包装和处理。

输入长度为M的序列,使用encoder进行编码,把编码的结果交给decoder,decoder进行结果生成,decoder通过循环,不停的把当前的输出作为下一步的输入,直到当前输出的结束符之后,循环才停止。

OCR学习

一个编码器,一个解码器
OCR学习

预测数字案列
流程:
数字转化为序列,准备数据集,dataloader
完成编码器,实现对输入的理解。
完成解码器,实现输出
完成整个seq2seq结构
训练
评估
OCR学习
OCR学习

数据准备:
From torch.utils.data import Dataloader,Dataset
准备这个Dataset和Dataloader。

OCR学习

Seq2seq模型的描述:

OCR学习

OCR学习

OCR学习
OCR学习

一般的seq2seq模型都需要Attention,因为在seq2seq中,需要价格所有的输入序列都编码成一个统一语义特征c再解码,所以在C中必须包含原始序列中的所有信息,长度就成了限制模型性能的瓶颈,当C过长后,就会导致精度的下降,需要Attention机制来解决这个问题。
OCR学习

上一篇:2021-04-19


下一篇:Pytorch-基础入门之LSTM