Markdownで表示

libreyolo train

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

コマンド
libreyolo train
必須
data
出力
runs/train/<name>配下のチェックポイント・指標・ログ。name=がない場合はyolo9_expなどファミリー独自の実行名

書式

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

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

引数

モデルとデータ

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

学習ループ

引数デフォルト値意味
epochs300学習エポック数
batch16バッチサイズ。複数GPUではグローバルバッチで、各GPUに均等に分割
imgsz640学習時の画像サイズ:640(正方形)または480x640(HxW)
deviceautoデバイス:0、cpu、mps、auto。0,1や[0,1]のようなGPUのリストを指定すると、それらのGPUで学習
workers4データローダーのワーカー数
cachefalseデータ読み込みを高速化するために画像をキャッシュ:ram、disk、true、false
seed0乱数シード
resume学習を再開:true、またはチェックポイントへのパス
amptrue自動混合精度
amp_dtypefloat16CUDA AMPのdtype:float16またはbfloat16
cuda_graphfalse学習の順伝播と逆伝播をCUDAグラフにキャプチャします。シングルGPUかつ対応ファミリーのみで、それ以外はeager実行のままです
compilefalse学習ネットワークをtorch.compileでコンパイルします:true、false、default、reduce-overhead、max-autotune、max-autotune-no-cudagraphs。シングルCUDA GPUのみで、それ以外の実行は警告を出してeagerで学習します
lorafalseLoRAファインチューニング。補足に挙げたTransformerファミリー向け
freeze層を凍結:整数の個数、インデックスのリスト、またはモジュール名

蒸留

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

オプティマイザー

引数デフォルト値意味
optimizersgdオプティマイザー:sgd、adam、adamw
lr00.01初期学習率
momentum0.937SGDのモーメンタム、およびAdam系オプティマイザーの一次モーメント係数
weight_decay0.0005L2正則化
nesterovtrueNesterovモーメンタム
clip_max_norm各オプティマイザーステップの前に、勾配のL2ノルムをこの値にクリップ。0でクリッピングを無効化。未設定の場合はファミリーの値を適用

スケジューラー

引数デフォルト値意味
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出力ディレクトリのルート
name実験名。未設定の場合は、yolo9_expやdfine_expなど、ファミリーのtrain()が使う名前を使用
exist_okfalse既存の出力ディレクトリを再利用
save_period10Nエポックごとにチェックポイントを保存
log_interval10Nバッチごとに損失を記録

エージェント向けフラグ

引数デフォルト値意味
jsonfalse標準出力へのJSON出力
quietfalse標準エラー出力を抑制
dry_runfalse実行せずに設定を解決して表示
help_jsonfalseコマンドスキーマをJSONで出力して終了
引数デフォルト意味
min_samples0小規模データセットのエポック長の下限。画像が少ない場合は、エポックごとにこの数を復元抽出(0で無効)
class_balancedFalse裾の長いクラス分布のデータセット向けのLVIS形式の反復係数サンプリング(デフォルトは無効)
cls_pw0.0分類の逆頻度重み付けの指数。0で無効、1で完全適用(クラス重みの平均は1。class_weights=Trueとの併用は不可)
class_weightsFalse従来のサンプル数で正規化した分類損失の重み(デフォルトは無効)
single_clsFalse対応する検出器で、すべてのラベルをクラス0に対応付けて学習
classesNone対応する検出器で、カンマ区切りの元のデータセットクラスIDのみを使って学習(例:'0,3,5')。それ以外のクラスはラベルがないものとして除外。IDは詰め直さず維持
average_best0監視する指標で上位N個のチェックポイントを均等に平均し、学習終了時にweights/average.ptへ保存(0で無効)
export_checkFalseエポック1の前にONNXへエクスポートし、失敗した場合は実行を停止(デフォルトは無効)
precise_bn0最後のエポック後に、この数の学習画像からBatchNormの移動統計を再計算(0で無効)
aux_weightYOLO9のみ:PGI補助分岐の損失の重み。値を指定するとその重みで新しい分岐を付け、0で主ヘッドのみを学習。未設定の場合、重みがPGIテンソルを持つかゼロから学習するときだけ0.25で分岐を付ける
fliplrNone水平反転の確率(flip_probの別名)
flipud0.0垂直反転の確率
auto_augmentNone分類の自動データ拡張方針:randaugment、autoaugment、augmix(デフォルトはなし)
erasing0.0分類のRandomErasingの確率。0 <= erasing < 1
cutmix0.0分類のCutMixの確率(ソフトラベル)
scale0.5分類のRandomResizedCropの面積範囲。浮動小数点数の下限または明示的な(min,max)
crop_pctNone分類の評価で中央クロップの前に使うリサイズ比率(デフォルトはモデルファミリー本来の値)
plot_samples8検証のサンプル描画の画像数。0でなし、-1ですべての検証画像(指標は変化しない)

使用例

基本
# 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のnとtのチェックポイントは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も アフィン変換も行わないパススルーのパイプラインで学習するため、mosaic、mixup、 hsv_prob、degrees、translate、shear、mosaic_scale、mixup_scaleは そこでは何にも届きません。ECは同じパイプラインを使いますが、タスクが姿勢推定の ときはhsv_prob、degrees、translateを読みます。分類系のファミリーは、分類系 ではバッチMixUpとなるmixupを除いてその一式を無視し、flip_probは読みます。 SegFormer、LingBot-Vision、NAFNetは、反転が設定可能な確率ではなく固定の確率で 行われるため、その一式全体に加えてflip_probも無視します。YOLO-NASは代わりに常時有効なサンプルごとの アフィン変換でデータ拡張するため、mosaicだけを無視します。RF-DETRはそのリストに 加えてさらに3つ、optimizer、momentum、nesterovを無視します。

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

val=falseも関連するケースです。eval_intervalを0に設定し、これにより最終 エポックも含めて学習中の検証が無効になり、実行ではbest.ptが書き出されません。

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

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

clip_max_normを受け付けるのは、学習設定でこれを宣言しているファミリーです: YOLOv9、YOLOv9-E2E、YOLOv9-P2ではデフォルトが10、D-FINE、Dome-DETR、DEIM、 DEIMv2、TinyFormer、RT-DETR、RT-DETRv2、RT-DETRv4、RF-DETR、DINOv2、GTRでは デフォルトが0.1です。ほかのファミリーはconfig_unsupportedで終了し、負の値や 有限でない値はconfig_type_errorで終了します。

device=0,1は、リストの最初のGPU上にモデルを構築し、リストをtrain()に渡します。 train()はGPUごとに1つのプロセスを起動します。 マルチGPU学習を参照してください。

RF-DETRには検出からセグメンテーションへの転移がありません。RF-DETRのセグメンテーション チェックポイントでtask=segmentを指定すると、チェックポイントのメタデータがタスクを 決めるため、ファイル名にかかわらずそのチェックポイントを読み込みます。一方、検出 チェックポイントでは、学習されていないマスクヘッドを学習する代わりにエラーで停止します。

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

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

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

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

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

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