文字识别 CRNN-白翔

pytorch代码(只针对英文)
https://blog.csdn.net/u013102349/article/details/79515147

中文翻译
架构包括三部分:1) 卷积层,从输入图像中提取特征序列;2) 循环层,预测每一帧的标签分布(每帧预测);3) 转录层,将每一帧的预测变为最终的标签序列。

CNN:
特征序列的每一个特征向量在特征图上按列从左到右生成。这意味着第i个特征向量是所有特征图第i列的连接。在我们的设置中每列的宽度固定为单个像素。
特征图的每列对应于原始图像的一个矩形区域(称为感受野),并且这些矩形区域与特征图上从左到右的相应列具有相同的顺序。
 

RNN:
循环层预测特征序列x=x1,...,xT中每一帧xt的标签分布yt(概率分布,即yt是一个向量,元素是对应标签的概率)。
首先,RNN具有很强的捕获序列内上下文信息的能力。例如,通过对比字符高度更容易识别“il”而不是分别识别它们中的每一个。
其次,RNN可以将误差差值反向传播到其输入,即卷积层,从而允许我们在统一的网络中共同训练循环层和卷积层。
第三,RNN能够从头到尾对任意长度的序列进行操作。

在基于图像的序列中,两个方向的上下文是相互有用且互补的。将两个LSTM,一个向前和一个向后组合到一个双向LSTM中。
可以堆叠多个双向LSTM,得到深双向LSTM。深层结构允许比浅层抽象更高层次的抽象。

创建一个称为“Map-to-Sequence”的自定义网络层,作为卷积层和循环层之间的桥梁。

转录:
转录是根据每帧预测的标签分布找到具有最高概率的标签序列。
输入是序列y=y1,...,yT,其中T是序列长度。这里,每个yt在集合L上的概率分布,其中L包含了任务中的所有标签(例如,所有英文字符),以及由-表示的“空白”标签(blank)。
B将π映射到l上,首先删除重复的标签,然后删除blank。例如,B将“–hh-e-l-ll-oo–”(π)(-表示blank)映射到“hello”(l)。

数据集包含8百万训练图像及其对应的实际单词。
https://blog.csdn.net/quincuntial/article/details/77679463

CTC
https://blog.csdn.net/dongfang1984/article/details/77586945
 

你可能感兴趣的:(OCR(文本检测和识别))