该文章参考于: 点击链接
Abstract
盲文图像超分辨率(SR)具有挑战性,因为需要应对多样的字体样式和未知的退化情况。为解决该问题,现有方法通过损失约束或中间特征条件,并行执行字符识别以规范超分辨率任务。然而,在遇到严重退化时,高级先验仍可能失效。对于结构复杂的字符,比如由多个象形或表意符号组合成单个字符的汉字,该问题会进一步加剧。在这项工作中,我们提出了一种新的更关注字符结构的先验。具体而言,我们学习在 StyleGAN 中封装丰富多样的结构,并利用这种生成式结构先验进行恢复。为限制 StyleGAN 的生成空间,使其既遵循字符结构,又能灵活处理不同字体样式,我们将每个字符的离散特征存储在码本中。随后,代码驱动 StyleGAN 生成高分辨率结构细节以辅助文本超分辨率。与基于字符识别的先验相比,所提出的结构先验对恢复指定字符的真实精确笔画施加了更强的字符特定指导。在合成数据集和真实数据集上的大量实验表明,所提出的生成式结构先验在促进稳健的文本超分辨率方面具有出色的性能。
Warning
这项工作仅聚焦于具有规则布局的低分辨率输入,这种输入可能不涉及任何透视变换(详见我们的论文)。
介绍

盲文本超分辨率(SR)旨在从受未知退化影响的低分辨率(LR)文本图像中恢复出高分辨率(HR)图像。与自然图像和人脸图像的超分辨率任务相比,这一领域的研究相对较少。
这项看似简单的任务实际上存在许多独特挑战。特别是每个字符都有其独特的结构。若恢复效果欠佳,比如出现笔画扭曲、缺失或多余等破坏结构的情况,很容易被察觉,甚至可能改变原词的含义。当处理像中文、日文汉字和韩文汉字这类文字系统时,任务会变得更加困难 —— 这些文字系统中,数千个字符的样式复杂多变,且大多由不同的子单元(或复合表意符号)构成。笔画上的细微偏差,比如 “太” 和 “大”,就可能导致含义完全不同。再加上字体种类繁多,问题会变得更为复杂。此外,复杂且未知的退化使得数据驱动的卷积神经网络(CNNs)难以很好地适应现实中退化的文本图像。
为了缓解盲文本超分辨率中的难题,尤其是在保留每个字符独特结构方面,近年来的研究要么设计新的损失函数,约束超分辨率结果在语义上接近高分辨率的真实图像,要么将识别先验融入中间特征中。图1 展示了这两类方法的几个代表性结果,即应用内容感知约束的 TBSRN 和将识别先验嵌入超分辨率过程的 TATT。尽管这些模型已使用经过复杂退化模型(如 BSRGAN和 Real-ESRGAN )合成的数据重新训练,但结果仍不尽如人意。当低分辨率字符的笔画较少时,TBSRN 和 TATT 表现尚可。然而,当字符由复杂笔画构成时(例如图1左图中的第 4、6、8、11 个字符),这两种方法都无法生成理想的结构。这表明,高层识别先验并不能很好地助力超分辨率任务中字符结构的准确恢复。
Success
- 我们证明,盲超分辨率任务(尤其是对于结构复杂的字符)可以通过利用生成网络中封装的字符结构先验来实现恢复。
- 我们提出了一种可行的学习这种生成结构先验的方法:通过用代表不同字符的离散代码替换 StyleGAN 的单一常量,对 StyleGAN 进行重构。
- 为了准确获取先验,我们提出了一种基于 Transformer 的编码器,从低分辨率输入中联合预测字体风格、字符边界框及其在代码本中的索引。
限制
本项目主要针对具有规则布局的低分辨率(LR)文本输入,这意味着它可能无法处理包含透视变换的文档图像。此外,从 test_sr.py 文件中关于图像宽度限制的警告可以看出,当LR文本图像的宽度超过特定限制(例如,高度为32像素时,宽度超过512像素)时,需要将其裁剪成更短的片段进行处理。
因此,如果您想处理一整张文档图像,可能需要进行额外的处理,例如:
-
文本区域检测和裁剪:首先,您需要检测文档中的文本区域,并将其裁剪出来。
-
分段处理:如果裁剪出的文本图像宽度过大,您可能需要将其进一步分段,以适应模型的输入限制。
-
处理透视变换:如果文档图像包含透视变换,本项目可能无法直接处理,您可能需要进行额外的校正步骤。
图像尺寸限制
在文件
test_sr.py中对图像宽度有限制。在 main 函数中,代码会检查低分辨率(LQ)图像的宽度。在图像高度被缩放到 32 像素后,如果其宽度超过 512 像素(32 * 16),程序会打印一条警告消息,并跳过该图像的处理。
// ... existing code ... h, w, c = img.shape ShowLQ = cv2.resize(img, (0,0), fx=128/h, fy=128/h, interpolation=cv2.INTER_CUBIC) LQ = cv2.resize(img, (0,0), fx=32/h, fy=32/h, interpolation=cv2.INTER_CUBIC) ori_lq_w = LQ.shape[1] TextLQFillBG = np.zeros((32, 32*16, 3)).astype(LQ.dtype) if LQ.shape[-2] <= 32*16: TextLQFillBG[:, :LQ.shape[-2], :] = TextLQFillBG[:, :LQ.shape[-2], :] + LQ LQ = TextLQFillBG else: print(['Warning!!! The width of the LQ text image exceeds the defined limit. Please crop it into shorter segments. (with height=32, width<=512)', LQ.shape]) continue LQ = transforms.ToTensor()(LQ) // ... existing code ...
技术栈
该项目使用了以下技术:
-
编程语言: Python
-
深度学习框架: PyTorch (版本
torch>=1.7或torch==2.0.1) -
核心概念和模型:
-
生成对抗网络 (GAN): 项目名称中包含 “GAN”,并且
TSPGAN是核心模型之一,用于结构先验生成。它利用 StyleGAN 的思想。 -
超分辨率 (SR): 项目的主要目标是实现文本图像的超分辨率 (
TSPSRNet模型)。 -
Transformer 编码器: 使用
TextContextEncoderV2模型,其中包含一个TextViT(Vision Transformer) 作为文本编码器,用于预测字符标签、边界框和字体样式。 -
光学字符识别 (OCR): 利用 YOLO (
yolo11m_character.pt) 进行字符检测,并使用 ModelScope 的 OCR 识别模型 (damo/cv_convnextTiny_ocr-recognition-general_damo) 进行字符识别。 -
残差网络 (ResNet):
TextContextEncoderV2中使用了resnet45作为特征提取器。 -
自适应实例归一化 (AdaIN): 在
TSPSRNet中用于融合先验特征和低质量特征。 -
损失函数:
CTCLoss、TextCELoss、L1Loss(像素损失) 和GANLoss(对抗损失)。
-
该项目是基于优秀的 BasicSR 和 KAIR 库构建的。