OCR (Optical Character Recognition,光学字符识别)
在图像中提取文本?
- 先检测文字所在位置
- 识别区域中的内容
场景文字检测(Connection Text Proposal Network, CTPN)
CTPN网络架构:
首先用VGG模型来提取特征,用来生成很多候选框,再筛选掉一些不含有文字的候选框(相当于二分类任务,即是否含有?0或者1),
对待定的像素点进行选取框定,通过宽度设定为不变的[16],其他的长度为可变的[11,16,23,33,48,68,97,139,198,283],Anchor大小不变,宽度固定,长度选取不同的10个。
网络输出为三个东西:
- 2k得分:k为设定的一个小像素点变换多少个候选框,这里是10个,乘以2是因为有前景和背景,也就是说每一个小候选框的得分。
- 2k回归:同上的每个高度的微调。
- 1k边界调整:对边界候选框进行x的微调。
将所有小的候选框拼接成一个完整的文本区域。
通过框的2k得分来得出可以合并的候选框:
在候选框中,从第i个候选框向最后查找,找到得分最大的值,之后再从最后往最前查找,如果从前往后找的得分最值 >从后往前找的得分最值,那么这是个长序列。
如果从前往后找的得分最值 <从后往前找的得分最值,那可能还存在更长的序列,继续往前找。
CRNN算法
在最后提取的时候有重复字符的问题:
其中解决方案有加入CTC模块,目的为对齐输入和输出,以前的时候,对这种类型的重复字符,一般设置空字符\epsilon来代替空字符或者重复字符。
如下图:
其中的\epsilon就是用来代替空字符或者重复字符的。
长短期记忆(Long short-term memory, LSTM)
在LSTM中核心在于状态(state),
其中C表示的是记忆,记忆的修改和添加主要:
其可以通过sigmoid和t-1点乘来实现。
遗忘门:通过sigmoid决定哪些信息被遗忘
输入门:决定哪些信息会被输入
Sigmoid: 决定输入多少比例的信息
Tanh: 决定输入什么信息
输入门:
输出当前时刻的结果和hidden-state
Hidden-state==ht
输出和输入
输入:hidden-state, Xt, Ct-1
输出:Ht, Ht-1, Ct
相当于一次更新操作,
GRU,LSTM的变形
门控循环单元(Gated Recurrent Neural Network, GRU)
两个门:更新门和输出门
输入输出:
两个输出:hidden-state, hidden-state
两个输入:xt, ht-1
双向LSTM
双向的LSTM、GRU
正向的LSTM
反向的LSTM
两个输出concat
目的:输出具有正向的记忆,还有反向的记忆。
Seq2seq原理
- Seq2seq = encoder + decoder
- Encoder: 对句子进行理解
- Decoder: 对句子进行包装和处理。
输入长度为M的序列,使用encoder进行编码,把编码的结果交给decoder,decoder进行结果生成,decoder通过循环,不停的把当前的输出作为下一步的输入,直到当前输出的结束符之后,循环才停止。
一个编码器,一个解码器
预测数字案列
流程:
数字转化为序列,准备数据集,dataloader
完成编码器,实现对输入的理解。
完成解码器,实现输出
完成整个seq2seq结构
训练
评估
数据准备:
From torch.utils.data import Dataloader,Dataset
准备这个Dataset和Dataloader。
Seq2seq模型的描述:
一般的seq2seq模型都需要Attention,因为在seq2seq中,需要价格所有的输入序列都编码成一个统一语义特征c再解码,所以在C中必须包含原始序列中的所有信息,长度就成了限制模型性能的瓶颈,当C过长后,就会导致精度的下降,需要Attention机制来解决这个问题。