尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
PaddleOCR Text Gestalt 文本图像超分辨率算法:从论文原理到训练、评估与推理部署实战
PaddleOCR Text Gestalt 文本图像超分辨率算法从论文原理到训练、评估与推理部署实战【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCRText Gestalt 是 PaddleOCR 在docs/version2.x/algorithm/super_resolution/algorithm_sr_gestalt.md文档中正式收录的笔画感知Stroke-Aware场景文本图像超分辨率Scene Text Image Super-Resolution算法。它面向低分辨率、模糊、小字号的自然场景文字图像在送入文本识别Recognition模型之前先进行 2 倍超分重建从而显著提升后续识别精度。本文以该算法为核心结合 PaddleOCR 仓库中的训练配置文件、TSRN 网络实现、笔画聚焦损失与超分指标模块等源码系统讲解 Text Gestalt 的原理、环境准备、数据组织、训练 / 评估 / 预测、推理模型导出与 Python 部署全流程帮助读者在 PaddleOCR 中完整复现并落地这一文本超分方案。1. 算法简介1.1 论文与核心思想Text Gestalt 全称Text Gestalt: Stroke-Aware Scene Text Image Super-Resolution发表于 AAAI 2022作者为 Chen Jingye、Yu Haiyang、Ma Jianqi、Li Bin 与 Xue Xiangyang论文 arXiv 编号 2112.08171。其核心动机非常明确自然场景中的文字往往尺寸小、分辨率低、笔画模糊直接送入识别模型会显著降低识别准确率。Text Gestalt 从人类视觉的格式塔Gestalt感知规律出发提出了一种笔画感知的超分辨率方案不仅仅是把模糊图片变清晰而是让超分过程关注文字的笔画结构通过**笔画分解Stroke Decomposition**把每个字符拆解为笔画序列作为强语义监督信号用注意力机制引导超分网络把有限的重建能力优先分配到识别关键的文字区域而非整张图像的背景噪声。PaddleOCR 完整移植了该算法代码参考自 FudanVI/FudanOCR 的 text-gestalt 实现并在 TextZoom 测试集上给出了可复现的效果指标。1.2 在 PaddleOCR 中的效果与配置原文档给出的是 TextZoom 测试集合上的官方复现结果数据下载与整理方式可参考 FudanOCR 的数据说明模型骨干网络PSNR_AvgSSIM_Avg配置文件Text GestaltTSRN19.280.6560configs/sr/sr_tsrn_transformer_strock.yml其中**PSNR峰值信噪比**与 **SSIM结构相似性**是图像超分任务最常用的两个客观指标数值越高代表重建图像与真实高分辨率图像越接近这两项指标由 PaddleOCR 的 SRMetric 在评估阶段实时计算详见第 5 节配置文件sr_tsrn_transformer_strock.yml中的algorithm: Gestalt字段即指定本算法仓库还提供另一套超分算法配置 configs/sr/sr_telescope.ymlTelescope 算法两者共用同一套训练 / 评估 / 部署工具链仅需更换配置即可。2. 环境配置2.1 运行环境准备Text Gestalt 的超分训练、评估与推理均在 PaddleOCR 标准运行环境下完成请先参考《运行环境准备》配置 PaddlePaddle 运行环境再参考《项目克隆》克隆项目代码。环境要求可概括为以仓库文档与配置为准Python 3.x 与对应版本的 PaddlePaddleCPU / GPU 均可训练GPU 训练推荐使用 CUDA 环境安装项目依赖pip install -r requirements.txt见 requirements.txt超分任务依赖 OpenCV 与 PIL 图像处理库均为 PaddleOCR 默认依赖无需额外安装。2.2 数据结构概览Text Gestalt 的训练与评估使用LMDB 数据集其目录结构为train_data/ └── srdata/ ├── train/ # 训练集 LMDB ├── test/ # 测试集 LMDB └── english_decomposition.txt # 笔画分解字典english_decomposition.txt是 Text Gestalt 特有的笔画分解字典每行形如character sequence将每个英文字符映射为一段笔画编号序列同时被配置文件的Global.character_dict_path与Loss.character_dict_path两个字段引用LMDB 中每个样本同时存放**低分辨率图image_lr64×16与高分辨率图image_hr128×32**两幅图这一对数据由 LMDBDataSetSR 负责读取。3. 模型训练、评估、预测PaddleOCR 对代码进行了模块化训练不同的超分模型只需更换配置文件即可。完整训练流程可参考文本识别训练教程。3.1 配置文件详解训练前先理解 sr_tsrn_transformer_strock.yml 的关键配置段Global: use_gpu: true epoch_num: 500 log_smooth_window: 20 print_batch_step: 10 save_model_dir: ./output/sr/sr_tsrn_transformer_strock/ save_epoch_step: 3 eval_batch_step: [0, 1000] # 每 1000 个 iteration 评估一次 cal_metric_during_train: False pretrained_model: checkpoints: save_inference_dir: sr_output use_visualdl: False infer_img: doc/imgs_words_en/word_52.png character_dict_path: ./train_data/srdata/english_decomposition.txt max_text_length: 100 infer_mode: False use_space_char: False save_res_path: ./output/sr/predicts_gestalt.txt Architecture: model_type: sr algorithm: Gestalt Transform: name: TSRN STN: True infer_mode: False Loss: name: StrokeFocusLoss character_dict_path: ./train_data/srdata/english_decomposition.txt Metric: name: SRMetric main_indicator: all Train: dataset: name: LMDBDataSetSR data_dir: ./train_data/srdata/train transforms: - SRResize: imgH: 32 imgW: 128 down_sample_scale: 2 - SRLabelEncode: - KeepKeys: keep_keys: [img_lr, img_hr, length, input_tensor, label] loader: shuffle: False batch_size_per_card: 16 drop_last: True num_workers: 4各关键字段的语义与源码对应关系如下配置字段作用源码依据Architecture.algorithm: Gestalt声明使用 Text Gestalt 超分算法架构构建逻辑根据该字段装配 TSRNArchitecture.Transform.name: TSRN指定骨干网络为 TSRN含 STN 薄板样条空间变换模块STN: Truetsrn.py 中 TSRN 类Loss.name: StrokeFocusLoss使用笔画聚焦损失MSE 注意力 L1 加权stroke_focus_loss.pyMetric.name: SRMetric评估时计算 PSNR 与 SSIMsr_metric.pyTrain.dataset.name: LMDBDataSetSR读取超分专用的低/高分辨率成对 LMDB 数据lmdb_dataset.py#L187-L240SRResize的imgH/imgW/down_sample_scale高分辨率图缩放到 32×128低分辨率图缩放到 16×64即 2 倍下采样operators.py 中 SRResizeSRLabelEncode将字符标签编码为笔画序列与输入张量label_ops.py 中 SRLabelEncodeKeepKeys.keep_keys决定 DataLoader 返回的数据顺序配置注释参数取值说明epoch_num: 500完整训练周期较长原文档明确提示单卡训练周期长、不建议推荐多卡并行eval_batch_step: [0, 1000]从第 0 个 iteration 起每 1000 个 iteration 在验证集上评估一次max_text_length: 100笔画序列编码后的最大长度由 SRLabelEncode 使用SRResize.down_sample_scale: 2低分辨率图在imgW // down_sample_scale、imgH // down_sample_scale尺度下生成对应 TSRN 的scale_factor2上采样倍数。3.2 训练在完成数据准备后即可启动训练# 单卡训练训练周期长不建议 python3 tools/train.py -c configs/sr/sr_tsrn_transformer_strock.yml # 多卡训练通过 --gpus 参数指定卡号 python3 -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/sr/sr_tsrn_transformer_strock.yml训练过程中的几点说明每save_epoch_step: 3个 epoch 保存一次模型训练结束会产出best_accuracy权重文件位于save_model_dir下训练优化器配置为 Adambeta1: 0.5, beta2: 0.999, clip_norm: 0.25学习率0.0001从 TSRN 源码看训练时网络同时输出超分图sr_img、低分图lr_img、高分辨真值hr_img并借助冻结的识别 Transformerr34_transformer其参数在 tsrn.py#L95-L97 中被置为不可训练分别对超分图与高分辨率真值做识别预测从而生成单词注意力图监督信号——这是 Text Gestalt 区别于普通超分网络的关键设计。3.3 评估# GPU 评估Global.pretrained_model 为待测权重 python3 -m paddle.distributed.launch --gpus 0 tools/eval.py \ -c configs/sr/sr_tsrn_transformer_strock.yml \ -o Global.pretrained_model{path/to/weights}/best_accuracy评估时 Eval 数据集的变换流水线与训练基本一致SRResizeSRLabelEncodeKeepKeys但drop_last: False确保测试集全部样本都被评估。评估指标由 SRMetric 计算calculate_psnr基于 MSE 计算峰值信噪比图像数值范围归一化到 [0,1]calculate_ssim使用 11×11 高斯窗口计算结构相似性get_metric汇总输出psnr_avg、ssim_avg与all两者之和对应配置中main_indicator: all仓库文档表格中的 19.28 / 0.6560 即由此流程得到。3.4 预测# 预测使用的配置文件必须与训练一致 python3 tools/infer_sr.py -c configs/sr/sr_tsrn_transformer_strock.yml \ -o Global.pretrained_model{path/to/weights}/best_accuracy \ Global.infer_imgdoc/imgs_words_en/word_52.png执行命令后输入图像的超分结果保存在infer_result/目录由Global.save_visual控制默认infer_result/文件名为sr_前缀加原图名。输入示例图超分结果图从 infer_sr.py 的实现可以印证预测流程自动将Architecture.Transform.infer_mode置为TrueTSRN 前向时只保留lr_img与sr_img分支数据处理只保留SRResize同样切换为infer_mode只生成img_lr并跳过SRLabelEncode标签编码、KeepKeys仅保留[img_lr]模型输出sr_img经*255反归一化后以 BGR 顺序写盘得到可视化超分结果。4. 推理部署4.1 Python 推理inference model推理部署前需要先将训练保存的模型导出为inference model。以 Text Gestalt 官方训练权重sr_tsrn_transformer_strock_train.tar为例python3 tools/export_model.py -c configs/sr/sr_tsrn_transformer_strock.yml \ -o Global.pretrained_model{path/to/weights}/best_accuracy \ Global.save_inference_dir./inference/sr_out导出完成后执行 Text Gestalt 文本超分模型的 Python 推理python3 tools/infer/predict_sr.py \ --sr_model_dir./inference/sr_out \ --image_dirdoc/imgs_words_en/word_52.png \ --sr_image_shape3,32,128执行命令后图像的超分结果如下关于 predict_sr.py 的几点实现细节--sr_image_shape3,32,128表示C,H,W推理时输入图先被缩放到(imgW//2, imgH//2) (64, 16)即 TSRN 内部完成 2 倍上采样后输出 32×128 的超分图见resize_norm_img实现predict_sr.py#L79-L84--sr_batch_num可控制推理批大小开启--benchmark时支持输出自动日志auto_log用于性能分析若模型目录下存在inference.yml且Global.model_name非空会提示该模型由 PaddleOCR wheel 包支持、无需本流程避免重复加载。4.2 C 推理暂未支持。4.3 Serving 服务化部署暂未支持。4.4 更多推理部署暂未支持。5. 源码级原理解析进阶为了让读者对 Text Gestalt 有源码级的理解这里结合仓库实现补充三个核心组件的内部机制5.1 TSRN 网络结构TSRN 的整体结构为前处理卷积block1为 9×9 卷积 PReLU把输入RGB 3 通道maskTrue时 4 通道映射到2*hidden_units默认 64通道5 个循环残差块RecurrentResidualBlock每个块由两组卷积 BatchNorm Mish 激活 GRU 模块构成GRU 沿宽度方向建模文字序列的上下文依赖并保留残差连接block2~block6尾部卷积3×3 卷积 BatchNorm 聚合特征block7上采样模块由UpsampleBLock3×3 卷积 PixelShuffle Mish堆叠而成上采样倍数为2^upsample_block_num与scale_factor对应block8最后接 9×9 卷积输出 3 通道经tanh得到超分图STN 空间变换当STN: True时输入先经过 TPSSpatialTransformer 与 STN 头20 个控制点做薄板样条矫正用于对齐倾斜、扭曲的文字该分支仅在self.training时生效。从源码结构看tsrn.py#L95-L97TSRN 内部还挂载了一个被冻结的识别 Transformer其作用并非参与超分重建本身而是在训练时为超分图 vs 高分辨率真值各生成一组识别预测与单词注意力图作为笔画聚焦损失的监督来源。5.2 笔画聚焦损失StrokeFocusLossStrokeFocusLoss 的损失函数为loss (mse_loss attention_loss * 50) * 100mse_loss超分图sr_img与高分辨率真值hr_img的像素级 MSEattention_loss超分图识别得到的单词注意力图word_attention_map_pred与真值图word_attention_map_gt之间的 L1 距离权重为 50整体再放大 100 倍以平衡数值量级笔画分解字典在构造函数中加载character_dict_path把字符映射为笔画编号序列为注意力监督提供结构化先验。该设计正是Stroke-Aware笔画感知的体现网络不仅要在像素上逼近真值还要让超分结果在识别模型的注意力视角下与真值一致从而把重建资源引导到文字笔画所在区域。5.3 数据流水线LMDBDataSetSR从 LMDB 中以image_hr-{index}128×32与image_lr-{index}64×16两个 key 读取成对图像并对标签做字符过滤voc_typeupperSRResize高分辨率图缩放到(imgW, imgH)低分辨率图缩放到(imgW/down_sample_scale, imgH/down_sample_scale)均转成 CHW 的 float32 张量并除以 255 归一化SRLabelEncode把标签文本拆解为笔画序列sequence 0结尾标记并构造input_tensorstroke id 序列与length供识别 Transformer 解码使用。6. 引用若在学术研究中使用 Text Gestalt请引用原论文inproceedings{chen2022text, title{Text gestalt: Stroke-aware scene text image super-resolution}, author{Chen, Jingye and Yu, Haiyang and Ma, Jianqi and Li, Bin and Xue, Xiangyang}, booktitle{Proceedings of the AAAI Conference on Artificial Intelligence}, volume{36}, number{1}, pages{285--293}, year{2022} }7. FAQ原文档 FAQ 章节暂无已收录问题。结合上述源码与配置使用中常见注意点归纳如下单卡训练过慢原文档明确建议使用paddle.distributed.launch多卡训练预测与训练配置必须一致infer_sr.py依赖训练配置解析模型结构更换Architecture或变换流水线会导致加载失败数据规模与词典笔画分解字典english_decomposition.txt与训练数据必须配套词典缺失字符会被 SRLabelEncode 直接跳过当前推理形态Text Gestalt 超分目前仅支持 Python 推理C 推理、Serving 服务化与更多部署形态在原文档中均标注为暂未支持。8. 关联资源速览算法文档本文依据docs/version2.x/algorithm/super_resolution/algorithm_sr_gestalt.md英文版算法文档algorithm_sr_gestalt.en.md训练配置configs/sr/sr_tsrn_transformer_strock.yml网络实现ppocr/modeling/transforms/tsrn.py损失实现ppocr/losses/stroke_focus_loss.py指标实现ppocr/metrics/sr_metric.py数据读取ppocr/data/lmdb_dataset.py预测脚本tools/infer_sr.py 与 tools/infer/predict_sr.py环境准备与项目克隆环境配置、项目克隆【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

NDIS 6驱动zip包安装与排错全指南

NDIS 6驱动zip包安装与排错全指南

简介:这是一份NDIS 6网络驱动开发学习资源,压缩包内含可编译的驱动源码与工程文件,面向Windows驱动开发初学者、系统程序员及需要维护网络协议栈的工程人员,可帮助理解NDIS 6接口规范和驱动运作机制。工程采用Visual Studio组织结…

📅 2026/9/10 5:49:25
Supabase 怎么在 Postgres 中用 Vault 存储加密密钥并在 SQL 中引用?

Supabase 怎么在 Postgres 中用 Vault 存储加密密钥并在 SQL 中引用?

Supabase 怎么在 Postgres 中用 Vault 存储加密密钥并在 SQL 中引用? 【免费下载链接】supabase The Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. 项目地址: https://git…

📅 2026/9/10 5:44:25
DeepTutor v1.2.1 版本深度解析:Chat 分阶段 Token 配额可配置化与 Regenerate 响应再生成机制

DeepTutor v1.2.1 版本深度解析:Chat 分阶段 Token 配额可配置化与 Regenerate 响应再生成机制

DeepTutor v1.2.1 版本深度解析:Chat 分阶段 Token 配额可配置化与 Regenerate 响应再生成机制 【免费下载链接】DeepTutor DeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/. 项目地址: https://gitcode.com/GitHub_Trending/dee/DeepTutor …

📅 2026/9/10 5:44:25
MORE NEWS

更多资讯

📰

curl/libcurl CURLOPT_CAINFO 完整指南:CA 证书包路径设置与 TLS 校验原理

curl/libcurl CURLOPT_CAINFO 完整指南:CA 证书包路径设置与 TLS 校验原理 【免费下载链接】curl A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, …

📰

使用 Trainer API 进行超参数搜索:Transformers 内置 HPO 实战指南

使用 Trainer API 进行超参数搜索:Transformers 内置 HPO 实战指南 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, fo…

📰

Windows 部署 vLLM 实战:跑通 Qwen3-8B-FP8 本地推理服务的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

AI生成图片如何被机器一眼识别?从标识校验到像素取证的技术机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

构网型逆变器控制:下垂控制与虚拟同步机仿真对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

FinceptTerminal FinAgent Core 深度解析:基于 Agno 框架的单一可配置金融 Agent 系统

FinceptTerminal FinAgent Core 深度解析:基于 Agno 框架的单一可配置金融 Agent 系统 【免费下载链接】FinceptTerminal FinceptTerminal is a modern finance application offering advanced market analytics, investment research, and economic data tools, de…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬