tao-train-ocrnet について
切り抜いたテキスト領域の画像から文字を認識する OCRNet のトレーニングを支援する TAO スキルです。CTC とアテンションデコーダーに対応し、TAO ワークフローで評価、推論、エクスポート、モデル最適化も案内します。
主な機能
- 01切り抜いた画像領域の文字を認識
- 02CTC とアテンションデコーダーに対応
- 03トレーニング、評価、推論を案内
- 04エクスポート、プルーニング、量子化に対応
- 05TensorRT デプロイを案内
活用シーン
- 01ラベル付きテキスト領域画像で OCRNet をトレーニング
- 02テストセットで学習済みチェックポイントを評価
- 03切り抜いたテキスト画像で推論を実行
- 04学習済みモデルをエクスポートまたは最適化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nvidia/ skills --skill tao-train-ocrnetインストール後、Claude Code で/tao-train-ocrnetを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill-card.mdskill.oms.sigconfig/skillspector-baseline.yamlevals/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
単独でインストールする場合 このセッションが TAO skill bank プラグインによって初期化されていない場合は、まず
tao-setupスキルを実行してください(ホストの事前確認、認証情報、スキル間の検出)。
シーンテキスト認識用の OCRNet です。切り抜かれたテキスト領域の画像からテキスト内容を認識します。CTC デコーダーとアテンションベースのデコーダーをサポートしています。
事前学習済み OCR 重みには、train.pretrained_model_path を設定してください。
TAO Deploy の TensorRT アクション(gen_trt_engine、TensorRT の evaluate、TensorRT の inference)については、最初に references/tao-deploy-ocrnet.md をお読みください。Deploy 仕様テンプレートは、このスキルの references/ フォルダーにあり、接頭辞は spec_template_deploy_*.yaml です。
データクラスのスキーマ
生成済みの 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 が存在することを前提にしないでください。メンテナーはスキルバンクをパッケージ化する前に、スキーマ/テンプレートを再生成します。
Train アクションのポリシー
このモデルでは、モデルレイヤーで 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 の両方がパッケージに含まれている場合、デフォルトではこのモデルの skill_dir を指定して、train アクションを tao-skill-bank:tao-run-automl 経由で実行してください。データセット、仕様、出力ディレクトリ、GPU/プラットフォーム設定、親チェックポイント、automl_policy に対するワークフロー/アプリケーション側の上書きは維持してください。直接モデルのトレーニングを使用するのは、automl_policy: off の場合、またはパッケージ済みの train スキーマ/テンプレートが欠けている場合に限ります。スキーマが欠けている場合は、AutoML は有効ですが、スキーマが生成されるまではこのモデルで実行できないことを報告してください。
evaluate、inference、export、およびデプロイのフローなど、train 以外のアクションはこのモデルのスキル内に留まります。実行単位の automl_policy の上書きによって、モデルのメタデータが変更されることはありません。
トレーニング要件
- データセットの種類: ocrnet
- 形式: デフォルト
- AutoML トレーニング指標:
val_acc、direction=maximize。TAO はこのキーをstatus.jsonに書き込みます - Lightning の進捗状況の別名:
val_acc_1 - 単独評価指標:
test_acc、direction=maximize
アクションごとのデータセット要件
| アクション | 仕様キー | ソース | ファイル | リスト? |
|---|---|---|---|---|
| dataset_convert | dataset_convert.input_img_dir | train_datasets または eval_dataset | 切り抜いたテキスト画像を含む展開済みフォルダー | いいえ |
| dataset_convert | dataset_convert.gt_file | train_datasets または eval_dataset | train/gt_new.txt または test/gt_new.txt | いいえ |
| evaluate | dataset.character_list_file | eval_dataset | character_list | いいえ |
| evaluate | evaluate.test_dataset_dir | eval_dataset | 展開済みのテスト画像フォルダー | いいえ |
| evaluate | evaluate.test_dataset_gt_file | eval_dataset | test/gt_new.txt | いいえ |
| evaluate | evaluate.checkpoint | 親の train/AutoML ジョブ | best_accuracy.pth または指定されたエポックのチェックポイント | いいえ |
| export | dataset.character_list_file | eval_dataset | character_list | いいえ |
| export | export.checkpoint | 親の train/AutoML ジョブ | best_accuracy.pth または指定されたエポックのチェックポイント | いいえ |
| deploy/gen_trt_engine | gen_trt_engine.tensorrt.calibration.cal_image_dir | calibration_dataset | INT8 キャリブレーション用の展開済みキャリブレーション画像フォルダー | はい |
| deploy/gen_trt_engine | gen_trt_engine.onnx_file | 親の export ジョブ | エクスポートされた .onnx アーティファクト | いいえ |
| deploy/gen_trt_engine | dataset.character_list_file | eval_dataset | character_list | いいえ |
| inference | dataset.character_list_file | eval_dataset | character_list | いいえ |
| inference | inference.inference_dataset_dir | inference_dataset | 展開済みの推論画像フォルダー | いいえ |
| inference | inference.checkpoint | 親の train/AutoML ジョブ | best_accuracy.pth または指定されたエポックのチェックポイント | いいえ |
| prune | dataset.character_list_file | eval_dataset | character_list | いいえ |
| prune | prune.checkpoint | 親の train/AutoML ジョブ | best_accuracy.pth または指定されたエポックのチェックポイント | いいえ |
| quantize | dataset.train_dataset_dir | dataset_convert の train ジョブ | data.mdb と lock.mdb を含む LMDB フォルダー | はい |
| quantize | dataset.val_dataset_dir | dataset_convert の eval ジョブ | data.mdb と lock.mdb を含む LMDB フォルダー | いいえ |
| quantize | dataset.character_list_file | eval_dataset | character_list | いいえ |
| quantize | dataset.quant_calibration_dataset.images_dir | train_datasets | 展開済みのキャリブレーション画像フォルダー | いいえ |
| quantize | quantize.model_path | 親の train/AutoML ジョブ | リゾルバーが選択したチェックポイント | いいえ |
| retrain | dataset.train_dataset_dir | dataset_convert の train ジョブ | data.mdb と lock.mdb を含む LMDB フォルダー | はい |
| retrain | dataset.val_dataset_dir | dataset_convert の eval ジョブ | data.mdb と lock.mdb を含む LMDB フォルダー | いいえ |
| retrain | dataset.character_list_file | eval_dataset | character_list | いいえ |
| retrain | model.pruned_graph_path | 親の prune ジョブ | プルーニング済みの .pth アーティファクト | いいえ |
| train | dataset.train_dataset_dir | dataset_convert の train ジョブ | data.mdb と lock.mdb を含む LMDB フォルダー | はい |
| train | dataset.train_gt_file | train_datasets | LMDB の代わりに生のフォルダーを使用する場合の train/gt_new.txt | いいえ |
| train | dataset.val_dataset_dir | dataset_convert の eval ジョブ | data.mdb と lock.mdb を含む LMDB フォルダー | いいえ |
| train | dataset.val_gt_file | eval_dataset | LMDB の代わりに生のフォルダーを使用する場合の test/gt_new.txt | いいえ |
| train | dataset.character_list_file | eval_dataset | character_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 retrainCLI サブタスクはありません。モデルスキルの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 に渡してください。リモートストレージの tarball は、画像ディレクトリとして使用する前に展開する必要があります。
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(スプリットごとに 1 回実行):
{
"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>",
}
評価用データセット
任意です。テストデータは別の 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を読み込みます。 - train スクリプトには明示的な
num_nodesがありません。単一ノードを想定しています。 - 軽量なモデルのため、通常は単一 GPU で十分です。
ハードウェア
最低 1 GPU、推奨 1 GPU です。GPU ごとに 8 GB 以上の VRAM が必要です。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 は含まれていません。TensorRT エンジンの生成、および TensorRT を使用した評価/推論には、references/tao-deploy-ocrnet.md と deploy/skill_info.yaml を使用してください。
Spec パラメータ / 親モデル推論
モデル固有の推論マッピングは config.json ではなく、この MD ファイルに記述します。生成されたランナーはこのセクションを読み取り、create_job() の前に SDK ヘルパーを使用してマッピングを適用する必要があります。これは以前のマイクロサービスにおける infer_params.py のフローを踏襲しています。
TAO Core の ocrnet.config.json からの推論マッピング:
| アクション | Spec フィールド | 推論関数 | 意味 |
|---|---|---|---|
| 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 | 現在のジョブの結果ディレクトリ |
| deploy/gen_trt_engine | encryption_key | key | 暗号化キー |
| deploy/gen_trt_engine | gen_trt_engine.onnx_file | parent_model | 親の export ジョブの結果フォルダから推論される ONNX ファイル |
| deploy/gen_trt_engine | gen_trt_engine.tensorrt.calibration.cal_cache_file | create_cal_cache | キャリブレーションキャッシュのパス |
| deploy/gen_trt_engine | gen_trt_engine.trt_engine | create_engine_file | 出力 TensorRT エンジンのパス |
| deploy/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 に戻さないでください。また、チェックポイントパスを推測するために生成されたランナースクリプトにパッチを当てないでください。