ConvNeXt
ConvNeXtは標準的な畳み込みだけで構成された画像分類器で、ResNetの各ブロックをVision Transformerの設計方針に近づける形で現代化しています。LibreYOLOでは画像分類に対応します。
- タスク
- classify
- サイズ
- t, s, b at 224 px
- インストール
pip install libreyolo- サポートティア
- サポート対象、v以降。補助的な学習可能モデル:CIで正常な状態を維持し、機能は機会に応じて追加されます。
- ライセンス
- コード:MIT、重み:Apache-2.0。商用利用
インストール
ConvNeXtに追加オプションは必要ありません。インポートするものはすべて基本インストールに含まれています。
pip install libreyolo例外として、lora=Trueによるアダプターのファインチューニングにはlora追加パッケージが必要です。
pip install "libreyolo[lora]"推論
重みは初回使用時にHugging Faceからダウンロードされ、ローカルにキャッシュされます。
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreConvNeXtt-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.probs.top1, result.probs.top1conf)print(result.probs.top5)libreyolo predict model=LibreConvNeXtt-cls.pt source=cat.jpg save=True返されるResultsオブジェクトは全ファミリーで共通なので、別のモデルへの切り替えは1行の変更で済みます。分類器にはボックスやマスクはなく、result.probsに画像全体の予測が格納されます。利用できる属性はtop1、top5、top1conf、top5confです。単一の確率ベクトルにはしきい値処理や抑制の対象がないため、conf、iou、max_detはAPI互換性のため受け付けますが効果はありません。入力ソース、ストリーミング、結果の処理については推論を参照してください。
バリアント
tiny、small、baseの3サイズがあり、すべて同じ方法で学習、評価されます。選択基準はパラメーター数と精度の直接的なトレードオフです。タスクは固定されており、どのサイズも画像分類だけに対応します。各サイズの重みファイル名は-cls.ptで終わり、ファクトリはこの接尾辞を読み取ってこのファミリーに振り分けます。task=引数は不要です。
学習
ファインチューニングは公開済みのImageNetバックボーンから開始し、最終分類器レイヤーを対象データセットのクラス数に合わせて自動的に再構築します。
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5)libreyolo train model=LibreConvNeXtt-cls.pt data=imagenette160 epochs=5from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5, lora=True)libreyolo train model=LibreConvNeXtt-cls.pt data=imagenette160 \ epochs=50 device=0,1 batch=-1指定を変更しない場合、トレーナーはAdamW、lr0=1e-3、バッチサイズ64で100エポック実行し、改善のない状態が50エポック続くと早期終了します。dataには、データセットのルート(train/とval/の下にクラスごとのフォルダーを配置)、imagenette160などの既知の短縮名、または.zipのURLを指定できます。ConvNeXtのブロックにはLoRAに必要なnn.LinearのMLPがあるため、lora=Trueに対応します。バックボーン全体をファインチューニングする代わりに、ブロックのMLPへアダプターを挿入します。
データセット、データ拡張、マルチGPU、ロガーについては学習を参照してください。
検証
val()はmetrics/キーを持つ辞書を返します。画像分類では、検証分割に対するtop-1精度とtop-5精度が含まれます。
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])libreyolo val model=LibreConvNeXtt-cls.pt data=imagenette160エクスポート
| タスク | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| classify | classify 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を返します。エクスポートには各形式で受け付ける引数と、一部の形式で追加されるオプションが記載されています。
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreConvNeXtt-cls.pt format=onnxlibreyolo export model=LibreConvNeXtt-cls.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリはファイルの拡張子に応じて振り分けるためエクスポートした# アーティファクトもチェックポイントと同様に読み込まれ同じResultsオブジェクトを返すmodel = LibreYOLO("LibreConvNeXtt-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)チェックポイント
このファミリーで公開されているすべての重みファイルです。
| ファイル | 入力(px) | 重みのライセンス |
|---|---|---|
| classify | ||
| LibreConvNeXtt-cls.pt | 224 | apache-2.0 |
| LibreConvNeXts-cls.pt | 224 | apache-2.0 |
| LibreConvNeXtb-cls.pt | 224 | apache-2.0 |
上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- ConvNeXt, Meta AI (FAIR)
- アップストリームのライセンス
- 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 Meta AI's original design, released under MIT at facebookresearch/ConvNeXt; the block definitions, layer-scale parameter and module naming that LibreYOLO's implementation follows come from timm, whose convnext_{tiny,small,base}.fb_in1k ImageNet-1k weights are licensed Apache-2.0 and are what LibreYOLO ships. Only ConvNeXt V1 is shipped here: ConvNeXt-V2's small pretrained checkpoints are CC-BY-NC 4.0 and are deliberately excluded as not redistributable in a commercial library.
このファミリーではConvNeXt V1だけを提供しています。ConvNeXt-V2の小型事前学習済みチェックポイントはCC-BY-NC 4.0のため、意図的に除外されています。非商用の重みをMITライセンスで商用利用可能なライブラリ内で再配布できないためです。
引用
@Article{liu2022convnet,
author = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie},
title = {A ConvNet for the 2020s},
journal = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
year = {2022},
}著者によるgithub.com/facebookresearch/ConvNeXt#citationの引用ブロックからコピーしています。