YOLO-NAS
Deci.AIのアーキテクチャ探索から生まれたバックボーンとネックを持ち、量子化を考慮したRepVGGブロックで構築された畳み込み検出器です。重みはDeci.AIのもので、非商用利用だけが許可されており、LibreYOLOはその重みを一切公開していません。
- タスク
- detection, pose
- サイズ
- s, m, l at 640 px
- インストール
pip install libreyolo- サポートティア
- コア、v1.1.0以降。学習可能なコア検出器:機能は同じリリースサイクルでフラッグシップに続いて実装されます。
- ライセンス
- コード:Apache-2.0、重み:Deci.AI proprietary, non-commercial。商用利用
インストール
YOLO-NASには基本パッケージ以外の追加パッケージは不要です。
pip install libreyolo推論
ディスク上に存在しないチェックポイント名は、これらの重みを一切ホストしていないLibreYOLO組織ではなく、Deciの公開CDNから取得されます。転送を開始する前に、ライブラリはプロセスごとに1回Deciのライセンス条件を表示します。ダウンロードしたファイルを開く前に、SHA-256が固定値と照合されます。条件で許可される内容についてはライセンスを参照してください。
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ディスク上にない名前は Deci の CDN から取得# ダウンロード前に Deci のライセンス条件を表示し取得すると同意したことになるmodel = LibreYOLO("LibreYOLONASs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreYOLONASs.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # -pose サフィックスで姿勢推定ヘッドと固有の重み集合を選択model = LibreYOLO("LibreYOLONASs-pose.pt")result = model(SAMPLE_IMAGE) print(result.keypoints.xy)返されるResultsオブジェクトはすべてのファミリーに共通するため、別の検出器への切り替えは1行の変更で済みます。confは信頼度のしきい値、iouはNMSのしきい値を設定します。ソース、ストリーミング、結果の処理については推論を参照してください。
バリアント
検出と姿勢推定は異なるヘッドの下で同じアーキテクチャを使い、同じ引数を受け取ります。下の表にあるサイズは検出用です。姿勢推定はその各サイズと、さらに小さい1サイズで公開されています。姿勢推定ヘッドはCOCOのキーポイント集合を予測します。
| チェックポイント | 入力(px) | mAP 50-95 | パラメータ(M) |
|---|---|---|---|
| LibreYOLONASl | 640 | 56.3 | 66.98 |
| LibreYOLONASm | 640 | 55.4 | 51.18 |
| LibreYOLONASs | 640 | 51.8 | 19.05 |
COCO val2017, 500 images。LibreYOLOベンチマークハーネスで測定し、Vision Analysisで公開しています。そこではハードウェアおよびランタイム別のレイテンシを比較でき、完全な実行記録も確認できます。
学習
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)libreyolo train model=LibreYOLONASs.pt data=my-dataset.yaml \ epochs=100 imgsz=640 batch=16from libreyolo import LibreYOLONAS # Deci のチェックポイントには触れずモデルをランダムな重みから開始# 実行結果は独自データだけに由来model = LibreYOLONAS(None, size="s")model.train(data="my-dataset.yaml", imgsz=640, batch=16)epochs、lr0、ampを省略するとタスクごとに解決されるため、姿勢推定の実行は検出とは異なるデフォルトから始まります。オプティマイザーのデフォルトはAdamWです。クラス数はデータセットYAMLから取得され、最初のエポック前にヘッドがその数に合わせて再構築されます。姿勢推定ヘッドではキーポイント数も同じように処理されるため、COCOの姿勢推定チェックポイントを異なるサイズのスケルトンへファインチューニングできます。
ファインチューニングはDeciの重みから開始し、これがDeciのライセンスの対象です。ランダムに初期化したモデルからの学習ではDeciのチェックポイントを一切使用しません。その手順が上の3番目のスニペットです。
データセット、データ拡張、マルチGPU、ロガーについては学習を参照してください。
検証
val()は、学習に使用した形式の任意のデータセットで測定した適合率、再現率、mAP 50、mAP 50-95を含むmetrics/キーの辞書を返します。
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLONASs.pt data=my-dataset.yaml# 同梱の COCO yaml はダウンロードスクリプトを内包するため# データセットがローカルにない場合は明示的な許可が必要libreyolo val model=LibreYOLONASl.pt data=coco.yaml imgsz=640 \ allow_download_scripts=Trueエクスポート
| タスク | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX:対応 | Detection to TorchScript:対応 | Detection to ExecuTorch:対応 | Detection to TensorRT:対応 | Detection to OpenVINO:対応 | Detection to Paddle:対応 | Detection to MNN:対応 | Detection to RKNN:対応 | Detection to ncnn:対応 | Detection to TFLite:対応 | Detection to CoreML:非対応 | Detection to Core AI:対応 |
| Pose | Pose to ONNX:対応 | Pose to TorchScript:対応 | Pose to ExecuTorch:対応 | Pose to TensorRT:対応 | Pose to OpenVINO:対応 | Pose to Paddle:対応 | Pose to MNN:非対応 | Pose to RKNN:非対応 | Pose to ncnn:対応 | Pose to TFLite:非対応 | Pose to CoreML:非対応 | Pose to Core AI:非対応 |
エクスポートした成果物は、ファイルサフィックスに基づいてLibreYOLO()から再度読み込めます。そのため、.onnxまたは.engineファイルはチェックポイントと同様に動作し、同じResultsを返します。LibreYOLOをインストールせず、単独のランタイムでグラフを実行することもサポートされますが、その場合は前処理と後処理を自分で実装する必要があります。各形式では異なる追加パッケージをインストールし、それぞれ固有の引数をいくつか受け取ります。どちらも該当する形式のページに記載されています。
エクスポートは、同じ重みを別のコンテナに収めたもう1つのコピーです。Deciのチェックポイントをエクスポートしても、重みの由来や適用されるライセンスは変わりません。
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.export(format="onnx", imgsz=640)libreyolo export model=LibreYOLONASs.pt format=onnx imgsz=640from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイルサフィックスで振り分けるためエクスポート成果物も# 任意のチェックポイントと同様に読み込まれ同じ Results オブジェクトを返すmodel = LibreYOLO("LibreYOLONASs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)チェックポイント
一覧にするものはありません。Deciのライセンスは再配布を禁止しているため、LibreYOLO組織はYOLO-NASの重みを一切公開せず、ダウンロードは別の場所から解決されます。LibreYOLONAS<size>.pt形式の名前、姿勢推定の場合はLibreYOLONAS<size>-pose.pt形式の名前が、Deciの公開CDN上の対応するオブジェクトにマッピングされます。
ライブラリがSHA-256を固定しているチェックポイントだけをこの方法で取得できます。それ以外は、検証されていない第三者のpickleを開かずに失敗し、手動でダウンロードしてパスとして渡す必要があります。すでにディスク上にあるファイルはパスから読み込まれ、ダウンロードもチェックサムゲートもありません。ローダーが認識する元の名前のDeci .pthもこれに含まれます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- YOLO-NAS, Deci.AI
- アップストリームのライセンス
- Deci.AI proprietary, non-commercial
- アップストリームのソース
- github.com/Deci-AI/super-gradients
- LibreYOLOのコード
- MIT
- 重み
- Deci.AI proprietary, non-commercial、著者が配布。LibreYOLOではホストもミラーもしていません。
- 解釈
- Two licenses apply here and they are not the same. The SuperGradients source this port follows is Apache-2.0 and LibreYOLO's own implementation is MIT, so nothing restricts the architecture or the training code. Deci's published checkpoints are a different matter: the YOLO-NAS license grants a revocable, non-transferable right to use them and nothing more. It forbids redistribution and sublicensing, forbids offering them as a managed or remote service, restricts modification and reverse engineering, and rules out commercial use, including any model running in a production environment, unless you hold a separate agreement with Deci. LibreYOLO therefore does not mirror them, and prints those terms once before the download starts. Weights trained from a randomly initialized model on your own data derive from no Deci checkpoint.
LibreYOLOはこれらの重みをホストもミラーもしません。このファミリーに該当するファイルはLibreYOLOのHugging Face組織に一切ありません。すべての自動ダウンロードは代わりにDeciの公開CDNへ接続し、開始前にプロセスごとに1回Deciの条件を表示します。また、ファイルを開く前に固定されたSHA-256と照合します。
ランダムに初期化されたモデルからの学習が代替手段です。アーキテクチャはアップストリームでApache-2.0、ここではMITなので、この方法で独自データを使って学習したモデルはDeciのチェックポイントに由来しません。
引用
YOLO-NASは論文なしで公開されました。下の項目は、YOLO-NASが提供されたライブラリであるSuperGradientsを対象として、著者が引用を求めているものです。
@misc{supergradients,
doi = {10.5281/ZENODO.7789328},
url = {https://zenodo.org/record/7789328},
author = {Aharon, Shay and {Louis-Dupont} and {Ofri Masad} and Yurkova, Kate and {Lotem Fridman} and {Lkdci} and Khvedchenya, Eugene and Rubin, Ran and Bagrov, Natan and Tymchenko, Borys and Keren, Tomer and Zhilko, Alexander and {Eran-Deci}},
title = {Super-Gradients},
publisher = {GitHub},
journal = {GitHub repository},
year = {2021},
}著者によるgithub.com/Deci-AI/super-gradients#citingの引用ブロックからコピーしています。