mcpField
T
tao-train-ocrnet

tao-train-ocrnet

github.com/nvidia数据与数据库3.8k1.6k 次安装今天更新
代码仓库

关于 tao-train-ocrnet

此 TAO skill 用于训练 OCRNet,从裁剪的文本区域图像中识别文字,并支持 CTC 和注意力解码器。它还通过 TAO 工作流指导评估、推理、导出及模型优化操作。

主要功能

  1. 01识别裁剪图像区域中的文字
  2. 02支持 CTC 和注意力解码器
  3. 03指导训练、评估和推理
  4. 04支持导出、剪枝和量化
  5. 05提供 TensorRT 部署指导

适用场景

  1. 01使用带标注的文本区域图像训练 OCRNet
  2. 02在测试集上评估训练检查点
  3. 03对裁剪的文本图像运行推理
  4. 04导出或优化训练后的模型

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nvidia/skills --skill tao-train-ocrnet

安装后在 Claude Code 中输入/tao-train-ocrnet确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

BENCHMARK.md
skill-card.md
skill.oms.sig
config/
skillspector-baseline.yaml
evals/
evals.json
references/
skill_info.yaml
spec_template_dataset_convert.yaml
spec_template_deploy_experiment.yaml
spec_template_evaluate.yaml
spec_template_export.yaml
spec_template_gen_trt_engine.yaml
spec_template_inference.yaml
spec_template_prune.yaml
spec_template_quantize.yaml
spec_template_retrain.yaml
spec_template_train.yaml
tao-deploy-ocrnet.md
tao-deploy-ocrnet.skill_info.yaml
schemas/
dataset_convert.schema.json
evaluate.schema.json
export.schema.json
gen_trt_engine.schema.json
inference.schema.json
manifest.json
prune.schema.json
quantize.schema.json
retrain.schema.json
train.schema.json

详细介绍

OCRNet

独立安装? 如果此会话不是由 TAO skill bank 插件初始化的,请先运行 tao-setup skill(主机预检、凭据、跨 skill 发现)。

用于场景文本识别的 OCRNet。可识别裁剪后的文本区域图像中的文本内容。支持 CTC 和基于注意力的解码器。

设置 train.pretrained_model_path 以使用预训练 OCR 权重。

对于 TAO Deploy TensorRT 操作(gen_trt_engine、TensorRT evaluate 和 TensorRT inference),请先阅读 references/tao-deploy-ocrnet.md。Deploy 规范模板位于此 skill 的 references/ 文件夹中,前缀为 spec_template_deploy_*.yaml。

Dataclass 架构

生成的 TAO Core 架构以 schemas/<action>.schema.json 的形式打包,schemas/manifest.json 列出了可用操作。每个生成的架构还会根据架构顶层的 default 字段生成 references/spec_template_<action>.yaml。AutoML 启用状态通过 references/skill_info.yaml 中模型层级的 automl_enabled 声明。某个操作要能运行 AutoML,必须存在且可解析 schemas/<action>.schema.json 和 references/spec_template_<action>.yaml。请使用打包的所选操作架构来获取 automl_default_parameters、automl_disabled_parameters、默认值、最小值/最大值边界、枚举、选项权重、数学条件、依赖项和常用参数。不要假定运行时存在 ~/tao-core;维护者会在打包 skill bank 前重新生成架构/模板。

训练操作策略

此模型在模型层级启用了 AutoML。在处理任何训练阶段请求之前,请阅读 references/skill_info.yaml,并根据明确指定的 automl_policy 值或用户的工作流请求确定本次运行的覆盖设置。默认使用 automl_policy: on,且在新的启动提示中只提供 on / off 选项。将“关闭 AutoML”“禁用 AutoML”“不进行 HPO”或“普通训练”等表述视为仅对本次运行设置 automl_policy: off。当 automl_policy: on、automl_enabled: true 且已打包 schemas/train.schema.json 和 references/spec_template_train.yaml 时,默认通过 tao-skill-bank:tao-run-automl 路由训练操作,并使用此模型的 skill_dir。保留工作流/应用对数据集、规范、输出目录、GPU/平台设置、父检查点和 automl_policy 的覆盖设置。仅当 automl_policy: off 或缺少打包的训练架构/模板时,才直接进行模型训练;如果缺少架构,请说明此模型虽已启用 AutoML,但在生成架构之前无法运行 AutoML。

非训练操作(如 evaluate、inference、export)和部署流程仍由此模型 skill 处理。每次运行的 automl_policy 覆盖设置不会更改模型元数据。

训练要求

  • 数据集类型: ocrnet
  • 格式: 默认
  • AutoML 训练指标: val_acc,其中 direction=maximize;TAO 会将 此键写入 status.json
  • Lightning 进度别名: val_acc_1
  • 独立评估指标: test_acc,其中 direction=maximize
各操作的数据集要求
操作规范键来源文件列表?
dataset_convertdataset_convert.input_img_dirtrain_datasets 或 eval_dataset包含裁剪文本图像的已解压文件夹否
dataset_convertdataset_convert.gt_filetrain_datasets 或 eval_datasettrain/gt_new.txt 或 test/gt_new.txt否
evaluatedataset.character_list_fileeval_datasetcharacter_list否
evaluateevaluate.test_dataset_direval_dataset已解压的测试图像文件夹否
evaluateevaluate.test_dataset_gt_fileeval_datasettest/gt_new.txt否
evaluateevaluate.checkpoint父级 train/AutoML 作业best_accuracy.pth 或指定的确切轮次检查点否
exportdataset.character_list_fileeval_datasetcharacter_list否
exportexport.checkpoint父级 train/AutoML 作业best_accuracy.pth 或指定的确切轮次检查点否
deploy/gen_trt_enginegen_trt_engine.tensorrt.calibration.cal_image_dircalibration_dataset用于 INT8 校准的已解压校准图像文件夹是
deploy/gen_trt_enginegen_trt_engine.onnx_file父级 export 作业导出的 .onnx 产物否
deploy/gen_trt_enginedataset.character_list_fileeval_datasetcharacter_list否
inferencedataset.character_list_fileeval_datasetcharacter_list否
inferenceinference.inference_dataset_dirinference_dataset已解压的推理图像文件夹否
inferenceinference.checkpoint父级 train/AutoML 作业best_accuracy.pth 或指定的确切轮次检查点否
prunedataset.character_list_fileeval_datasetcharacter_list否
pruneprune.checkpoint父级 train/AutoML 作业best_accuracy.pth 或指定的确切轮次检查点否
quantizedataset.train_dataset_dirdataset_convert train 作业包含 data.mdb 和 lock.mdb 的 LMDB 文件夹是
quantizedataset.val_dataset_dirdataset_convert eval 作业包含 data.mdb 和 lock.mdb 的 LMDB 文件夹否
quantizedataset.character_list_fileeval_datasetcharacter_list否
quantizedataset.quant_calibration_dataset.images_dirtrain_datasets已解压的校准图像文件夹否
quantizequantize.model_path父级 train/AutoML 作业由解析器选定的检查点否
retraindataset.train_dataset_dirdataset_convert train 作业包含 data.mdb 和 lock.mdb 的 LMDB 文件夹是
retraindataset.val_dataset_dirdataset_convert eval 作业包含 data.mdb 和 lock.mdb 的 LMDB 文件夹否
retraindataset.character_list_fileeval_datasetcharacter_list否
retrainmodel.pruned_graph_path父级 prune 作业剪枝后的 .pth 产物否
traindataset.train_dataset_dirdataset_convert train 作业包含 data.mdb 和 lock.mdb 的 LMDB 文件夹是
traindataset.train_gt_filetrain_datasets使用原始文件夹而非 LMDB 时的 train/gt_new.txt否
traindataset.val_dataset_dirdataset_convert eval 作业包含 data.mdb 和 lock.mdb 的 LMDB 文件夹否
traindataset.val_gt_fileeval_dataset使用原始文件夹而非 LMDB 时的 test/gt_new.txt否
traindataset.character_list_fileeval_datasetcharacter_list否
检查点选择

OCRNet 训练会同时生成 best_accuracy.pth 和按轮次、步数命名的检查点,例如 model_epoch_000_step_00003.pth。请通过 references/skill_info.yaml 中的 spec_params 映射使用 SDK/模型检查点解析器;不要猜测并按时间排序来选择最新的 .pth。

  • 对最佳检查点相关的 evaluate、inference、export 和 prune 请求,使用 best_accuracy.pth。
  • 对指定轮次/步数的操作,使用请求中指定的确切 model_epoch_*_step_*.pth。
  • 仅在恢复训练时使用 train.resume_training_checkpoint_path;从剪枝输出重新训练时使用 model.pruned_graph_path。PyT 镜像中的 OCRNet 不提供单独的 ocrnet retrain CLI 子任务;模型技能的 retrain 操作会通过设置剪枝图路径来调用 ocrnet train -e。
  • OCRNet quantize 会通过 PyTorch 加载模型。对于由同一次本地运行生成的可信检查点,如果 PyTorch 2.6+ 拒绝以仅加载权重的方式加载,请设置 TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1。
常见 Spec 覆盖项

每项操作都必须覆盖数据源。分别对训练集和验证集运行 dataset_convert,然后将直接包含 data.mdb 和 lock.mdb 的 LMDB 文件夹传入 train、quantize 和 retrain。远程存储中的压缩包必须先解压,才能用作图像目录。

TRAIN_IMAGES = "<extracted train image folder>"
TRAIN_GT = "<train gt_new.txt>"
EVAL_IMAGES = "<extracted eval image folder>"
EVAL_GT = "<eval gt_new.txt>"
TRAIN_LMDB = "<train dataset_convert results_dir>"
EVAL_LMDB = "<eval dataset_convert results_dir>"
CHAR_LIST = "<character_list>"

dataset_convert(每个数据集划分运行一次):

{
    "dataset_convert.input_img_dir": TRAIN_IMAGES,
    "dataset_convert.gt_file": TRAIN_GT,
}

train(必须指定数据源):

{
    "train.num_epochs": 30,
    "train.checkpoint_interval": 10,
    "train.validation_interval": 10,
    "train.num_gpus": 1,
    "dataset.batch_size": 16,
    "dataset.train_dataset_dir": [TRAIN_LMDB],
    "dataset.val_dataset_dir": EVAL_LMDB,
    "dataset.train_gt_file": "",
    "dataset.val_gt_file": "",
    "dataset.character_list_file": CHAR_LIST,
}

deploy/gen_trt_engine(必须指定数据源):

{
    "gen_trt_engine.onnx_file": "<selected export ONNX>",
    "gen_trt_engine.trt_engine": "<output engine path>",
    "gen_trt_engine.tensorrt.calibration.cal_cache_file": "<output calibration cache path>",
    "gen_trt_engine.tensorrt.data_type": "fp16",
    "gen_trt_engine.tensorrt.calibration.cal_image_dir": [TRAIN_IMAGES],
    "dataset.character_list_file": CHAR_LIST,
}

evaluate(必须指定数据源):

{
    "evaluate.checkpoint": "<selected train/AutoML checkpoint>",
    "dataset.character_list_file": CHAR_LIST,
    "evaluate.test_dataset_dir": EVAL_IMAGES,
    "evaluate.test_dataset_gt_file": EVAL_GT,
}

export(必须指定数据源):

{
    "export.checkpoint": "<selected train/AutoML checkpoint>",
    "export.onnx_file": "<output ONNX path>",
    "dataset.character_list_file": CHAR_LIST,
}

inference(必须指定数据源):

{
    "inference.checkpoint": "<selected train/AutoML checkpoint>",
    "dataset.character_list_file": CHAR_LIST,
    "inference.inference_dataset_dir": EVAL_IMAGES,
}

prune(必须指定数据源):

{
    "prune.checkpoint": "<selected train/AutoML checkpoint>",
    "prune.pruned_file": "<output pruned PTH path>",
    "dataset.character_list_file": CHAR_LIST,
}

quantize(必须指定数据源):

{
    "dataset.train_dataset_dir": [TRAIN_LMDB],
    "dataset.val_dataset_dir": EVAL_LMDB,
    "dataset.character_list_file": CHAR_LIST,
    "dataset.quant_calibration_dataset.images_dir": TRAIN_IMAGES,
    "quantize.model_path": "<selected train/AutoML checkpoint>",
}

retrain(必须指定数据源):

{
    "dataset.train_dataset_dir": [TRAIN_LMDB],
    "dataset.val_dataset_dir": EVAL_LMDB,
    "dataset.character_list_file": CHAR_LIST,
    "model.pruned_graph_path": "<selected prune output>",
}

评估数据集

可选。测试数据以单独的压缩包形式提供。

重要参数

  • dataset.character_list_file:定义支持字符集的字符列表路径。此参数决定输出词汇表大小。
  • model.backbone:默认为 ResNet。
  • model.prediction:解码器类型。CTC 或 Attn(基于注意力)。
  • train.optim.lr:学习率。默认值为 1.0(Adadelta 优化器)。较高的默认值是 Adadelta 特有的。
  • dataset.batch_size:每张 GPU 的批次大小。默认值为 16。

多 GPU/多节点

**启动方式:**由 Lightning 管理(单个 python 进程,由 Lightning 启动工作进程)。

Spec Key描述默认值
train.num_gpusGPU 数量1
train.gpu_idsGPU 设备索引[0]
train.distributed_strategy策略名称auto
  • 策略:单 GPU 时为 auto;多 GPU 时从配置中读取 train.distributed_strategy
  • 训练脚本中未显式设置 num_nodes——面向单节点
  • 模型轻量,通常单张 GPU 即可满足需求

硬件

最低需要 1 张 GPU,建议使用 1 张 GPU。每张 GPU 需配备 8GB 以上显存。OCR 文本识别的计算量较小,通常单张 GPU 即可满足需求。

错误模式

需要执行 dataset_convert:如果使用原始图像和 gt 文件,请先运行 dataset_convert,以生成 LMDB 格式的数据。

dataset_convert 输出文件夹:直接运行 ocrnet dataset_convert 会将 data.mdb 和 lock.mdb 直接写入 dataset_convert.results_dir。请将该文件夹本身用于 dataset.train_dataset_dir、dataset.val_dataset_dir、量化和重新训练输入。由 SDK 支持的运行可能会将同一个 LMDB 文件夹封装在作业产物目录中;请找到实际包含 data.mdb 和 lock.mdb 的文件夹。

GT 文件 BOM:某些文本识别 GT 文件的第一个文件名前可能带有 UTF-8 BOM。如果数据集转换日志显示缺失路径,且第一个图像名前有不可见前缀,请在转换或评估前,从 GT 文件的本地副本中去除 BOM。

字符列表不匹配:训练数据中的所有字符都必须包含在 character_list 文件中。

导出/剪枝输出字段必填:export.onnx_file 和 prune.pruned_file 必须是可写的输出路径。这些路径在 references/skill_info.yaml 中声明,以便由 SDK 支持的模型运行自动创建。

TensorRT 位于 deploy 中:PyT OCRNet CLI 提供 dataset_convert、evaluate、export、inference、prune、quantize 和 train,但不提供 gen_trt_engine。请使用 references/tao-deploy-ocrnet.md 和 deploy/skill_info.yaml 生成 TensorRT 引擎,以及执行基于 TensorRT 的评估/推理。

Spec 参数 / 父模型推断

特定于模型的推断映射应放在此 MD 文件中,而非 config.json 中。生成的运行器应读取本节,并在调用 create_job() 之前使用 SDK 辅助函数应用这些映射。这与旧版微服务的 infer_params.py 流程一致。

来自 TAO Core ocrnet.config.json 的推断映射:

操作Spec 字段推断函数含义
dataset_convertresults_diroutput_dir当前作业的结果目录
evaluateencryption_keykey加密密钥
evaluateevaluate.checkpointparent_model从父作业结果文件夹推断出的模型文件
evaluateevaluate.trt_engineparent_model从父作业结果文件夹推断出的模型文件
evaluatemodel.pruned_graph_pathpruned_model父剪枝模型
evaluateresults_diroutput_dir当前作业的结果目录
exportencryption_keykey加密密钥
exportexport.checkpointparent_model从父作业结果文件夹推断出的模型文件
exportexport.onnx_filecreate_onnx_file输出 ONNX 路径
exportresults_diroutput_dir当前作业的结果目录
deploy/gen_trt_engineencryption_keykey加密密钥
deploy/gen_trt_enginegen_trt_engine.onnx_fileparent_model从父导出作业结果文件夹推断出的 ONNX 文件
deploy/gen_trt_enginegen_trt_engine.tensorrt.calibration.cal_cache_filecreate_cal_cache校准缓存路径
deploy/gen_trt_enginegen_trt_engine.trt_enginecreate_engine_file输出 TensorRT 引擎路径
deploy/gen_trt_engineresults_diroutput_dir当前作业的结果目录
inferenceencryption_keykey加密密钥
inferenceinference.checkpointparent_model从父作业结果文件夹推断出的模型文件
inferenceinference.trt_engineparent_model从父作业结果文件夹推断出的模型文件
inferencemodel.pruned_graph_pathpruned_model父剪枝模型
inferenceresults_diroutput_dir当前作业的结果目录
pruneencryption_keykey加密密钥
pruneprune.checkpointparent_model从父作业结果文件夹推断出的模型文件
pruneprune.pruned_filecreate_pth_file输出 PTH 路径
pruneresults_diroutput_dir当前作业的结果目录
quantizeencryption_keykey加密密钥
quantizequantize.model_pathparent_model从父作业结果文件夹推断出的模型文件
quantizeresults_diroutput_dir当前作业的结果目录
retrainencryption_keykey加密密钥
retrainmodel.pruned_graph_pathparent_model父剪枝模型
retrainresults_diroutput_dir当前作业的结果目录
trainencryption_keykey加密密钥
trainresults_diroutput_dir当前作业的结果目录
traintrain.pretrained_model_pathptm_if_no_resume_model不存在恢复检查点时使用的 PTM
traintrain.resume_training_checkpoint_pathresume_model从当前作业结果文件夹推断出的模型文件

对于 parent_model 或 parent_model_folder,将上游 train/export/AutoML 子作业 ID 作为 parent_job_id 传入。SDK 会列出父结果文件夹、筛选检查点构件,并返回选定的模型文件或文件夹。不要将这些映射加回 config.json,也不要修改生成的运行器脚本,让其猜测检查点路径。

部署

评论

支持 Markdown