1 主要创新点
- 文本检测和识别两个任务结合起来,作为互补,提高检测和识别精度;
- 处理不规则形状的文本;
- 提供一个高效的端到端框架PAN++,对实时的应用场景友好。
2 已有工作的痛点
- 将文本检测和识别任务分开,不利于利用两个任务的互补性,也会增加计算开销;
- 已有的端到端框架只能读取水平或定向文本行;
- 已有的端到端框架效率不能满足实时应用。
3 主要算法
3.1 总体框架
- 为了提高推理速度,采用轻量级的ResNet18作为骨干网络;
- 针对轻量级网络具有感受野小和表征能力弱的缺点,使用堆叠的特征金字塔增强模块(FPEM)对提取到的特征进行增强;
- FPEM(图5所示):(1)基于可分离卷积构建的U形模块,可以以较小的计算开销增强骨干网络提取的多尺度特征;(2)可堆叠,随着堆叠层数的增加,网络的感受野也将增大。
整体使用的损失函数如下:
L=Ldet +Lrec.(1)\mathcal{L}=\mathcal{L}_{\text {det }}+\mathcal{L}_{\mathrm{rec}}. \tag1 L=Ldet +Lrec.(1)
3.2 文本检测
本文提出了一个仅包含两层卷积的轻量级检测头(见图6)来完成文本检测任务。
该检测头同时预测:
- 文本区域;
- 文本内核;
- 实例向量。
通过PA算法将文本区域、文本内核和实例向量进行融合,得到最终的检测结果(见图7)。
- PA借用了聚类的思想;
- 把不同的文本看作不同的簇,则文本内核就是簇的中心,文本区域内的像素就是待聚类的样本。
图8是测试阶段。
文本检测部分的损失函数如下:
Ldet =Ltex +αLker+β(Lagg+Ldis ).(2)\mathcal{L}_{\text {det }}=\mathcal{L}_{\text {tex }}+\alpha \mathcal{L}_{k e r}+\beta\left(\mathcal{L}_{a g g}+\mathcal{L}_{\text {dis }}\right). \tag2 Ldet =Ltex +αLker+β(Lagg+Ldis ).(2)
Ltex =1−2∑iPtex (i)Gtex (i)∑iPtex (i)2+∑iGtex (i)2.(3)\mathcal{L}_{\text {tex }}=1-\frac{2 \sum_{i} P_{\text {tex }}(i) G_{\text {tex }}(i)}{\sum_{i} P_{\text {tex }}(i)^{2}+\sum_{i} G_{\text {tex }}(i)^{2}}. \tag3 Ltex =1−∑iPtex (i)2+∑iGtex (i)22∑iPtex (i)Gtex (i).(3)
Ptex (i)P_{\text {tex }}(i)Ptex (i)和Gtex (i)G_{\text {tex }}(i)Gtex (i)分别指分割结果中第iii个像素的值和文本区域的真实值。
Lker=1−2∑iPker(i)Gker(i)∑iPker(i)2+∑iGker(i)2.(4)\mathcal{L}_{k e r}=1-\frac{2 \sum_{i} P_{k e r}(i) G_{k e r}(i)}{\sum_{i} P_{k e r}(i)^{2}+\sum_{i} G_{k e r}(i)^{2}}. \tag4 Lker=1−∑iPker(i)2+∑iGker(i)22∑iPker(i)Gker(i).(4)
Pker(i)P_{k e r}(i)Pker(i)和Gker(i)G_{k e r}(i)Gker(i)分别指文本核预测中的第iii个像素值和真实值。
Lagg=1N∑i=1N1∣Ti∣∑p∈TiD1(p,Ki),D1(p,Ki)=ln(R(∥F(p)−G(Ki)∥−δagg)2+1).(5)\begin{array}{c} \mathcal{L}_{a g g}=\frac{1}{N} \sum_{i=1}^{N} \frac{1}{\left|T_{i}\right|} \sum_{p \in T_{i}} \mathcal{D}_{1}\left(p, K_{i}\right), \\ \mathcal{D}_{1}\left(p, K_{i}\right)=\ln \left(\mathcal{R}\left(\left\|\mathcal{F}(p)-\mathcal{G}\left(K_{i}\right)\right\|-\delta_{a g g}\right)^{2}+1\right) . \end{array} \tag5 Lagg=N1∑i=1N∣Ti∣1∑p∈TiD1(p,Ki),D1(p,Ki)=ln(R(∥F(p)−G(Ki)∥−δagg)2+1).(5)
- NNN: 文本行数;
- TiT_{i}Ti: 第iii个文本行的文本区域;
- KiK_{i}Ki: 文本行TiT_{i}Ti的文本内核KiK_{i}Ki;
- D1(p,Ki)\mathcal{D}_{1}\left(p, K_{i}\right)D1(p,Ki): 文本像素ppp和文本内核KiK_{i}Ki之间的距离;
- R(⋅)\mathcal{R}(\cdot)R(⋅): ReLU函数,确保输出为非负;
- F(p)\mathcal{F}(p)F(p): 像素ppp的实例向量;
- G(Ki)\mathcal{G}\left(K_{i}\right)G(Ki): 文本内核KiK_{i}Ki的实例向量, 利用下面的公式进行计算: G(Ki)=∑p∈KiF(p)/∣Ki∣\mathcal{G}\left(K_{i}\right)=\sum_{p \in K_{i}} \mathcal{F}(p) /\left|K_{i}\right|G(Ki)=∑p∈KiF(p)/∣Ki∣;
- δagg\delta_{\text {agg}}δagg: 常量, 在实验中设置为0.5。
Ldis=1N2∑i=1N(Db(Ki)+∑j=1j≠iND2(Ki,Kj)),Db(Ki)=1∣B∣∑p∈Bln(R(δdis−∥F(p)−G(Ki)∥)2+1),D2(Ki,Kj)=ln(R(δdis−∥G(Ki)−G(Kj)∥)2+1).(6)\begin{array}{c} \mathcal{L}_{d i s}=\frac{1}{N^{2}} \sum_{i=1}^{N}\left(D_{b}\left(K_{i}\right)+\sum_{\substack{j=1 \\ j \neq i}}^{N} \mathcal{D}_{2}\left(K_{i}, K_{j}\right)\right), \\ \mathcal{D}_{b}\left(K_{i}\right)=\frac{1}{|B|} \sum_{p \in B} \ln \left(\mathcal{R}\left(\delta_{d i s}-\left\|\mathcal{F}(p)-\mathcal{G}\left(K_{i}\right)\right\|\right)^{2}+1\right), \\ \mathcal{D}_{2}\left(K_{i}, K_{j}\right)=\ln \left(\mathcal{R}\left(\delta_{d i s}-\left\|\mathcal{G}\left(K_{i}\right)-\mathcal{G}\left(K_{j}\right)\right\|\right)^{2}+1\right). \end{array} \tag6 Ldis=N21∑i=1N(Db(Ki)+∑j=1j=iND2(Ki,Kj)),Db(Ki)=∣B∣1∑p∈Bln(R(δdis−∥F(p)−G(Ki)∥)2+1),D2(Ki,Kj)=ln(R(δdis−∥G(Ki)−G(Kj)∥)2+1).(6)
- BBB: 背景.
- Db(Ki)\mathcal{D}_{b}\left(K_{i}\right)Db(Ki): 文本内核KiK_{i}Ki与背景之间的距离;
- \mathcal{D}{2}\left(K{i}, K_{j}\right): 文本内核KiK_{i}Ki和文本内核KjK_{j}Kj之间的距离;
- \delta_{d i s}: 常量, 在实验中设置为3。
3.3 文本识别
本文提出了一个不规则文字特征提取器Masked RoI和一个基于注意力机制的轻量级识别头来完成文本识别任务。
- Masked RoI:为任意形状的文本提取固定大小的特征块;
- 轻量级识别头:包含两层LSTM和两层多头注意力(见图9)。
文本识别使用的损失函数如下:
Lrec=1∣w∣∑i=0∣w∣CrossEntropy(yi,wi).(7)\mathcal{L}_{r e c}=\frac{1}{|w|} \sum_{i=0}^{|w|} \operatorname{CrossEntropy}\left(y_{i}, w_{i}\right). \tag7 Lrec=∣w∣1i=0∑∣w∣CrossEntropy(yi,wi).(7)
参考文献
- https://jishuin.proginn.com/p/763bfbd5aefa
- 论文地址:https://arxiv.org/abs/2105.00405
- 论文代码:https://github.com/whai362/pan_pp.pytorch