Markdownで表示

libreyolo train

1つのデータセットで1つのモデルを学習し、チェックポイント・指標・ログを実行ディレクトリに書き出します。以下の各引数にはコマンド定義由来のデフォルト値があり、モデルファミリー自身の学習設定がそれを置き換えることがあります。

コマンド
libreyolo train
必須
data
出力
runs/train/exp配下のチェックポイント・指標・ログ

書式

bash
libreyolo train data=<dataset.yaml> [model=<name|path>] [key=value ...]

引数はkey=valueのペアで、POSIX形式も使えるため、epochs=50--epochs 50は 同じ引数です。真偽値はtruefalseを受け付けます:フラグに否定形がある場合、 amp=false--no-ampになります。

引数

モデルとデータ

引数デフォルト値意味
dataデータセットYAMLへのパス(YOLO形式、例:coco8.yaml)。必須
modelyolox-sモデル名または重みへのパス
taskタスクの明示的な上書き:detectsegmentsemanticposeclassifygazeobbpointdepth
pretrainedtrue学習済みの重みを使います。falseにするとアーキテクチャを構築してゼロから学習します
allow_download_scriptsfalseデータセットYAMLのダウンロードブロックに埋め込まれたPythonを許可

学習ループ

引数デフォルト値意味
epochs300学習エポック数
batch16デバイスあたりのバッチサイズ
imgsz640学習時の画像サイズ:640(正方形)または480x640(HxW)
deviceautoデバイス:0cpumpsauto
workers4データローダーのワーカー数
cachefalseデータ読み込みを高速化するために画像をキャッシュ:ramdisktruefalse
seed0乱数シード
resume学習を再開:true、またはチェックポイントへのパス
amptrue自動混合精度
amp_dtypefloat16CUDA AMPのdtype:float16またはbfloat16
cuda_graphfalse学習の順伝播と逆伝播をCUDAグラフにキャプチャします。シングルGPUかつ対応ファミリーのみで、それ以外はeager実行のままです
lorafalseLoRAファインチューニング。補足に挙げたTransformerファミリー向け
freeze層を凍結:整数の個数、インデックスのリスト、またはモジュール名

蒸留

引数デフォルト値意味
distill_model教師:検出器のチェックポイント、またはバックボーンの特徴量蒸留に使うdinov2のような基盤教師のID
dis蒸留損失の重み。未設定の場合は損失タイプごとの公開されたデフォルト値
distill_loss_typemgd検出器教師向けの特徴量損失:mgdcwd。基盤教師は常にfeat_mseを使います

オプティマイザー

引数デフォルト値意味
optimizersgdオプティマイザー:sgdadamadamw
lr00.01初期学習率
momentum0.937SGDのモーメンタム、およびAdam系オプティマイザーの一次モーメント係数
weight_decay0.0005L2正則化
nesterovtrueNesterovモーメンタム

スケジューラー

引数デフォルト値意味
scheduleryoloxwarmcos学習率スケジュールの種類
warmup_epochs5ウォームアップの長さ
warmup_lr_start0.0ウォームアップ開始時の学習率
min_lr_ratio0.05最小学習率の比率
lr_drop100RF-DETRのstep方式で学習率を下げるエポック

データ拡張

引数デフォルト値意味
mosaic1.0Mosaicの確率
mixup1.0Mixupの確率
hsv_prob1.0HSVジッターの確率
flip_prob0.5左右反転の確率
degrees10.0回転の範囲(度単位、プラスマイナス両方向)
translate0.1平行移動の比率
shear2.0せん断の角度
mosaic_scale(0.1,2.0)Mosaicのスケール範囲
mixup_scale(0.5,1.5)Mixupのスケール範囲
no_aug_epochs15最後のNエポックでデータ拡張を無効化

EMA

引数デフォルト値意味
ematrue指数移動平均
ema_decay0.9998EMAの減衰係数

学習中の検証

引数デフォルト値意味
valtrue学習中に検証
eval_interval10Nエポックごとに検証
max_det300検証時のNMS後の画像1枚あたりの最大検出数
eval_max_detCOCO評価器の上限。未設定の場合はpycocotoolsのAP@100の慣例
faster_coco_evaltrueインストール済みならCOCO指標にfaster-coco-evalのC++バックエンドを使用し、なければpycocotoolsにフォールバック
save_plotsfalse学習中に最終的な検証プロットを保存
patience50早期終了(early stopping)の待機エポック数。0で無効

出力

引数デフォルト値意味
projectruns/train出力ディレクトリのルート
nameexp実験名
exist_okfalse既存の出力ディレクトリを再利用
save_period10Nエポックごとにチェックポイントを保存
log_interval10Nバッチごとに損失を記録

エージェント向けフラグ

引数デフォルト値意味
jsonfalse標準出力へのJSON出力
quietfalse標準エラー出力を抑制
dry_runfalse実行せずに設定を解決して表示
help_jsonfalseコマンドスキーマをJSONで出力して終了

使用例

基本
# coco8.yamlはパッケージ同梱で初回使用時に8枚の画像をダウンロードlibreyolo train model=LibreYOLO9s.pt data=coco8.yaml epochs=10 imgsz=640 batch=8
先に解決後の設定を確認
# ファミリーのデフォルト値を含めて実行時に使われる設定を表示し# 学習もデータ読み込みもせずに終了libreyolo train model=LibreDFINEn.pt data=coco8.yaml epochs=10 dry_run=true
レシピを明示した名前付きの実行
libreyolo train model=LibreYOLO9s.pt data=coco8.yaml \  epochs=50 batch=8 optimizer=adamw lr0=0.001 weight_decay=0.0001 \  patience=20 save_period=5 project=runs/train name=yolo9s-coco8 exist_ok=true

補足

上記のデフォルト値が常に使われるとは限りません

モデルファミリーはそれぞれ独自の学習設定を持っており、その設定がベースの設定と 異なる場合、明示的に設定しなかった引数についてはファミリー側の値がコマンドの デフォルト値を置き換えます。自分で引数を設定した場合は常にそちらが優先されます。 libreyolo cfgはベースのデフォルト値とファミリーごとの上書きを表示するので、 あるファミリーが実際に何を使うかはこれで確認できます。

これが最も影響するのはimgszです。コマンドのデフォルト値は640ですが、これは すべてのチェックポイントのネイティブ入力ではありません:公開されているRF-DETRの 検出サイズは384、512、576、704で、YOLOXのntのチェックポイントは416です。 RF-DETRとDEIMv2はimgszが明示的に設定されたときだけ値を渡す扱いになっており、 それ以外の場合はそれぞれのサイズがそのまま有効です。ほかのファミリーには指定 された値がそのまま渡され、そのサイズで学習します。厳しいのはFOMOです:各サイズは ネイティブ入力(96、192、224)しか受け付けないため、FOMOの実行ではimgszを 合わせて設定する必要があり、そうでなければエラーで停止します。RF-DETRはさらに、 値がパッチサイズとウィンドウ数の積で割り切れることを要求し、割り切れない場合は 最も近い2つの有効なサイズを報告します。

ファミリーが無視する引数

すべてのファミリーがすべての引数を読むわけではなく、それが表れるのはデータ拡張の 引数です。RF-DETR、D-FINE、DEIM、DEIMv2、RT-DETRv4、DINOv2はMosaicもMixupも アフィン変換も行わないパススルーのパイプラインで学習するため、mosaicmixuphsv_probdegreestranslateshearmosaic_scalemixup_scaleは そこでは何にも届きません。ECは同じパイプラインを使いますが、タスクが姿勢推定の ときはhsv_probdegreestranslateを読みます。分類系のファミリーとSegFormer、 NAFNetは、反転が設定可能な確率ではなく固定の確率で行われるため、その一式に加えて flip_probも無視します。YOLO-NASは代わりに常時有効なサンプルごとのアフィン変換で データ拡張するため、mosaicだけを無視します。RF-DETRはそのリストに加えてさらに 3つ、optimizermomentumnesterovを無視します。

これらを設定してもエラーにはなりません。実行時にはファミリー名と無視する引数を 挙げた行が標準エラー出力に記録されてから学習が始まり、その行がインストールされて いるバージョンにとっての確定的なリストになります。それが唯一の手がかりでもある ため、quiet=trueを指定したスクリプト実行では、標準エラー出力のほかの内容と ともにこの警告も抑制されます。

val=falseも関連するケースです。ほとんどのファミリーではeval_interval0に 設定しますが、RF-DETRはその方法で検証を無効にできず、要求を無視したことをログに 出力します。

知っておくとよいその他の挙動

lora=trueを受け付けるのはRF-DETR、D-FINE、DEIM、DEIMv2、RT-DETRのv1、v2、v4、 EC、ConvNeXtです。ほかのファミリーはLoRAなしで学習するのではなく、 config_unsupportedで終了します。

pretrained=falseresumeの併用は、両者が正反対のことを求めているため、ゼロ からの学習に対応するファミリーでは拒否されます。

mosaicmixupは、設定フィールドmosaic_probmixup_probのコマンドライン上 の書き方です。MixupがMosaicのサンプルにしか適用されないファミリーでは、mosaicが 0のままmixupを0より大きくしても一度も発火せず、実行時にその旨が示されます。

dry_run=trueはモデル参照を解決し、ファミリーのデフォルト値を適用して、学習に 使われる設定を表示します。データセットは読み込まないため、引数が期待どおりの値に なっているかを安く確認する方法になります。

標準出力には最終的な結果オブジェクトが流れ、進捗と警告は標準エラー出力に出ます。 終了コードは、成功時が0、使い方や設定の誤りが2、データセットが見つからないか 読み込めない場合が3、モデルを読み込めない場合が4、そのほかの実行時エラーが 1です。

関連:実行に踏み切る前にデータセットを確認するなら libreyolo doctor、ブラウザーで実行を見守るなら libreyolo monitor、結果を測定するなら libreyolo val

LibreYOLO v1.5.0で検証済みです。