ViT
定番のVision Transformerです。学習済みclass tokenを持ち、畳み込みを使わず、固定サイズの画像patchへ純粋なtransformerを適用します。LibreYOLOは画像分類向けに、AugReg事前学習済みの4サイズを提供します。
- タスク
- classify
- サイズ
- ti, s, b, l at 224 px
- インストール
pip install libreyolo- サポートティア
- 推論のみ、v以降。推論、検証、エクスポートのみです。学習機能は対象外です。
- ライセンス
- コード:Apache-2.0、重み:Apache-2.0。商用利用
インストール
ViTに任意の追加パッケージは必要ありません。インポートするものはすべて基本インストールに含まれます。
pip install libreyolo推論
重みは初回使用時にHugging Faceからダウンロードされ、ローカルにキャッシュされます。
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreViTti-cls.pt")result = model(SAMPLE_IMAGE, save=True) probs = result.probsprint(probs.top1, probs.top1conf)print(probs.top5, probs.top5conf)libreyolo predict model=LibreViTti-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True分類器はresult.boxesではなくresult.probsを返します。top1とtop5はクラス
インデックス、top1confとtop5confはそれぞれの信頼度を示します。前処理はtimmのAugReg
評価レシピを使い、固定224 px入力へリサイズして中央クロップします。crop比率0.9のbicubic補間です。
入力ソース、ストリーミング、結果の処理については推論を参照してください。
バリアント
サイズはtiny〜largeの4種類です。固定224 pxのpatch-16グラフを共有し、埋め込みベクトルの幅と transformerの深さが異なります。LibreYOLOはこのファミリーを推論専用で提供します。推論、 ImageNet形式のtop-1・top-5検証、エクスポートに対応し、AugRegファインチューニングレシピは 未実装です。
検証
val()はImageFolder形式の分割(train/とval/サブフォルダーを持ち、クラスごとに1個の
フォルダーがあるディレクトリ)に対して実行し、top-1とtop-5の精度を返します。
from libreyolo import LibreYOLO model = LibreYOLO("LibreViTti-cls.pt") # dataはtrain/とval/のクラス別フォルダーを持つルートディレクトリ# データセットYAMLではなくImageFolderレイアウトmetrics = model.val(data="imagenet-1k/") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])libreyolo val model=LibreViTti-cls.pt data=imagenet-1k/エクスポート
| タスク | 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("LibreViTti-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreViTti-cls.pt format=onnxlibreyolo export model=LibreViTti-cls.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリがファイル接尾辞で振り分けるため、エクスポートした成果物も# 通常のチェックポイントと同様に読み込まれ、同じResultsオブジェクトを返すmodel = LibreYOLO("LibreViTti-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)チェックポイント
このファミリーで公開されているすべての重みファイルです。
| ファイル | 入力(px) | 重みのライセンス |
|---|---|---|
| classify | ||
| LibreViTti-cls.pt | 224 | apache-2.0 |
| LibreViTs-cls.pt | 224 | apache-2.0 |
| LibreViTb-cls.pt | 224 | apache-2.0 |
| LibreViTl-cls.pt | 224 | apache-2.0 |
上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- ViT, Google Research
- アップストリームのライセンス
- Apache-2.0
- アップストリームのソース
- github.com/google-research/vision_transformer
- 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. LibreYOLO's runtime code for this family is a derived port of the Apache-2.0 timm Vision Transformer implementation (Ross Wightman, huggingface/pytorch-image-models), kept checkpoint-compatible with the shipped tensors. The four AugReg checkpoints themselves are timm's Apache-2.0 conversion of Google Research's own AugReg pretraining, so the code and the weights carry the same permissive terms end to end.
引用
@article{dosovitskiy2020vit,
title={An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale},
author={Dosovitskiy, Alexey and Beyer, Lucas and Kolesnikov, Alexander and Weissenborn, Dirk and Zhai, Xiaohua and Unterthiner, Thomas and Dehghani, Mostafa and Minderer, Matthias and Heigold, Georg and Gelly, Sylvain and Uszkoreit, Jakob and Houlsby, Neil},
journal={ICLR},
year={2021}
}
@article{steiner2021augreg,
title={How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers},
author={Steiner, Andreas and Kolesnikov, Alexander and and Zhai, Xiaohua and Wightman, Ross and Uszkoreit, Jakob and Beyer, Lucas},
journal={arXiv preprint arXiv:2106.10270},
year={2021}
}著者によるgithub.com/google-research/vision_transformer#bibtexの引用ブロックからコピーしています。