Markdownで表示

MobileNetV4

MobileNetV4はモバイルやエッジハードウェア向けの画像分類器です。Universal Inverted Bottleneckブロックを使用し、従来の複数のモバイル向けブロック設計を探索可能な1つの構造へ統合しています。LibreYOLOでは画像分類に対応します。

タスク
classify
サイズ
s, m, l at 224 to 256 px
インストール
pip install libreyolo
サポートティア
サポート対象、v以降。補助的な学習可能モデル:CIで正常な状態を維持し、機能は機会に応じて追加されます。
アップストリーム
GoogleのMobileNetV4、Apache-2.0。論文ソース
ライセンス
コード:Apache-2.0、重み:Apache-2.0。商用利用

インストール

MobileNetV4には基本パッケージ以外の追加パッケージは必要ありません。

bash
pip install libreyolo

推論

重みは初回使用時にHugging Faceからダウンロードされ、ローカルにキャッシュされます。

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreMobileNetV4s-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.probs.top1, result.probs.top1conf)print(result.probs.top5)
CLI
libreyolo predict model=LibreMobileNetV4s-cls.pt source=cat.jpg save=True

返されるResultsオブジェクトは全ファミリーで共通なので、別のモデルへの切り替えは1行の変更で済みます。分類器にはボックスやマスクはなく、result.probsに画像全体の予測が格納されます。利用できる属性はtop1top5top1conftop5confです。単一の確率ベクトルにはしきい値処理や抑制の対象がないため、confioumax_detはAPI互換性のため受け付けますが効果はありません。入力ソース、ストリーミング、結果の処理については推論を参照してください。

バリアント

small、medium、largeの3サイズがあり、すべて畳み込みだけで構成されます。このファミリーにはMobile MQAアテンションを追加するハイブリッドバリアントは含まれません。サイズの選択基準はパラメーター数と精度の直接的なトレードオフです。タスクは固定されており、どのサイズも画像分類だけに対応します。各サイズの重みファイル名は-cls.ptで終わり、ファクトリはこの接尾辞を読み取ってこのファミリーに振り分けます。task=引数は不要です。

学習

ファインチューニングは公開済みのImageNetバックボーンから開始し、最終分類器レイヤーを対象データセットのクラス数に合わせて自動的に再構築します。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMobileNetV4s-cls.pt")model.train(data="imagenette160", epochs=5)
CLI
libreyolo train model=LibreMobileNetV4s-cls.pt data=imagenette160 epochs=5
マルチGPU
libreyolo train model=LibreMobileNetV4s-cls.pt data=imagenette160 \  epochs=50 device=0,1 batch=-1

指定を変更しない場合、トレーナーはAdamW、lr0=1e-3、バッチサイズ64で100エポック実行し、改善のない状態が50エポック続くと早期終了します。dataには、データセットのルート(train/val/の下にクラスごとのフォルダーを配置)、imagenette160などの既知の短縮名、または.zipのURLを指定できます。ここではlora=Trueに対応していません。LibreYOLOのLoRAはnn.Linearレイヤーを持つTransformerコンポーネントを対象とし、このファミリーのUIBブロックには該当するレイヤーがないため、指定すると例外を送出します。

データセット、データ拡張、マルチGPU、ロガーについては学習を参照してください。

検証

val()metrics/キーを持つ辞書を返します。画像分類では、検証分割に対するtop-1精度とtop-5精度が含まれます。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMobileNetV4s-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreMobileNetV4s-cls.pt data=imagenette160

エクスポート

タスクONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX:対応classify to TorchScript:対応classify to ExecuTorch:対応classify to TensorRT:対応classify to OpenVINO:対応classify to Paddle:非対応classify to MNN:非対応classify to RKNN:非対応classify to ncnn:対応classify to TFLite:対応classify to CoreML:非対応classify to Core AI:対応

エクスポートしたアーティファクトはファイルの拡張子に基づいてLibreYOLO()で読み込めるため、.onnx.engineファイルもチェックポイントと同様に動作し、同じResultsを返します。エクスポートには各形式で受け付ける引数と、一部の形式で追加されるオプションが記載されています。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMobileNetV4s-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreMobileNetV4s-cls.pt format=onnxlibreyolo export model=LibreMobileNetV4s-cls.pt format=tensorrt half=True
エクスポートしたファイルを使用
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリはファイルの拡張子に応じて振り分けるためエクスポートした# アーティファクトもチェックポイントと同様に読み込まれ同じResultsオブジェクトを返すmodel = LibreYOLO("LibreMobileNetV4s-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)

チェックポイント

このファミリーで公開されているすべての重みファイルです。

ファイル入力(px)重みのライセンス
classify
LibreMobileNetV4s-cls.pt224apache-2.0
LibreMobileNetV4m-cls.pt224apache-2.0
LibreMobileNetV4l-cls.pt256apache-2.0

上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。

ライセンス

ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。

これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。

原著作物
MobileNetV4, Google
アップストリームのライセンス
Apache-2.0
アップストリームのソース
github.com/huggingface/pytorch-image-models
LibreYOLOのコード
MIT
重み
Apache-2.0、huggingface.co/LibreYOLOで再公開
解釈
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. The architecture is Google's design, whose official code lives in the tensorflow/models repository; LibreYOLO's implementation follows the conv-only MobileNetV4 (small/medium/large) block definitions, channel rounding and naming in timm, whose mobilenetv4_conv_{small,medium,large} ImageNet-1k weights are licensed Apache-2.0 and are what LibreYOLO ships. The hybrid variants, which add Mobile MQA attention, are not part of this family.

LibreYOLO v1.5.0で検証済みです。このページのサポート表、チェックポイント、ベンチマーク値は手作業で記述したものではなく、リリース済みライブラリと公開済みの重みから生成されています。