Markdownで表示

libreyolo doctor

物体検出データセットに一連のヘルスチェックを実行し、学習の妨げになるものを報告します:ファイルの欠落、壊れたラベル、破損した画像、スプリット間のリーク、クラスの不均衡。

コマンド
libreyolo doctor
必須
data
出力
stdoutに指摘レポート。エラーが見つかった場合は終了コード1

書式

bash
libreyolo doctor <data.yaml> [key=value ...]

データセットは位置引数で、代わりにdata=<path>も指定できます。両方を異なる値で 指定するとconfig_conflictで終了します。それ以外はすべてkey=valueのペアで、 POSIX形式も使えるため、imgsz=1024--imgsz 1024は同じ引数です。

引数

引数デフォルト意味
data位置引数。YOLO物体検出形式のデータセットYAML。例:coco8.yaml。必須
imgsz640微小物体などピクセル基準のチェックで使う学習時の画像サイズ
fastfalse画像のデコードをスキップし、破損・重複・リークのチェックを外す
skipスキップするチェックIDまたはファミリーをカンマ区切りで指定。例:images,labels.tiny_object
only排他的に実行するチェックIDまたはファミリーをカンマ区切りで指定
strictfalseCIゲート向けに、警告も終了コードを失敗扱いにする
downloadfalse見つからない場合にURLベースのデータセットダウンロードを許可。スクリプトは実行しない
jsonfalsestdoutへのJSON出力
quietfalsestderrを抑制
help_jsonfalseコマンドのスキーマをJSONで出力して終了

チェックファミリー

skiponlyは完全なチェックIDでもファミリーのプレフィックスでも受け付けるため、 imagesimages.*のチェックをすべて選択します。

ファミリー対象
configデータセットYAML自体:namesの欠落、namesに対するnc、スプリットの欠落、解決できないpath、クラス名の重複
files画像とラベルの対応:ラベルの欠落、画像の欠落、孤立したラベル、非対応の拡張子、大文字小文字の衝突
labelsラベルの内容:構文、ポリゴン行、範囲外のクラスID、範囲外の座標、退化したボックス、微小物体、巨大なボックス、極端なアスペクト比、重複ボックス、密集した画像、同一ファイル
imagesピクセルデータ:破損ファイル、EXIFの向き、異常なカラーモード、極小または極端な寸法、一様な画像、完全重複とほぼ重複
splitsスプリット間のリーク、完全一致とほぼ一致
balanceクラス分布:インスタンスがゼロまたは少ないクラス、不均衡、スプリットのカバレッジ、背景比率、スプリットの偏り

基本
# download=trueにすると同梱のcoco8.yamlが画像を欠く場合に自動ダウンロードlibreyolo doctor coco8.yaml download=true
画像デコードなしの高速パス
libreyolo doctor coco8.yaml download=true fast=true
選択したチェックでCIゲート
libreyolo doctor coco8.yaml download=true strict=true json=true \  only=labels,files,config

補足

終了コード

エラーが見つからなければ0、いずれかの指摘がエラーであれば1です。 strict=trueを指定すると警告でも終了コードが1に上がり、これがCIゲートで 使いたい設定です。

使い方の問題には専用のコードがあります:skiponlyに未知のチェックIDまたは ファミリーを指定した場合は2、データセットが見つからない場合は3、データセットが 物体検出の形式でない場合も3です。

選択はスキャンの前に解決

skiponlyはディスクから何かを読み込む前にチェックのレジストリに対して 解決されるため、入力ミスは長い画像パスのあとではなくその場で失敗します。何にも 一致しないセレクターはエラーになり、メッセージには既知のファミリーが列挙されます。

skiponlyfastの組み合わせで実行するチェックが1つも残らない場合も、 黙って成功するのではなくエラーになります。

ダウンロード

download=trueでない限りデータセットは取得されず、実行されるのはURLからの ダウンロードだけです。データセットYAMLに埋め込まれたPythonのダウンロード スクリプトは、フラグの値にかかわらずこのコマンドが実行することはありません。

対象範囲

チェックは物体検出のデータセット向けに書かれています。ラベルが姿勢推定・ セグメンテーション・回転ボックスの形式であるデータセットは検出され、誤ったルールで 採点されるのではなくdata_invalidで拒否されます。

出力

人間向けのレポートはstdoutに出力され、json=trueを指定すると、サマリーの件数、 データセットの統計、すべての指摘、スキップされたチェックの一覧を持つ構造化 オブジェクトに置き換わります。

関連:libreyolo train。このコマンドは、その実行の前に 走らせることを想定しています。

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