Markdownで表示

EdgeCrafter

エッジハードウェア上の密な予測に適した小型Vision Transformerです。アップストリームではECDet、ECPose、ECSegという3つの姉妹モデルとして公開されています。LibreYOLOは3つすべてを1つのファミリーとして読み込み、チェックポイントによってタスクを決定します。

タスク
detection, pose, instance segmentation
サイズ
s, m, l, x at 640 px
インストール
pip install libreyolo
サポートティア
コア、v1.2.0以降。学習可能なコア検出器:機能は同じリリースサイクルでフラッグシップに続いて実装されます。
アップストリーム
Intellindust AI LabのEdgeCrafter、Apache-2.0。論文ソース
ライセンス
コード:Apache-2.0、重み:Apache-2.0。商用利用

インストール

EdgeCrafterにオプションの追加パッケージは不要です。インポートするものはすべて基本インストールに含まれています。

bash
pip install libreyolo

lora=Trueによるアダプターのファインチューニングは例外で、lora追加パッケージが必要です。

bash
pip install "libreyolo[lora]"

推論

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

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreECs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreECs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
姿勢推定
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファイル名の -pose サフィックスでキーポイントヘッドを選択するため# task 引数は不要model = LibreYOLO("LibreECs-pose.pt")result = model(SAMPLE_IMAGE, save=True) print(result.keypoints.xy)print(result.boxes.conf)
インスタンスセグメンテーション
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreECs-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)

タスクはファイル名で決まるため、-poseまたは-segチェックポイントは固有のヘッドを選択し、タスク引数を必要としません。3つすべてが各ファミリー共通のResultsオブジェクトを返し、姿勢推定ではresult.keypoints、セグメンテーションではresult.masksが追加されます。姿勢推定はpersonの1クラスとCOCOの17キーポイントを対象とし、モデル構築時にその数が固定されます。ボックスヘッドを持たないため、各姿勢ボックスは自身のキーポイントを囲む範囲となり、キーポイントの3番目のチャンネルは点ごとのスコアではなく定数です。

confmax_detはクエリ選択をフィルタリングします。3つのヘッドはすべてNMSステップなしでクエリ集合をデコードするため、iouはAPIの互換性のため受け付けられますが効果はありません。ソース、ストリーミング、結果の処理については推論を参照してください。

バリアント

4つのサイズがあります。すべて同じ入力解像度で動作するため、表ではパラメータ数と精度で区別しています。

チェックポイント入力(px)mAP 50-95パラメータ(M)
LibreECl64060.132.97
LibreECm64058.419.43
LibreECs64054.39.88
LibreECx64061.149.94

COCO val2017, 500 images。LibreYOLOベンチマークハーネスで測定し、Vision Analysisで公開しています。そこではハードウェアおよびランタイム別のレイテンシを比較でき、完全な実行記録も確認できます。

アップストリームは、3つのヘッドを持つ1つのモデルではなく、ECDet、ECPose、ECSegを3つの別個のモデルとして公開しています。これらはECViTバックボーンとハイブリッドエンコーダーを共有し、ヘッドだけが異なります。そのため、LibreYOLOは3つを1つのファミリーにまとめ、チェックポイントのファイル名でタスクを表します。したがって、サイズ文字は3つすべてで同じバックボーンとエンコーダーを意味し、どれを読み込んでも推論、検証、エクスポートは同じ引数を受け取ります。

学習

3つのタスクはすべてtrain()で学習します。読み込んだチェックポイントからタスクを読み取り、対応するトレーナーを選択します。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.train(    data="my-dataset.yaml",    epochs=50,    imgsz=640,    batch=8,    lr0=5e-4,)
CLI
libreyolo train model=LibreECs.pt data=my-dataset.yaml epochs=50 imgsz=640 batch=8 lr0=5e-4
姿勢推定
from libreyolo import LibreYOLO # data.yaml で kpt_shape を宣言した単一クラスのキーポイントデータセットと# チェックポイントのネイティブサイズに合わせた imgsz が必要model = LibreYOLO("LibreECs-pose.pt")model.train(    data="my-pose-dataset.yaml",    epochs=50,    imgsz=640,)
インスタンスセグメンテーション
from libreyolo import LibreYOLO # ポリゴンラベルとチェックポイントのネイティブサイズに合わせた imgsz が必要model = LibreYOLO("LibreECs-seg.pt")model.train(    data="my-dataset.yaml",    epochs=50,    imgsz=640,)
LoRA
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.train(    data="my-dataset.yaml",    epochs=50,    lora=True,)

検出とセグメンテーションで確認済みなのは、サイズごとに層単位で行ったアップストリームとの1e-5以内の推論一致と、合成入力で損失および1回の学習ステップが動作することです。train()自体のdocstringによると、完全なファインチューニングの収束、マルチGPU学習、データ拡張停止後の最良モデル再読み込みステップ、Objects365からCOCOへのクラス再マッピングは未検証です。姿勢推定の処理はDETRPoseの公開レシピに従います。クラス、キーポイントのL1、OKSコストを使うHungarian matcherと、対照的キーポイントノイズ除去を採用していますが、そのエンドツーエンドの収束も未検証です。

設定を変更しなければ、トレーナーはアップストリームのレシピに従い、混合精度を有効にしてlr0=5e-4で74エポック実行します。AdamW、フラットコサインスケジュール、0.9999のEMA、ImageNetで正規化した入力を使います。姿勢推定とセグメンテーションでは、どちらもチェックポイントのネイティブサイズに合わせたimgszが必要です。評価用アンカーグリッドはモデルの構築時に作成されるため、異なる値を指定すると実行開始前に例外が発生します。姿勢推定には、data.yamlkpt_shapeを宣言し、キーポイント数がヘッドと一致する単一クラスのデータセットも必要です。

lora=Trueは検出だけに適用されます。姿勢推定とセグメンテーションではValueErrorが発生します。Apple siliconでは実行をGPU上に維持しつつ、変形可能アテンション内部のgrid-sampleの逆伝播という1つの演算をCPUに送ります。PyTorchがMetal上でこの演算を実装していないためです。

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

検証

val()はメトリクス名をキーとする辞書を返し、verboseを有効のままにするとクラス別の結果を表示します。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreECs.pt data=my-dataset.yaml
姿勢推定
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs-pose.pt")metrics = model.val(data="my-pose-dataset.yaml") print(metrics["metrics/keypoints_mAP50-95"])print(metrics["metrics/keypoints_mAP50"])
インスタンスセグメンテーション
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # マスクprint(metrics["metrics/mAP50-95(B)"])   # ボックス

姿勢推定はmetrics/keypoints_*にキーポイントのOKSメトリクスを報告します。セグメンテーションは通常のmetrics/mAP50-95キーにマスクを報告し、1回の処理で両方のビューも繰り返します。ボックスは(B)、マスクは(M)に格納されます。

エクスポート

タスクONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection 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:対応
PosePose 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:非対応
Instance segmentationInstance segmentation to ONNX:対応Instance segmentation to TorchScript:対応Instance segmentation to ExecuTorch:対応Instance segmentation to TensorRT:対応Instance segmentation to OpenVINO:対応Instance segmentation to Paddle:対応Instance segmentation to MNN:非対応Instance segmentation to RKNN:非対応Instance segmentation to ncnn:非対応Instance segmentation to TFLite:非対応Instance segmentation to CoreML:非対応Instance segmentation to Core AI:非対応

エクスポートした成果物は、ファイルサフィックスに基づいてLibreYOLO()から再度読み込めます。そのため、.onnxまたは.engineファイルはチェックポイントと同様に動作し、同じResultsを返します。姿勢推定とセグメンテーションは、動的形状ではなく固定の640 x 640入力でエクスポートされます。OpenVINO、Paddle、MNN、ExecuTorch、Core AIを含む複数の検出ターゲットも固定キャンバスです。各形式が受け付ける引数と、一部の形式に追加される引数についてはエクスポートを参照してください。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreECs.pt format=onnx imgsz=640libreyolo export model=LibreECs-pose.pt format=onnx imgsz=640libreyolo export model=LibreECs-seg.pt format=onnx imgsz=640
エクスポートしたファイルを使う
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイルサフィックスで振り分けるためエクスポート成果物も# 任意のチェックポイントと同様に読み込まれ同じ Results オブジェクトを返すmodel = LibreYOLO("LibreECs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

チェックポイント

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

ファイル入力(px)重みのライセンス
Detection
LibreECs.pt640apache-2.0
LibreECm.pt640apache-2.0
LibreECl.pt640apache-2.0
LibreECx.pt640apache-2.0
Pose
LibreECs-pose.pt640apache-2.0
LibreECm-pose.pt640apache-2.0
LibreECl-pose.pt640apache-2.0
LibreECx-pose.pt640apache-2.0
Instance segmentation
LibreECs-seg.pt640apache-2.0
LibreECm-seg.pt640apache-2.0
LibreECl-seg.pt640apache-2.0
LibreECx-seg.pt640apache-2.0

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

ライセンス

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

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

原著作物
EdgeCrafter, Intellindust AI Lab
アップストリームのライセンス
Apache-2.0
アップストリームのソース
github.com/Intellindust-AI-Lab/EdgeCrafter
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. One license covers all three upstream models, so the detection, pose and segmentation weights carry identical terms, and weights you train yourself on your own data are yours.

引用

@article{liu2026edgecrafter,
  title={EdgeCrafter: Compact ViTs for Edge Dense Prediction via Task-Specialized Distillation},
  author={Liu, Longfei and Hou, Yongjie and Li, Yang and Wang, Qirui and Sha, Youyang and Yu, Yongjun and Wang, Yinzhi and Ru, Peizhe and Yu, Xuanlong and Shen, Xi},
  journal={arXiv},
  year={2026}
}

著者によるgithub.com/Intellindust-AI-Lab/EdgeCrafter#-citationの引用ブロックからコピーしています。

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