DEIM
密な1対1マッチングで学習し、基盤とするDETRレシピよりはるかに少ないエポックで収束する検出Transformerです。LibreYOLOには2つのバージョンがあり、読み込むチェックポイントで区別されます。
- タスク
- detection
- サイズ
- deim: n, s, m, l, x at 640 px
- インストール
pip install libreyolo- サポートティア
- コア、v1.2.0以降。学習可能なコア検出器:機能は同じリリースサイクルでフラッグシップに続いて実装されます。
- アップストリーム
- Intellindust AI LabのDEIM and DEIMv2、Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License。論文、ソース
- ライセンス
- コード:Apache-2.0、重み:Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License。商用利用
インストール
どちらのバージョンにもオプションの追加パッケージは不要です。インポートするものはすべて基本インストールに含まれています。
pip install libreyololora=Trueによるアダプターのファインチューニングは例外で、lora追加パッケージが必要です。
pip install "libreyolo[lora]"推論
重みは初回使用時にHugging Faceからダウンロードされ、ローカルにキャッシュされます。
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreDEIMn.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreDEIMn.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom libreyolo import LibreYOLO # バージョンはファイル名の一部でファクトリーはチェックポイントに基づき# 振り分けるため両方とも同じ方法で読み込むmodel = LibreYOLO("LibreDEIMv2pico.pt") # ライブラリが受け付ける任意のソース: ファイル フォルダー URL Webカメラ番号# RTSP ストリーム または .streams リストfor result in model.predict("clip.mp4", stream=True, save=True): print(len(result.boxes))返されるResultsオブジェクトはすべてのファミリーに共通するため、別の検出器への切り替えは1行の変更で済みます。confとmax_detはクエリとクラスに対する上位k件のデコードをフィルタリングします。調整するNMSステップはなく、iouは受け付けられますが使用されません。ソース、ストリーミング、結果の処理については推論を参照してください。
バリアント
バージョン1には同じ入力サイズを使う5つのサイズがあります。バージョン2はその5つの名前を維持し、さらに小さいatto、femto、picoを追加します。最初の2つは、ほかのサイズより小さい入力サイズをネイティブで使用します。したがって、5つのサイズコードは両バージョンに存在し、それぞれ異なるモデルを指します。バージョンはチェックポイントのファイル名に記載されます。
| チェックポイント | 入力(px) | mAP 50-95 | パラメータ(M) |
|---|---|---|---|
| LibreDEIMl | 640 | 57.8 | 31.24 |
| LibreDEIMm | 640 | 55.4 | 19.59 |
| LibreDEIMn | 640 | 46.8 | 3.78 |
| LibreDEIMs | 640 | 52.1 | 10.32 |
| LibreDEIMx | 640 | 59.6 | 62.62 |
| LibreDEIMv2atto | 320 | 27.5 | 0.51 |
| LibreDEIMv2femto | 416 | 34.5 | 0.98 |
| LibreDEIMv2l | 640 | 58.6 | 32.55 |
| LibreDEIMv2m | 640 | 56.0 | 18.36 |
| LibreDEIMv2n | 640 | 46.7 | 3.6 |
| LibreDEIMv2pico | 640 | 42.2 | 1.54 |
| LibreDEIMv2s | 640 | 53.0 | 9.78 |
| LibreDEIMv2x | 640 | 61.3 | 51.21 |
COCO val2017, 500 images。LibreYOLOベンチマークハーネスで測定し、Vision Analysisで公開しています。そこではハードウェアおよびランタイム別のレイテンシを比較でき、完全な実行記録も確認できます。
バージョン1はD-FINEのアーキテクチャを維持し、その分類目的関数を密な1対1レシピのマッチ可能性を考慮した損失に置き換えます。そのため、2つのファミリーはほぼすべてのstate dictキーを共有し、チェックポイント内のメタデータで区別されます。バージョン2はその学習規約を維持しつつ、バックボーンを組み合わせます。s未満ではHGNetv2、s以上では空間チューニングアダプターを備えたDINOv3 Vision Transformerを使います。このバックボーンにより、その4つのチェックポイントには2つ目のライセンスが適用されます。リリースする前にライセンスを確認してください。
学習
学習は公開済みチェックポイントから開始します。pretrainedがトレーナーに渡ることはありません。バージョン1ではキーが不明だと警告して無視し、バージョン2では削除します。どちらもランダムに初期化されたモデルは提供しません。
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt") # coco128.yaml は初回使用時に128枚のサンプルをダウンロード# 実際の実行では data に独自データセットのYAMLを指定model.train(data="coco128.yaml", epochs=50, batch=8, lr0=1e-4)libreyolo train model=LibreDEIMn.pt data=coco128.yaml \ epochs=50 batch=8 lr0=1e-4from libreyolo import LibreYOLO # 未設定の場合 epochs batch imgsz lr0 は読み込んだサイズ向けの# 公開レシピから取得model = LibreYOLO("LibreDEIMv2pico.pt")model.train(data="coco128.yaml", epochs=50)# lora 追加パッケージが必要: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")model.train(data="coco128.yaml", epochs=50, lora=True)libreyolo train model=LibreDEIMn.pt data=coco128.yaml \ epochs=50 device=0,1バージョン1ではlr0を自分で渡してください。Pythonのtrain()シグネチャのデフォルトは、公開済みCOCOレシピの学習率4e-4です。一方、ファミリーの学習設定にはファインチューニング用のデフォルトとして1e-4が含まれ、引数を省略した場合にCLIが解決するのはこの低い値です。設定にはその根拠となる測定結果も記録されています。ファインチューニングで実際に使うバッチサイズと小規模データセットでは、COCOの学習率によって転移性能が測定可能なほど低下しました。
バージョン2はこれらのデフォルトを自ら解決します。epochs、batch、imgsz、lr0を未設定にすると、読み込んだサイズ向けの公開レシピから各値を読み取ります。そのため、小さいサイズは指定なしでも固有の入力解像度で学習し、渡した値はレシピを上書きします。制約が適用される引数はimgszです。正の32の倍数でなければならず、それ以外の場合はバージョン2が実行開始前に例外を発生させます。
データセット、データ拡張、マルチGPU、ロガーについては学習を参照してください。
検証
val()は、学習に使用した形式の任意のデータセットで測定した適合率、再現率、mAP 50、mAP 50-95を含むmetrics/キーの辞書を返します。
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt") # val() はオブジェクトではなく通常の辞書を返すmetrics = model.val(data="coco128.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])print(metrics["metrics/precision"], metrics["metrics/recall"])libreyolo val model=LibreDEIMn.pt data=coco128.yaml# coco-val-only.yaml は5000枚の val2017 画像を取得し# 学習セットをスキップする ダウンロードスクリプトを内包するため# データセットがローカルにない場合は明示的な許可が必要libreyolo val model=LibreDEIMn.pt data=coco-val-only.yaml \ allow_download_scripts=True上記のベンチマーク表の行はLibreYOLOのベンチマークハーネスから取得されています。表の下の注記には、使用したデータセットと実行記録へのリンクが記載されています。
エクスポート
| タスク | 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:対応 |
このマトリクスは2つのバージョンを1ページで扱います。形式に対する対応状況が異なる場合、そのセルには弱い方が表示されるため、どちらのバージョンを読み込んでも実際以上の対応を示すことはありません。
エクスポートした成果物は、ファイルサフィックスに基づいてLibreYOLO()から再度読み込めます。そのため、.onnxまたは.engineファイルはチェックポイントと同様に動作し、同じResultsを返します。
# onnx 追加パッケージが必要: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")path = model.export(format="onnx")print(path)libreyolo export model=LibreDEIMn.pt format=onnxfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイルサフィックスで振り分けるためエクスポート成果物も# 任意のチェックポイントと同様に読み込まれ同じ Results オブジェクトを返すmodel = LibreYOLO("LibreDEIMn.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)チェックポイント
このファミリーで公開されているすべての重みファイルです。
| ファイル | 入力(px) | 重みのライセンス |
|---|---|---|
| Detection | ||
| LibreDEIMn.pt | 640 | apache-2.0 |
| LibreDEIMs.pt | 640 | apache-2.0 |
| LibreDEIMm.pt | 640 | apache-2.0 |
| LibreDEIMl.pt | 640 | apache-2.0 |
| LibreDEIMx.pt | 640 | apache-2.0 |
| LibreDEIMv2n.pt | 640 | apache-2.0 |
| LibreDEIMv2s.pt | 640 | other |
| LibreDEIMv2m.pt | 640 | other |
| LibreDEIMv2l.pt | 640 | other |
| LibreDEIMv2x.pt | 640 | other |
| LibreDEIMv2atto.pt | apache-2.0 | |
| LibreDEIMv2femto.pt | apache-2.0 | |
| LibreDEIMv2pico.pt | apache-2.0 | |
上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- DEIM and DEIMv2, Intellindust AI Lab
- アップストリームのライセンス
- Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License
- アップストリームのソース
- github.com/Intellindust-AI-Lab/DEIM
- LibreYOLOのコード
- MIT
- 重み
- Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License、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. DEIM is Apache-2.0 throughout, and so are the DEIMv2 sizes below S, which use an HGNetv2 backbone. The DEIMv2 S, M, L and X sizes take their backbone from DINOv3, so both their weights and the backbone source vendored in LibreYOLO are additionally governed by Meta's DINOv3 License Agreement, which is not an OSI license: redistribution has to carry the agreement with it, and it forbids use for military or warfare purposes, weapons development, espionage, nuclear industries and anything subject to ITAR. Their Hugging Face repositories declare both licenses, and DEIMv2 is also cited separately (arXiv 2509.20787).
引用
@misc{huang2024deim,
title={DEIM: DETR with Improved Matching for Fast Convergence},
author={Shihua, Huang and Zhichao, Lu and Xiaodong, Cun and Yongjun, Yu and Xiao, Zhou and Xi, Shen},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
year={2025},
}著者によるgithub.com/Intellindust-AI-Lab/DEIM#5-citationの引用ブロックからコピーしています。
DEIMv2には別の論文があり、github.com/Intellindust-AI-Lab/DEIMv2に専用の引用ブロックがあります。バージョン2のチェックポイントを使用した場合は、そちらを引用してください。