本毕设课题是属于计算机视觉下的目标检测与识别,对象为自然场景下的各种文本信息,通俗的说就是检测识别图片中的文本信息。由于文本的特殊性,本毕设将整个提取信息的过程可以分为检测、识别两个部分。此篇案例很多图片代码不能展示,需要做这类系统后台私信
文章对用到的相关技术概念有一定的介绍分析,如机器学习,深度学习,以及各种的网络模型及其工作原理过程。
检测部分采用水平检测文本线方式进行文本检测,主要参考了乔宇老师团队的CTPN方法,并在正文部分从模型的制作到神经网络的设计实现对系统进行了较为详细的分析介绍。
识别部分则采用的是Densenet + CTC,对于印刷体的文字有较好的识别。
深度学习;文本检测;文本识别;CTPN;Densenet;CTC
文字检测的主要功能为:从图像中找到文字区域,并将文字区域从原始图像中分离出来。
文字识别的主要功能为:从分离出来的图像上,进行文字识别。
文字识别流程:
1)预处理:去噪(滤波算法)、图像增强、缩放,其目的是去除背景或者噪点,突出文字部分,并缩放图片为适于处理的大小
2)特征抽取:常用特征:边缘特征、笔画特征、结构特征、纹理特征。
3)识别:分类器,随机森林 、SVM、NN、CNN等神经网络。
图像预处理
模型训练
数据集制作
模型制作
Tensorflow目标检测的模型制作Goole现在已经做的十分容易制作了,github有许多可用的源码,在训练之前,为了得到适合自己目标的模型,我们需要对模型的配置进行调参。
调参的最终目的是要使训练之后的模型检测物体更精确,向程序的方向更靠近一步的话,就是使得损失函数(例如SSD中的loss)尽量小(因为利用训练集训练出来的模型质量在训练过程中只能靠验证集来检测)。
因此,调参可以看做一个多元函数优化问题。
需要我们去调的参数指的并不是我们通过训练得到的参数数据(例如我们机器学习中的b,w),而是在模型开始学习过程之前就已经人为设置值的参数,深度学习里称之为超参数。例如树的数量或深度、学习率、深层神经网络隐藏层数、k均值聚类中的簇数等等。
深度学习中常用的调节参数如下:
1.学习率(learning rate)
学习率的调整应该是一个很常见的操作。一般随着迭代次数的提高,当loss下不去的时候会先暂停训练模型,然后将learning rate调整至原来的1/10再继续进行训练。
原因是,梯度下降过程中的学习率可以看做下山过程中的步长,假设你的一步很大可以跨过山谷直接踩到对面的山上的话,就很难得到局部最优解。此时,减小步长会提高你走到地面的概率。
2.有关过拟合
利用drop out、batch normalization、data argument等方法可以有效防止过拟合,通过调整drop out中每个神经元被抛弃的概率可以调整模型的泛化能力。
3.网络层数
一般来说,网络层数越多,模型的性能(包括灵敏度、收敛等)就会越好(这也是为什么深度神经网络最近这么火的原因之一)。相应地,对计算能力的要求就会更高。
而且,层数越多,神经元节点数越多,过拟合的概率就会越高。利用2中的各种方法防止过拟合。
4.Batch_Size
可以适当增大batch_size,但这种方法可能会对计算机性能有所影响,
batch_size增大到某个时候,可以达到时间上最优;
batch_size增大到某些时候,可以达到最终收敛精度上最优。(这里图片无法展示)
文本检测
检测过程说明
检测过程大致分为6个步骤:
第一步,使用VGG16的前5个卷积块将图片转化为 feature map(特征图);
第二步,在第一步得到feature map 上取3*3*C 的滑动窗口特征;
第三步,将上一步的特征送到RNN(BLSTM)中,得到W*256的输出。
第四步,将第三步的输出输入到512维的fc层。
第五步,将fc层特征输入到回归层得到text proposals。
第六步,将上一步得到text proposals使用文本线构造算法,合并为最终的文本框。
检测方法是基于faster-rcnn来设计的,我们首先使用VGG16作为初始模型,将预处理过后的图像作为输入给到VGG16神经网络
篇幅问题,以及代码图片不能上传。需要做这类系统后台私信。