文本检测与识别 CTPN && CRNN && STN
总结
- 端到端文本检测,端到端日期识别
- 不需要进行字符分割和水平缩放,可识别任意长度序列
- CNN+RNN架构,检测结果更具鲁棒性
- CTC选择最优序列
- 可检测部分旋转后的日期
- 无需对旋转后的角度进行数据标注
- STN + CTPN + CRNN
这是一个经典的架构。可以替换的部分有VGG的部分,可以用DenseNet,ResNet替代,体积更小,速度更快,更精准。ROI生成也可以换其他的,参考YOLO,个人不觉得需要复杂。识别部分的特征提取也可以考虑换成其他的base。
CTPN部分(检测)
- CNN卷积提取特征,取得特征图层(HxWxC)
- 将提取后的特征做卷积滑窗,每个滑窗负责预测K个可能存在的文字位置
- 由于文字具有上下文关系,考虑后面接一个BLSTM(双向的LSTM)
- 将卷积后的滑窗(Wx3x3xC),变形后接入到BLSTM中
- BLSTM将输出Wx256的特征图层,再接入隐藏层为512的全连接层,准备输出
- 输出分两部分,2K个坐标与2K个分类(第一个2是由于存在左上与右下的坐标,第二个2由于只预测是文字还是背景)
- 通过真实数据标注与网络输出部分计算每个文字框的实际覆盖率
- 输出文本可能存在区域,计算损失函数后对网络权重进行更新,损失函数由二进制的交叉熵与L1线性回归组成
后续处理步骤
- 对实际输出做过滤处理,过滤掉IOU较小的文本框
- 采用NVM(非极大值抑制算法)进行二次过滤
- 设定阀值,将靠的较近的文本框连接起来,形成最后的长文本框
基于Faster RCNN的目标检测算法改进的内容
- 由于目标主要是文字与日期,因此强调上下文关系,因此接一个循环神经网络来考虑时间序列的数据
- 预测的文本端的位置无需输出四点(中心坐标,长,宽),改为输出两点(中心Y轴,长),这是由于文字框往往不存在- 固定宽度且可能出现在任意位置
- 相对于传统的算法,无需构建底层特征,网络自学习特征,更具鲁棒性
CRNN(识别)
- 根据识别后的文本框定位到文本位置,作为基础特征图层输入CNN
- 卷积后进行特征切割,形成时间序列的特征图层
- 输入到BLSTM
- CTC算法选择最佳序列与剔除多余字符
亮点:
- 加入批量归一层加速收敛
- 采用深度RNN,让模型更具非线性,更具鲁棒性
- 最后两层MaxPool采用2x1窗口,更加适用与文字
STN(空间预处理)
- 对倾斜文字进行优化,空间转换网络预处理
- 无需特殊标注,自动对倾斜文本框进行线性放射处理
- 使得整体识别更具鲁棒性
- 可作为处理层在任意位置加入定制的网络
亮点: Bipolar interpolation.
缺陷:
- 难收敛,需大量数据
附图: