时间6月30号-7月1号,在确定了小组的任务后,我们开始了各自的任务,由于我现在的任务是查找训练好的有关文字检测的机器学习模型,因此我决定先学习一下有关的知识,比如卷积神经网络CNN等。
一.CNN
卷积神经网络与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。卷积神经网络通常包含以下几种层:
- 卷积层:卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
- 线性整流层:这一层神经的活性化函数使用线性整流。
- 池化层:通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
- 全连接层: 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。
并且查找了有关文字识别的例子:https://zhuanlan.zhihu.com/p/43534801
二.CTPN
CTPN是在ECCV 2016提出的一种文字检测算法。CTPN结合CNN与LSTM深度网络,能有效的检测出复杂场景的横向分布的文字。
CTPN整个检测分六步:
第一,首先,使用VGG16作为base net提取特征,得到conv5_3的特征作为feature map,大小是W×H×C;
第二,然后在这个feature map上做滑窗,窗口大小是3×3。也就是每个窗口都能得到一个长度为3×3×C的特征向量。这个特征向量将用来预测和10个anchor之间的偏移距离,也就是说每一个窗口中心都会预测出10个text propsoal。
第三,将每一行的所有窗口对应的3*3*C的特征(W*3*3*C)输入到RNN(BLSTM)中,得到W*256的输出;
第四,将RNN的W*256输入到512维的fc层;
第五,fc层特征输入到三个分类或者回归层中。
第六,这时会得到密集预测的text proposal,所以会使用一个标准的非极大值抑制算法来滤除多余的box。
第七,用简单的文本线构造算法,把分类得到的文字的proposal合并成文本线。
简单了解后我查看并尝试运行了它的代码:https://github.com/tianzhi0549/CTPN