Markdownで表示

libreyolo export

1つのチェックポイントを1つのデプロイ形式に変換し、成果物をweights/以下に書き出します。下の引数のどれが適用されるかは形式が決めます。

コマンド
libreyolo export
必須
model
出力
weights/<checkpoint-stem>[_fp16|_int8]<format-suffix>

概要

bash
libreyolo export model=<name|path> [format=<format>] [key=value ...]

引数はkey=valueのペアで、POSIX形式も使えるため、format=onnx--format onnxは同じ引数です。

引数

引数デフォルト意味
modelモデルの重み.pt。必須
formatonnxエクスポート形式:onnxtorchscriptexecutorchtensorrtopenvinopaddlemnnrknnncnntflitecoremlcoreai
nameRKNNのターゲットプラットフォームで、現在はrk3588のみ。他の形式と一緒に渡すと拒否されます
imgsz入力画像サイズ:640または480x640(HxW)。480,640も受け付けます。未設定の場合はモデル自身のサイズ
batch1エクスポート時のバッチサイズ
halffalseFP16精度
int8falseINT8量子化
dynamicfalse動的な入力形状(ONNX)
simplifytrueONNXグラフの簡略化
nmsfalseNMSをモデルに埋め込みます。ONNXとCoreMLのみ
conf0.25埋め込みNMSの信頼度しきい値
iou0.45埋め込みNMSのIoUしきい値
max_det300ONNXの埋め込みNMSでの最大検出数
opsetONNXのopsetバージョン。未設定の場合は自動で選ばれます
dataINT8用のキャリブレーションデータ
fraction1.0使用するキャリブレーションデータの割合
deviceautoトレースに使うデバイス
allow_download_scriptsfalseデータセットYAMLのdownloadブロックに埋め込まれたPythonを許可します
jsonfalsestdoutへのJSON出力
quietfalsestderrを抑制します
verbosefalse詳細なエクスポートログ
verifyfalseRKNN Toolkit2のPCシミュレーターを実行し、ONNX Runtimeと比較します。RKNNのみ
help_jsonfalseコマンドのスキーマをJSONで出力して終了します

enginetensorrtのエイリアス、literttfliteのエイリアスです。どちらも何かが書き出される前に正式な名前へ解決されるため、JSON出力とログ行が報告するのは常にtensorrtまたはtfliteです。

基本
# weights/LibreYOLO9s.onnxを出力libreyolo export model=LibreYOLO9s.pt format=onnx imgsz=640
グラフ内のNMS
libreyolo export model=LibreYOLO9s.pt format=onnx \  nms=true conf=0.25 iou=0.45 max_det=300
成果物を実行する
libreyolo export model=LibreYOLO9s.pt format=onnx imgsz=640 # ファクトリーはファイル拡張子で振り分けるので、エクスポート結果もチェックポイントと同じように読み込まれるlibreyolo predict model=weights/LibreYOLO9s.onnx \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg

説明

ファイルの書き出し先

このコマンドは出力パスを受け取りません。成果物はweights/に書き出され、名前は元のチェックポイントのステム名にその形式の拡張子を付けたもので、FP16かINT8のどちらかの精度を指定した場合は_fp16または_int8が間に挿入されます。LibreYOLO9s.ptをFP16でONNXにエクスポートするとweights/LibreYOLO9s_fp16.onnxになります。JSON結果には、解決後のoutput_path、MB単位のファイルサイズ、そして[batch, 3, height, width]という形の入力形状が入ります。

拒否される組み合わせ

nms=trueはONNXとCoreMLでは受け付けられ、それ以外のすべての形式ではnms_unsupported_formatで拒否されます。ONNXでは、埋め込まれたグラフがバッチ1に固定されるためdynamicを強制的にオフにし、そのことをstderrに出力します。CoreMLではconfiouは受け付けますがmax_detは受け付けないので、デフォルト以外のmax_detformat=coreml nms=trueと一緒に渡すとconfig_unsupportedで終了します。

half=trueint8=trueを同時に指定してもエラーにはなりません。INT8が優先され、halfは破棄され、警告がstderrに出ます。

nameverifyは現時点ではRKNN用のオプションです。どちらかを別の形式と一緒に渡すと、無視されるのではなくconfig_unsupportedで終了します。

モデルファミリーがどの形式に対応するか

対応状況はグローバルではなく、ファミリーごと・タスクごとに決まります。libreyolo formats family=<family> task=<task>は、その組み合わせについて各形式のティアを、理由と付随する制約とあわせて表示します。引数はlibreyolo formatsを参照してください。

オプションのインストールが必要な形式もあれば、ツールチェーンが必要な形式もあります。Pythonの依存関係が足りない場合はexport_dep_missingで終了し、その形式が生成できない精度を指定した場合はformat_precision_unsupportedで終了します。

エクスポートしたものを実行する

エクスポートした成果物は、チェックポイントと同じモデルファクトリーからファイル拡張子をキーにして読み込まれるため、libreyolo predict model=weights/LibreYOLO9s.onnxは追加の変換なしで動きます。例外は3つの推論オプションで、ランタイムバックエンドでは拒否されます:tilingoverlap_ratiooutput_file_format

独自のページを持つデプロイ先が2つあります:NVIDIA DeepStreamNVIDIA Jetson

出力と終了コード

結果はstdoutに、進捗はstderrに出ます。終了コードは、成功が0、使い方や設定の誤りが2、モデルを読み込めない場合が4、未知の形式・エクスポート依存関係の不足・非対応の精度・拒否された埋め込みNMSの要求が5、その他のランタイム障害が1です。

関連:libreyolo quantizeは、PyTorchの中にとどまり、デプロイ用の成果物ではなくチェックポイントを書き出します。

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