tao-train-ocrnet について
tao-train-ocrnet は、NVIDIA TAO で切り出した文字領域画像を認識するためのスキルです。CTC とアテンション方式のデコーダーに対応し、データセット変換、学習、TensorRT デプロイのワークフローを扱います。
主な機能
- 01切り出した領域の文字認識
- 02CTC とアテンション方式のデコーダー
- 03生データから LMDB への変換
- 04学習・評価・推論
- 05TensorRT デプロイのワークフロー
活用シーン
- 01切り出した画像領域内の文字を認識
- 02画像とアノテーションを LMDB に変換
- 03モデルをエクスポートして TensorRT エンジンを生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ promptingcompany/ nv-skills --skill tao-train-ocrnetインストール後、Claude Code で/tao-train-ocrnetを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/evals.jsonreferences/skill_info.yamlspec_template_dataset_convert.yamlspec_template_deploy_experiment.yamlspec_template_evaluate.yamlspec_template_export.yamlspec_template_gen_trt_engine.yamlspec_template_inference.yamlspec_template_prune.yamlspec_template_quantize.yamlspec_template_retrain.yamlspec_template_train.yamltao-deploy-ocrnet.mdtao-deploy-ocrnet.skill_info.yamlschemas/dataset_convert.schema.jsonevaluate.schema.jsonexport.schema.jsongen_trt_engine.schema.jsoninference.schema.jsonmanifest.jsonprune.schema.jsonquantize.schema.jsonretrain.schema.jsontrain.schema.json詳細
OCRNet
OCRNet はシーンテキスト認識用です。切り抜かれたテキスト領域の画像からテキスト内容を認識します。CTC デコーダーとアテンションベースのデコーダーに対応しています。
事前学習済み OCR 重みを使用するには、train.pretrained_model_path を設定してください。
TAO Deploy の TensorRT アクション(gen_trt_engine、TensorRT の evaluate、TensorRT の inference)については、まず references/tao-deploy-ocrnet.md を読んでください。デプロイ仕様テンプレートは、このスキルの references/ フォルダーにあり、ファイル名のプレフィックスは spec_template_deploy_*.yaml です。
データクラススキーマ
生成された TAO Core スキーマは schemas/<action>.schema.json にパッケージ化されており、利用可能なアクションは schemas/manifest.json に記載されています。各生成スキーマでは、スキーマ最上位の default フィールドから references/spec_template_<action>.yaml も生成されます。AutoML の有効化は、automl_enabled を介して references/skill_info.yaml のモデルレイヤーで宣言されます。AutoML を実行可能にするには、schemas/train.schema.json と references/spec_template_train.yaml が存在し、解析できる必要があります。automl_default_parameters、automl_disabled_parameters、デフォルト値、最小値/最大値の範囲、列挙値、オプションの重み、数式条件、依存関係、よく使用されるパラメーターには、パッケージ化された train スキーマを使用してください。実行時に ~/tao-core が存在することを前提にしないでください。メンテナーは、スキルバンクをパッケージ化する前にスキーマ/テンプレートを再生成してください。
トレーニングアクションのポリシー
このモデルでは、モデルレイヤーで AutoML が有効になっています。トレーニング段階のリクエストを処理する前に、references/skill_info.yaml を読み込み、明示的な automl_policy 値またはユーザーのワークフローリクエストから実行時の上書きを解決してください。「AutoML をオフにする」「AutoML を無効にする」「HPO なし」「通常のトレーニング」などの表現は、この実行に限り automl_policy: off として扱ってください。それ以外の場合は、デフォルトで auto とします。automl_policy: auto、automl_enabled: true、および schemas/train.schema.json と references/spec_template_train.yaml の両方がパッケージ化されている場合、デフォルトでは、このモデルの skill_dir を指定して tao-skill-bank:tao-run-automl 経由で train アクションを実行してください。データセット、仕様、出力ディレクトリ、GPU/プラットフォーム設定、親チェックポイント、automl_policy に対するワークフロー/アプリケーションの上書きを維持してください。直接モデルをトレーニングするのは、automl_policy: off の場合、またはパッケージ化された train スキーマ/テンプレートがない場合に限ってください。スキーマがない場合は、AutoML は有効ですが、スキーマが生成されるまではこのモデルで実行できないことを報告してください。
evaluate、inference、export、デプロイフローなどの train 以外のアクションは、このモデルのスキル内にとどまります。実行ごとの automl_policy 上書きによってモデルのメタデータが変わることはありません。
トレーニング要件
- データセットタイプ: ocrnet
- 形式: default
- 監視指標: val_acc
アクションごとのデータセット要件
| アクション | Spec Key | ソース | ファイル | リスト? |
|---|---|---|---|---|
| dataset_convert | dataset_convert.input_img_dir | id | いいえ | |
| dataset_convert | dataset_convert.gt_file | id | いいえ | |
| evaluate | dataset.character_list_file | eval_dataset | character_list | いいえ |
| evaluate | evaluate.test_dataset_dir | eval_dataset | results/{dataset_convert_job_id}/dataset_convert/lmdb | いいえ |
| export | dataset.character_list_file | eval_dataset | character_list | いいえ |
| gen_trt_engine | gen_trt_engine.tensorrt.calibration.cal_image_dir | calibration_dataset | はい | |
| inference | dataset.character_list_file | eval_dataset | character_list | いいえ |
| inference | inference.inference_dataset_dir | eval_dataset | test.tar.gz | いいえ |
| prune | dataset.character_list_file | eval_dataset | character_list | いいえ |
| quantize | dataset.train_dataset_dir | train_datasets | results/{dataset_convert_job_id}/dataset_convert/lmdb | はい |
| quantize | dataset.val_dataset_dir | eval_dataset | results/{dataset_convert_job_id}/dataset_convert/lmdb | いいえ |
| quantize | dataset.character_list_file | eval_dataset | character_list | いいえ |
| quantize | dataset.quant_calibration_dataset.images_dir | train_datasets | train.tar.gz | いいえ |
| retrain | dataset.train_dataset_dir | train_datasets | results/{dataset_convert_job_id}/dataset_convert/lmdb | はい |
| retrain | dataset.val_dataset_dir | eval_dataset | results/{dataset_convert_job_id}/dataset_convert/lmdb | いいえ |
| retrain | dataset.character_list_file | eval_dataset | character_list | いいえ |
| train | dataset.train_dataset_dir | train_datasets | results/{dataset_convert_job_id}/dataset_convert/lmdb | はい |
| train | dataset.val_dataset_dir | eval_dataset | results/{dataset_convert_job_id}/dataset_convert/lmdb | いいえ |
| train | dataset.character_list_file | eval_dataset | character_list | いいえ |
一般的な Spec のオーバーライド
データソースのオーバーライドはすべてのアクションで必須です。エージェントは、上記の「アクションごとのデータセット要件」表からデータソースのパスを構成し、spec_overrides に含める必要があります。
S3_TRAIN = "s3://bucket/data/train"
S3_EVAL = "s3://bucket/data/eval"
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": [f"{S3_TRAIN}/results/{dataset_convert_job_id}/dataset_convert/lmdb"],
"dataset.val_dataset_dir": f"{S3_EVAL}/results/{dataset_convert_job_id}/dataset_convert/lmdb",
"dataset.character_list_file": f"{S3_EVAL}/character_list",
}
gen_trt_engine(必須データソース):
{
"gen_trt_engine.tensorrt.data_type": "fp16",
"gen_trt_engine.tensorrt.calibration.cal_image_dir": [f"{S3_TRAIN}"],
}
evaluate(必須データソース):
{
"dataset.character_list_file": f"{S3_EVAL}/character_list",
"evaluate.test_dataset_dir": f"{S3_EVAL}/results/{dataset_convert_job_id}/dataset_convert/lmdb",
}
export(必須データソース):
{
"dataset.character_list_file": f"{S3_EVAL}/character_list",
}
inference(必須データソース):
{
"dataset.character_list_file": f"{S3_EVAL}/character_list",
"inference.inference_dataset_dir": f"{S3_EVAL}/test.tar.gz",
}
prune(必須データソース):
{
"dataset.character_list_file": f"{S3_EVAL}/character_list",
}
quantize(必須データソース):
{
"dataset.train_dataset_dir": [f"{S3_TRAIN}/results/{dataset_convert_job_id}/dataset_convert/lmdb"],
"dataset.val_dataset_dir": f"{S3_EVAL}/results/{dataset_convert_job_id}/dataset_convert/lmdb",
"dataset.character_list_file": f"{S3_EVAL}/character_list",
"dataset.quant_calibration_dataset.images_dir": f"{S3_TRAIN}/train.tar.gz",
}
retrain(必須データソース):
{
"dataset.train_dataset_dir": [f"{S3_TRAIN}/results/{dataset_convert_job_id}/dataset_convert/lmdb"],
"dataset.val_dataset_dir": f"{S3_EVAL}/results/{dataset_convert_job_id}/dataset_convert/lmdb",
"dataset.character_list_file": f"{S3_EVAL}/character_list",
}
評価データセット
任意です。テストデータは別の tarball として提供されます。
重要なパラメーター
- 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_gpus | GPU の数 | 1 |
train.gpu_ids | GPU デバイスのインデックス | [0] |
train.distributed_strategy | ストラテジー名 | auto |
- ストラテジー:シングル GPU では
autoを使用し、マルチ GPU では設定からtrain.distributed_strategyを読み込みます - 学習スクリプトに明示的な
num_nodesの指定はありません。単一ノード向けです - 軽量なモデルのため、通常は単一 GPU で十分です
ハードウェア
最低 1 GPU、推奨 1 GPU です。GPU ごとに 8GB 以上の VRAM が必要です。OCR の文字認識は軽量です。通常は単一 GPU で十分です。
エラーパターン
dataset_convert が必要: 生画像と gt ファイルを使用する場合は、まず dataset_convert を実行して LMDB 形式に変換してください。
文字リストの不一致: 学習データ内のすべての文字が character_list ファイルに含まれている必要があります。
仕様パラメーター/親モデルの推論
モデル固有の推論マッピングは、config.json ではなくこの MD ファイルに記述します。生成されたランナーはこのセクションを読み取り、create_job() の前に SDK ヘルパーを使ってマッピングを適用します。これは以前のマイクロサービスの infer_params.py のフローを踏襲しています。
TAO Core の ocrnet.config.json に基づく推論マッピング:
| アクション | 仕様フィールド | 推論関数 | 意味 |
|---|---|---|---|
| dataset_convert | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| evaluate | encryption_key | key | 暗号化キー |
| evaluate | evaluate.checkpoint | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| evaluate | evaluate.trt_engine | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| evaluate | model.pruned_graph_path | pruned_model | 親のプルーニング済みモデル |
| evaluate | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| export | encryption_key | key | 暗号化キー |
| export | export.checkpoint | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| export | export.onnx_file | create_onnx_file | 出力 ONNX パス |
| export | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| gen_trt_engine | encryption_key | key | 暗号化キー |
| gen_trt_engine | gen_trt_engine.onnx_file | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| gen_trt_engine | gen_trt_engine.tensorrt.calibration.cal_cache_file | create_cal_cache | キャリブレーションキャッシュのパス |
| gen_trt_engine | gen_trt_engine.trt_engine | create_engine_file | 出力 TensorRT エンジンのパス |
| gen_trt_engine | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| inference | encryption_key | key | 暗号化キー |
| inference | inference.checkpoint | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| inference | inference.trt_engine | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| inference | model.pruned_graph_path | pruned_model | 親のプルーニング済みモデル |
| inference | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| prune | encryption_key | key | 暗号化キー |
| prune | prune.checkpoint | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| prune | prune.pruned_file | create_pth_file | 出力 PTH パス |
| prune | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| quantize | encryption_key | key | 暗号化キー |
| quantize | quantize.model_path | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| quantize | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| retrain | encryption_key | key | 暗号化キー |
| retrain | model.pruned_graph_path | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| retrain | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| train | encryption_key | key | 暗号化キー |
| train | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| train | train.pretrained_model_path | ptm_if_no_resume_model | 再開用チェックポイントがない場合の PTM |
| train | train.resume_training_checkpoint_path | resume_model | 現在のジョブの結果フォルダーから推論されるモデルファイル |
parent_model または parent_model_folder には、上流の train/export/AutoML 子ジョブの ID を parent_job_id として渡します。SDK は親の結果フォルダーを一覧表示し、チェックポイントのアーティファクトを絞り込み、選択されたモデルファイルまたはフォルダーを返します。これらのマッピングを config.json に戻したり、チェックポイントのパスを推測するように生成されたランナースクリプトを変更したりしないでください。
デプロイ
- tao-deploy-ocrnet — TAO Deploy を使用した TensorRT エンジン生成、TensorRT 評価、TensorRT 推論の OCRNet デプロイワークフロー。