2019.7.7 新总结
1)网络结构:
ResNet提取图像表征 fc
初始化位置特征,p1, p2,… p21, 总共21长度。
2)提取的图像标准fc也是序列特征,数据都是定长的,所以,将序列特征均匀划分到每个位置序列特征,进行拼接。这样,每个位置序列特征上都有对应的字符内容表征。
每个 位置特征上拼接图像标注fc
3)然后,让BiLSTM再去自动根据上下文关系,学习每个位置的字符。
拼接好的位置特征, 经过BiLSTM
每个时刻的输出状态特征,经过 FC + softmax 激活。
FC: 将提取到的特征向量,softmax( W x + b )
W是一个权重矩阵,学习每个类别的权重,然后使用softmax激活,得出每个矩阵的概率。
数据:
给定数据集:10000条数据作为训练集。
涵盖几十种字体,像素大小也各不相同,排版方式复杂,语言也很多种。
原始图片,+ 文本框四个点坐标(里面是标注的文字)最小外接矩形,确定要扣取的文本区域,图片小于45度,转为水平;图片大于45度,转为垂直,最后将垂直的转为水平(倾斜处理)
2. 对文字图片进行角度处理,然后归一化成 同一尺寸。
图片的宽高统计,选取高度,宽度,为啥???
宽高比统计,宽高比为6,覆盖85%左右。
归一化: 宽32, 宽高比:6.
字符串长度统计:模型序列预测长度:21, 覆盖99%的长度,长度超过21的,不到1%左右。
训练集类标统计:中文4085(简体,繁体),英文和数字(半角,全角??需要统计吗??)62全角,62半角,符号220类。统计在训练集中出现的频数。
最终确定,模型序列预测类标: 国标1级简体汉字常用的3500个,1000个繁体汉字,和训练集中出现的所有汉字,26个英文字母,和10个数字,共5302个类别。
数据生成(文字图片合成)
类标太多,平均一个类标就几个学习数据,所以需要合成大量与训练集相似的文字图片,充分发挥模型的潜力,提高模型在测试集上的准确率。
- 生成文字序列(比较重要,毕竟文字是核心)
根据训练集的数据分布情况,控制生成的比例。
控制比例:1)语种种类比例(纯中文、纯英文(数字)、纯符号、混合型),
2)每个字的字频,(训练集中字频统计,生成时更新频数,为0就不生成)
3)字符串长度比例,(21覆盖99%,各个长度比例要控制)
4)某些字符不能与其他字符在一起。(简体不能和繁体在一起,中文里面是全角符号,英文是半角符号) - 前景渲染
pillow:设置文字大小、颜色、收集了很多字体(网络图片),文字方向(70%水平,30%垂直),进行适当旋转。 - 背景合成
模型构建:
加深的残差网络,比加深的CNN更容易优化。
采用101层的ResNets,学习网络文本图像的特征,
越深的网络提取的特征越抽象,越具有语义信息。
ResNet: 解决退化问题(网络加深,准确率下降),恒等映射,identity mapping和residual mapping, 网络达到最优时,继续加深网络,residual mapping为0. 只剩identity mapping. 网络性能就不会随着深度增加而降低。
y = F(x) + x, (x 指 identity mapping, F(x)指 Residual mapping).
给定一个文字图片,归一化为固定尺寸,输入101层ResNets网络进行特征提取,输出全局特征向量(表示整个文字序列的特征),我们需要识别出每个位置的字符。
全局特征向量与位置序列向量p???结合起来,网络对该位置的字符特征自动学习和选择。 生成合成向量。
合成向量 输入到BiLSTM(全连接层,softmax),得到文本序列每个位置的字符编码,每个类别的概率,确定是哪个字符。
数据合成:编辑距离准确率提升16.5个百分点。
后处理:
编辑距离准确率
训练数据识别出的有用的文本区域143532个,8:1:1进行划分,划分时参照语种比例,序列长度,字频这些,横竖比例。
合成:467552个,
后期分析:
计算各个类别准确率, 纯中文,英文和数字,纯符号,或者混合型的,
发现英文数字的准确率很低。混合型的。
有些过长的,大于21,被砍掉的。能补的补上去。
后处理:加入规则,R 换成? , 网址,taobao, 电话、微信、qq
0.5%提升。