PicoDet

PicoDetはモバイルおよびエッジCPU向けに構築された1段階検出器で、ESNetバックボーン、CSP-PANネック、共有Generalized Focal Lossヘッドを備えます。LibreYOLOは物体検出でPicoDetに対応します。

タスク
detection
サイズ
s, m, l at 320 to 640 px
インストール
pip install libreyolo
サポートティア
サポート対象、v以降。補助的な学習可能モデル:CIで正常な状態を維持し、機能は機会に応じて追加されます。
アップストリーム
PaddlePaddle (Baidu)のPP-PicoDet、Apache-2.0。論文ソース
ライセンス
コード:Apache-2.0、重み:Apache-2.0。商用利用

インストール

PicoDetに基本パッケージ以外の追加パッケージは必要ありません。

bash
pip install libreyolo

推論

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

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibrePICODETs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibrePICODETs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

返される Results オブジェクトはすべてのファミリーが返すものと同じなので、別の検出器への切り替えは1行の変更で済みます。conf は信頼度のしきい値、iou はNMSのしきい値を設定します。ソース、ストリーミング、結果の処理については推論を参照してください。

バリアント

3つのサイズがあり、それぞれ独自の固定入力解像度を持ちます。s がもっとも小さく、l がもっとも大きいサイズです。サイズに伴って解像度も上がるため、大きなチェックポイントはパラメータが多いだけでなく、画像ごとの実行コストも高くなります。

チェックポイント入力(px)mAP 50-95パラメータ(M)
LibrePICODETs32029.50.99
LibrePICODETm41637.62.15
LibrePICODETl64044.23.31

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

学習

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train(    data="my-dataset.yaml",    epochs=300, batch=16, lr0=0.01,)
CLI
# imgszは明示する価値がある。CLIのデフォルトは640だが# sチェックポイントのネイティブ解像度は320libreyolo train model=LibrePICODETs.pt data=my-dataset.yaml imgsz=320 epochs=300 batch=16 lr0=0.01

損失成分とassignerはアップストリームの手順に従います。VFL、DFL、GIoU、SimOTAに、分類品質の重み付けとdynamic-IoU VFL targetを組み合わせます。同じチェックポイントでの推論は、アップストリームとbit単位で同等です。

train() 独自のdocstringによると、full-datasetでの収束、マルチGPUでの動作、水平反転以外のデータ拡張は未確認です。ネイティブ解像度320の s チェックポイントは、小規模ファインチューニングのテストにライブラリが使う30枚・2クラスのfixtureにおいて、LibreYOLOの精度下限を安定して超えていません。このサイズはfull COCO規模により適しています。

train()pretrained 引数も受け付けますが、メソッド内でその値が読み取られることはありません。学習は常にモデル構築時の重みから続行されるため、pretrained=False でもネットワークは再初期化されません。Pythonで imgsz を未設定にすると、読み込んだチェックポイントのネイティブ解像度が使われます。s は320、m は416、l は640です。CLIは常に imgsz を渡し、デフォルトは640なので、チェックポイントに合わせて設定してください。

ほかの設定を変更しなければ、trainerはSGD、lr0=0.01、momentum 0.9、weight decay 4e-5、1エポックのウォームアップを使うcosine scheduleで300エポック実行します。適用されるデータ拡張は水平反転だけです。

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

検証

val() は、学習に使った形式の任意のデータセットに対して測定した適合率、再現率、mAP 50、mAP 50-95を含む metrics/ キーの辞書を返します。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibrePICODETs.pt data=my-dataset.yaml

エクスポート

タスク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:対応

エクスポート済み成果物はファイル接尾辞に基づいて LibreYOLO() から再度読み込めます。そのため、.onnx または .engine ファイルはチェックポイントと同様に動作し、同じ Results を返します。LibreYOLOをインストールしていない単独のランタイムでグラフを実行することもできますが、その場合は前処理と後処理を自身で記述する必要があります。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.export(format="onnx", imgsz=320)model.export(format="tensorrt", imgsz=320, half=True)
CLI
libreyolo export model=LibrePICODETs.pt format=onnx imgsz=320libreyolo export model=LibrePICODETs.pt format=tensorrt imgsz=320 half=True
エクスポートしたファイルを使う
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイル接尾辞で経路を選ぶため、エクスポート済み成果物も# 通常のチェックポイントと同様に読み込まれ、同じResultsオブジェクトを返すmodel = LibreYOLO("LibrePICODETs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

チェックポイント

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

ファイル入力(px)重みのライセンス
Detection
LibrePICODETs.pt320apache-2.0
LibrePICODETm.pt416apache-2.0
LibrePICODETl.pt640apache-2.0

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

ライセンス

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

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

原著作物
PP-PicoDet, PaddlePaddle (Baidu)
アップストリームのライセンス
Apache-2.0
アップストリームのソース
github.com/PaddlePaddle/PaddleDetection
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. LibreYOLO's port follows Bo396543018/Picodet_Pytorch, a PyTorch re-implementation of PaddleDetection's original PP-PicoDet, and both carry the same Apache-2.0 terms as the paper's authors.

LibreYOLOの移植は、PaddleDetectionの元のPP-PicoDetをPyTorchで再実装したBo396543018/Picodet_Pytorchに従います。mmcvを取り除き、すべてのactivationを正確に一致させているため、Boのパイプラインで変換したPaddlePaddleチェックポイントを数値的なずれなしで読み込めます。両方のソースには、論文の作者と同じApache-2.0の条件が適用されます。

引用

@misc{yu2021pppicodet,
      title={PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices},
      author={Guanghua Yu and Qinyao Chang and Wenyu Lv and Chang Xu and Cheng Cui and Wei Ji and Qingqing Dang and Kaipeng Deng and Guanzhong Wang and Yuning Du and Baohua Lai and Qiwen Liu and Xiaoguang Hu and Dianhai Yu and Yanjun Ma},
      year={2021},
      eprint={2111.00902},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

著者によるgithub.com/PaddlePaddle/PaddleDetection/blob/release/2.8/configs/picodet/README_en.md#cite-pp-picodetの引用ブロックからコピーしています。

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