此页面介绍了 PaddleOCR 中用于将裁剪后的文本图像转换为字符序列的文本识别模型。文本识别模型接收来自检测阶段的检测到的文本区域,并输出实际的文本内容。有关文本检测模型的信息,请参阅 识别模型。有关文档级理解模型的信息,请参阅 文档理解模型。
PaddleOCR 的文本识别模型遵循模块化流水线架构,具有可针对不同用例和语言需求进行配置的组件。
识别流水线组件
来源:configs/rec/rec_icdar15_train.yml33-57 configs/rec/rec_mv3_none_bilstm_ctc.yml33-57
PaddleOCR 实现三种主要的识别算法,每种算法都有不同的架构方法用于文本识别。
CRNN 结合了 CNN 特征提取和 RNN 序列建模,以实现鲁棒的文本识别。
CRNN 主要特点
CRNNMobileNetV3(缩放比例:0.5)或 ResNet(层数:34)SequenceEncoder,encoder_type: rnn来源:configs/rec/rec_mv3_none_bilstm_ctc.yml33-47 configs/rec/rec_r34_vd_none_bilstm_ctc.yml33-46
STARNet 增加了几何变换能力,以处理弯曲或失真的文本。
STARNet 主要特点
STARNetTPS(薄板样条)模型,具有 20 个控制点loc_lr: 0.1,模型大小可配置来源:configs/rec/rec_r34_vd_tps_bilstm_ctc.yml35-50 configs/rec/rec_mv3_tps_bilstm_ctc.yml35-51
Rosetta 采用简化的纯 CNN 方法,无需循环组件,可实现更快的推理。
Rosetta 主要特点
RosettaSequenceEncoder,encoder_type: reshape来源:configs/rec/rec_r34_vd_none_none_ctc.yml33-44 configs/rec/rec_mv3_none_none_ctc.yml33-46
骨干网络从输入文本图像中提取视觉特征。
| 骨干网络 (Backbone) | 配置 | 参数 | 用例 |
|---|---|---|---|
MobileNetV3 | 缩放比例: 0.5, 模型名称: large | 轻量 | 移动端部署 |
ResNet | 层数:34 | 更高的精度 | 服务器部署 |
输入图像形状:所有模型使用 [3, 32, 100](通道数、高度、宽度)
来源:configs/rec/rec_mv3_none_bilstm_ctc.yml37-40 configs/rec/rec_r34_vd_none_bilstm_ctc.yml37-39
Neck 组件将骨干网络提取的特征处理成序列格式,用于文本识别。
序列编码器参数
来源:configs/rec/rec_mv3_none_bilstm_ctc.yml41-44 configs/rec/rec_r34_vd_none_bilstm_ctc.yml40-43
所有识别模型都使用 CTC(连接主义时间分类)进行序列预测,无需显式对齐。
CTC 配置
CTCHead,可选 L2 正则化(fc_decay)CTCLoss,用于无字符级对齐的训练CTCLabelDecode,用于去除空白符和重复字符来源:configs/rec/rec_icdar15_train.yml45-53 ppocr/utils/ppocr_keys_v1.txt1-6000
识别模型通过 YAML 文件进行配置,这些文件指定了完整的架构和训练参数。
关键配置部分
来源:configs/rec/rec_icdar15_train.yml1-100 configs/rec/rec_mv3_none_bilstm_ctc.yml1-100
文本识别模型需要字符词汇表来进行分类和解码。
| 参数 | 值 | 描述 |
|---|---|---|
character_dict_path | ppocr/utils/en_dict.txt | 英文字符 |
character_dict_path | ppocr/utils/ppocr_keys_v1.txt | 中文字符 + 多语言 |
max_text_length | 25 | 最大序列长度 |
use_space_char | 否 | 包含空格字符 |
中文字符词汇表:包含 6000 多个字符,包括
来源:configs/rec/rec_icdar15_train.yml17-20 ppocr/utils/ppocr_keys_v1.txt1-6000