CRNN文本识别----论文阅读笔记

CRNN文本识别----论文阅读笔记_第1张图片

优点

  1. 可以直接从序列标签学习,不需要详细的标注
  2. 具有直接从图像数据学习信息表现的DCNN的相同性质,既不需要手工特征也不需要预处理步骤,包括实体化/分割,组件定位等;
  3. 具有 RNN 相同的性质,能够产生一系列标签
  4. 对类序列对象的长度无约束,只需要在训练阶段和测试阶段对高度进行归一化
  5. 比标准 DCNN​ 模型包含的参数要少的多,占用更少的存储空间

特征序列提取

  1. 缩放到相同的高度

  2. 从卷积层产生的feature map中提取特征向量序列,作为循环层的输入

    特征序列的每一个特征向量在特征图上按列从左到右生成,第i个特征向量是所有特征图第i列的连接,论文中设置每列的宽度为单个像素

特征图上的每列对应与原始图像的一个矩形区域(感受野),并且这些矩形区域与特征图上从左到右的相应列具有相同的顺序。特征序列中的每个向量关联一个感受野,并且可以被认为是该区域的图像描述。

CRNN文本识别----论文阅读笔记_第2张图片

序列标注

循环层的优点

  1. RNN​ 具有很强的捕获序列内上下文信息的能力。对于基于图像的序列识别使用上下文提示比独立处理每个符号更稳定且更有帮助。一些模糊的字符在其观察其上下文时更容易区分
  2. RNN​ 可以将误差差值反向传播到其输入(卷积层),从而允许在统一的网络中共同训练循环层和卷积层
  3. RNN​ 能够从头到尾对任意长度的序列进行操作

CRNN文本识别----论文阅读笔记_第3张图片

转录

转录就是 RNN​ 对每个像素的预测转换为标签序列的过程。有两种模式,包括无词典转录和基于词典的转录。

标签序列的概率

采用 CTC​ 中定义的条件概率,按照每个时刻的预测 y = y 1 , . . . , y T ​ y = y_1, ..., y_T​ y=y1,...,yT 对标签序列 l ​ \mathbf{l}​ l 定义概率,不用管每个标签在 l ​ \mathbf{l}​ l 中的位置。

条件概率如下:输入是一个序列 y = y 1 , . . . , y T ​ y = y_1,...,y_T​ y=y1,...,yT T ​ T​ T 是序列长度,每一个 y t ∈ ℜ L ′ ∣ ​ y_t \in \Re^{L'|}​ ytL 都是在集合 L ′ = L ∪ { 空 格 } ​ L' = L \cup \{空格\}​ L=L{} 上的概率分布,其中 L ​ L​ L 包含了任务中的所有标签。一个序列到序列的映射函数 B ​ B​ B 定义在序列 π ∈ L ′ T ​ \boldsymbol{\pi} \in {L'}^T​ πLT 上,其中 T ​ T​ T 是长度。 B ​ B​ B π ​ \boldsymbol \pi​ π 映射到 l ​ \mathbf{l}​ l 上,首先删除重复的标签,然后删除空格。例如 B ​ B​ B 把 "–hh-e-l-ll-oo–"​(’-'代表空格)映射到 “hello”。条件概率定义为由 ​ B ​ B ​ B 映射到 ​ l ​ \mathbf{l}​ l 上的所有 ​ π ​ \boldsymbol{\pi}​ π 的概率之和:
(1) p ( l ∣ y ) = ∑ π : B ( π ) = l p ( π ∣ y ) , p(\mathbf{l}|\mathbf{y}) = \sum_{\boldsymbol{\pi}:{B}(\boldsymbol{\pi}) = \mathbf{l}}p(\boldsymbol{\pi}|\mathbf{y}),\tag{1} p(ly)=π:B(π)=lp(πy),(1)
π \boldsymbol{\pi} π 的概率定义为 p ( π ∣ y ) = ∏ t = 1 T y π t t p(\boldsymbol{\pi}|\mathbf{y}) = \prod_{t=1}^{T}y_{\pi_t}^t p(πy)=t=1Tyπtt ,其中 y π t t y_{\pi_t}^t yπtt 是时刻 t t t 有标签 π t ​ \pi_t​ πt 的概率。

这里的时刻可以对应到像素, y t y_t yt 就是从BLSTM的输出,对每个像素列的预测。 l \mathbf{l} l 就是标注的标签序列,每一个便是一个字符串,比如“hello”。 y → π → l y \to \boldsymbol{\pi} \to \mathbf{l} yπl

无字典转录

在这种模式下,将公式 ( 1 ) (1) (1) 中具有最高概率的序列 l ∗ ​ \mathbf{l}^*​ l 作为预测。由于不存在找到精确解的可行方法,可以通过 l ∗ ≈ B ( arg ⁡ max ⁡ π p ( π ∣ y ) ) ​ \mathbf{l}^* \approx B (\arg \max_{\boldsymbol \pi} p(\boldsymbol \pi | \mathbf{y}))​ lB(argmaxπp(πy)) 近似发现,即在每个时刻 t ​ t​ t 采用最大概率的标签 π t ​ \pi_{t}​ πt ,并将结果序列映射到 l ∗ ​ \mathbf{l}^*​ l

基于字典的转录

在基于字典的模式中,每个测试采样与词典 D D D 相关联,通过选择词典中公式 ( 1 ) (1) (1) 中最高概率的序列来识别标签序列即 l ∗ = arg ⁡ max ⁡ l ∈ D p ( l ∣ y ) \mathbf{l}^{*}=\arg\max_{\mathbf{l}\in{D}}p(\mathbf{l}|\mathbf{y}) l=argmaxlDp(ly)。然而,对于大型词典,对词典进行详尽的搜索是非常耗时的,即对词典中的所有序列计算公式 ( 1 ) (1) (1),并选择概率最高的一个。为了解决这个问题,我们观察到,通过无词典转录预测的标签序列通常在编辑距离度量下接近于实际结果。这表示我们可以将搜索限制在最近邻候选目标 N δ ( l ′ ) {N}_{\delta}(\mathbf{l}') Nδ(l),其中 δ \delta δ是最大编辑距离, l ′ \mathbf{l}' l 是在无词典模式下从 y ​ \mathbf{y}​ y 转录的序列:
(2) l ∗ = arg ⁡ max ⁡ l ∈ N δ ( l ′ ) p ( l ∣ y ) . \mathbf{l}^{*}=\arg\max_{\mathbf{l}\in{N}_{\delta}(\mathbf{l}')}p(\mathbf{l}|\mathbf{y}).\tag{2} l=arglNδ(l)maxp(ly).(2)
可以使用BK树数据结构有效地找到候选目标 N δ ( l ′ ) ​ {N}_{\delta}(\mathbf{l}')​ Nδ(l),这是一种专门适用于离散度量空间的度量树。BK树的搜索时间复杂度为 O ( log ⁡ ∣ D ∣ ) ​ O(\log|{D}|)​ O(logD),其中 ∣ D ∣ ​ |{D}|​ D是词典大小。因此,这个方案很容易扩展到非常大的词典。在我们的方法中,一个词典离线构造一个BK树。然后,我们使用树执行快速在线搜索,通过查找具有小于或等于 δ ​ \delta​ δ编辑距离来查询序列。

网络配置

CRNN文本识别----论文阅读笔记_第4张图片

Lua代码:https://github.com/bgshih/crnn
TensorFlow代码:https://github.com/MaybeShewill-CV/CRNN_Tensorflow
CRNN论文翻译:https://blog.csdn.net/Quincuntial/article/details/77679419

你可能感兴趣的:(文本识别)