资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

大模型半监督学习-OCR产线使用文档

产线简介

大模型半监督学习-OCR 产线是飞桨特色的 OCR 训练产线,由文本检测模型和文本识别模型串联完成。预测图片首先经过文本检测模型获取全部的文本行检测框并进行矫正,之后经文本识别模型得到 OCR 文本结果。

在文本识别部分,通过大小模型联合训练的方式,使用少量有标签数据和大量无标签数据提升模型的精度,大幅度减少人工迭代模型的成本、标注数据的成本。下图展示了文本识别应用中的 2 个场景使用该产线后的效果,可以看到,在不同的场景中,大模型和小模型均有大幅提升。

注:文本检测模型暂不支持大小模型联合训练的方式。

大模型半监督效果对比

你可以通过 在线体验应用,单图测试不同模型方案的效果。

效果展示

车辆铭牌 电表
铭牌 电表
银行存根 英文文档
铭牌 英文

训练方式介绍

本产线中的文本识别模型支持 3 种训练方式:同时训练大模型与小模型、单独训练大模型、单独训练小模型,此处仅介绍文本识别模型的训练方式,文本检测模型的训练方式可以参考通用 OCR 产线。本产线所有支持的模型 benchmark 如下:

大模型列表 检测 Hmean(%) 识别 Avg Accuracy(%) GPU 推理耗时(ms) CPU 推理耗时(ms) 模型存储大小(M)
PP-OCRv4-server 82.69 79.20 22.20346 2662.158 198
小模型列表 检测 Hmean(%) 识别 Avg Accuracy(%) GPU 推理耗时(ms) CPU 推理耗时(ms) 模型存储大小(M)
PP-OCRv4-mobile 77.79 78.20 2.719474 79.1097 15

注:评估集是 PaddleOCR 自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中文本识别包含 1.1w 张图片,检测包含 500 张图片。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。

同时训练大模型与小模型

推荐的训练方式,在一条产线内同时完成大模型和小模型的训练,并选择评估满意的模型权重做部署。大模型的训练是一个半监督学习过程,训练过程被分为了不同的阶段,耗时一般较长。在大模型训练结束后,会默认选中评估结果最佳的大模型权重,并使用大模型为无标注数据生成的伪标签以及标注数据来训练小模型,小模型的训练耗时一般较短。训练结束后,你会同时得到大模型和小模型的训练结果,并在评估后选择一个满意的模型权重,部署为一个服务 API 或离线 SDK,用于实际使用场景中。

单独训练大模型

在大模型半监督学习中,核心思想是通过大模型来指导小模型的训练,但是客观来说,大模型自学习也会有一定的精度提升,可以作为单独的模型方案做部署。因此,当需求场景对精度要求高,而对推理速度不敏感时,可以选择单独训练大模型的方式,用大模型的权重做部署。在此训练方式中,你无需选择小模型,训练结束后只会得到大模型的训练结果,在评估后选择一个满意的模型权重,部署为一个服务 API 或离线 SDK,用于实际使用场景中。

单独训练小模型

如果在之前的产线中,已经完成了大模型的训练,并且评估得到了精度满意的大模型权重,你可以选择「标记模型权重」,并在本产线中载入之前标记过的大模型权重,单独训练小模型。在此训练方式中,训练结束后只会得到小模型的训练结果,在评估后选择一个满意的模型权重,部署为一个服务 API 或离线 SDK,用于实际使用场景中。

数据准备

MSTextRecLMSSLDataset

大模型半监督学习-文本识别要求的数据集格式。

数据集目录结构

请按照如下格式准备数据,以确保产线可以正确读取数据集,进行模型训练。

dataset_dir      # 数据集根目录,目录名称可以改变
├── images       # 存放图像的目录,目录名称可以改变,但要注意和train.txt val.txt的内容对应
├── train.txt    # 训练集标注文件,文件名称不可改变,内容举例:images/111085122871_0.JPG \t 百度
├── train_unlabeled.txt    # 无标注训练集文件,文件名称不可改变,内容举例:images/111085122871_0.JPG
├── val.txt      # 验证集标注文件,文件名称不可改变,内容举例:images/111085122871_0.JPG \t 百度
└── dict.txt     # 字典文件,文件名称不可改变。字典文件将所有出现的字符映射为字典的索引,每行为一个单字,内容举例:百

与文本识别要求数据集格式 MSTextRecDataset 相比,在 dataset_dir 目录下增加无标注数据 train_unlabeled.txt,要求把所有无标注的图像名称按行整理,你可以参考:示例数据集文本识别数据准备

标注格式要求

PaddleOCR 数据格式,如果你有一批未标注数据,请使用 PPOCRLabel 进行标注,在完成数据集划分后将文字识别(rec)目录中的rec_gt_train.txt改名为train.txtrec_gt_test.txt改名为val.txt即可。

常规标注
ppocrlabel_常规标注

与文本检测不同的是,文本识别数据集增加了一个字典文件 dict.txt,每行为一个单字,如"a"、"度"、"3"等,用于字符索引。如果你没有特殊的要求,我们推荐使用 PP-OCR 默认字典,也可使用脚本 gen_dict.py 根据训练/评估数据自动生成字典:

完成格式转换和校验的数据集会保存在个人数据集中,支持用户跨产线导入数据集。

此外,本产线支持引入无标签数据,除已完成标注的数据外,你可以在 images 目录下增加未标注数据,并将图像路径保存在 train_unlabeled.txt 中,这些数据会以无监督的方式参与模型训练,获得精度更高的模型。

参数准备

正确设置训练参数对于模型训练至关重要,本产线支持两种参数设置方式:修改表单和修改配置文件,常见训练参数推荐使用表单修改,可展开高级设置修改更多参数,对飞桨套件参数较熟悉的用户可以通过表单修改全部训练参数。训练大模型和小模型的基础配置和高级配置参数如下:

基础配置

  • 轮次(Epochs): 模型对训练数据的重复学习次数,一般来说,轮次越大,模型训练时间越长,模型精度越高,但是如果设置特别大,可能会导致模型过拟合。如果对轮次没有特别的要求,可以使用默认值进行训练。
  • 批大小(Batch Size): 由于训练数据量一般较大,模型每轮次的训练是分批读取数据的,批大小是每一批数据的数据量,和显存直接相关,批大小越大模型训练的速度越快,显存占用越高。为确保训练不会因为显存溢出而终止,我们将 V100 32G 单卡可以运行的最大值作为批大小的可设置最大值。
  • 类别数量(Class Num): 数据集中检测结果的类别数,由于类别数量和数据集直接相关,我们无法填充默认值,请根据数据校验的结果进行填写,类别数量需要准确,否则可能引起训练失败。
  • 学习率(Learning Rate): 模型训练过程中梯度调整的步长,通常与批大小成正比例关系,学习率设置过大可能会导致模型训练不收敛,设置过小可能会导致模型收敛速度过慢。在不同的数据集上学习率可能不同,对结果影响较大,需要不断调试。

高级配置

  • 断点训练权重: 在模型训练过程中发生人为或意外终止的情况时,加载训练中断之前保存的断点权重路径,完成继续训练,避免算力资源浪费。
  • 预训练权重: 基于已经在大数据集上训练好的模型权重进行微调训练,可提高模型训练开始前的初始经验,提高训练效率。
  • 热启动步数(WarmUp Steps): 在训练初始阶段以较小学习率缓慢增加到设置学习率的批次数量,该值的设置可以避免模型在初始阶段以较大学习率迭代模型最终破坏预训练权重,一定程度上提升模型的精度。
  • log 打印间隔(Log Interval) / step: 训练日志中打印日志信息的批次数量间隔。
  • 评估、保存间隔(Eval Interval) / epoch: 训练过程中对验证集进行评估以及保存权重的轮数间隔。

特别地,当你单独训练小模型时,需要设置大模型权重,该模型权重为了让大模型教导小模型训练,获得高精度的小模型。

提交训练

训练套餐包括:V100 32G 1卡 3算力点/小时、V100 32G 1卡 30A币/小时、V100 32G 4卡 120A币/小时、V100 32G 8卡 240A币/小时,支持用户选择算力点或 A 币支付 GPU 使用花费。你可以根据自己的需求和平台 GPU 占用情况选择合适的训练套餐。

为鼓励更多用户体验模型产线新功能,每个账户赠送 3 张限时免费卡,前三次使用 V100 32G 1卡 30A币/小时训练套餐免费,之后将按对应训练时长计费,此外,训练过程中主动停止或因配置信息有误导致的训练失败,限免卡不返还。

产线详情页

提交训练后,页面会刷新为产线详情页,展示用户设置的全部训练配置信息,包括:产线模板、微调模型、训练参数配置、数据集、输出路径、资源选择和任务状态。当 GPU 集群可以执行训练任务时,任务状态显示为运行中,日志详情实时打印当前训练 log;当 GPU 集群暂无资源执行训练任务时,任务状态显示为排队中,此时可选择取消排队,返回配置中状态,如使用限免卡,限免卡会原路返还。

产线评估

产线状态为完成态(含运行成功、已停止、运行失败)时,产线内通常有结果产出,支持用户对产出的模型权重进行评估。训练中使用验证集评估的结果被提前保存,以表单的形式展示在评估页面,方便用户查看和标记模型权重。

注:大模型半监督学习的特点是引入用户的无标签数据集进行训练,因此不提供官方模型权重,不支持直接部署,需训练后评估模型权重。

标记模型权重

每条产线产出的模型权重通常不止一个,为方便用户查找和管理,你可以在这里对满意的模型权重做个标记,并为它取一个昵称(例如:数据集A评估最佳)。标记过的模型权重支持跨产线导入,也就是说,你可以在其他产线的同模型名选择权重(如模型部署、断点训练)的下拉菜单中,找到在本产线标记过的权重。当然,权重也可以取消标记,以减少选择成本。

创建评估任务

除了在验证集上评估模型权重外,如果你还有一批新的测试数据,可以选择自定义测试集的方式,上传测试数据并进行评估。请注意数据集的格式要求与训练数据集相同,但此处不会进行数据校验,如果数据格式存在问题,可能会引发评估任务失败。

历史评估任务的设置信息与日志会完整保留,可以通过历史记录查看详细情况。

产线部署

本产线支持两种部署方式:在线服务化部署和导出离线部署包。你可以根据自己的实际需求选择合适的部署方式,使用你满意的模型方案。

在线服务化部署

服务化部署指的是将模型方案部署为一个云端可调用 API,服务成功运行后,你可以使用自己的访问令牌鉴权后调用 API。此外,在线体验的应用中也可以找到这个 API 进行小样本可视化测试哦。

注:这种方式适用于数据不敏感且无部署机器的用户使用,API 为用户私有,仅能通过用户个人的访问令牌鉴权后调用。

导出离线部署包

如果你有离线部署的需求,产线也支持用户导出离线部署包。与在线服务化部署不同的是,你需要选择本地运行环境,产线会依据运行环境的不同导出相应的部署包,支持用户下载后本地运行。

此外,特色产线的离线部署包需付费使用,请在产线内购买部署包序列号,本地激活后使用。购买注意事项及商务对接,可点击 立即咨询

上一篇
通用OCR产线使用文档
下一篇
通用表格识别产线使用文档