YOLOv7

YOLOv7はアンカーベースの1段階検出器で、ヘッドは最終畳み込みの前に学習済みimplicit knowledge offsetを加えます。LibreYOLOは、公開されている1つのサイズを物体検出でサポートします。

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

インストール

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

bash
pip install libreyolo

推論

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

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

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

バリアント

LibreYOLOは b という1つのサイズを提供します。アップストリームが公開するYOLOv7モデルは1つだけなので、選択するサイズはありません。

学習

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \  epochs=300 imgsz=640 batch=16 lr0=0.01
新しいモデルからウォームスタート
from libreyolo import LibreYOLO7 # pretrained=Trueは、このインスタンスの構築方法に関係なく# 公開済みLibreYOLO7b.ptチェックポイントを常に読み込む# LibreYOLO()を通さずクラスを直接構築すると# 重みをまったく読み込まずに開始model = LibreYOLO7(None, size="b")model.train(data="my-dataset.yaml", epochs=300, pretrained=True)

このファミリーでは、同名の引数が何もしないほかの一部のファミリーとは異なり、pretrained が読み取られます。公開済みの LibreYOLO7b.pt チェックポイントからウォームスタートするには True を渡し(自動ダウンロードされます)、それ以外の場合はパスまたは名前を渡してください。公開済みチェックポイントは80クラスのCOCO用です。そのため、別のクラス数に再構築済みのモデルでこれを要求すると、まず80クラスに戻して再構築し、読み込んだ後、データセットのクラス数を読み取って対象のヘッド数に合わせる際に、shapeが一致するすべてのテンソルを転送します。resume=Truepretrained は併用できません。デフォルトの None のままにすると、モデル構築時の重みから学習を続行し、何も読み込まれていなければランダム初期化から始めます。

ほかの設定を変更しなければ、trainerは lr0=0.01、SGD momentum 0.937、3エポックのウォームアップで300エポック実行します。また、YOLOXと同じSimOTA割り当てと、最後の15エポックでデータ拡張を行わない段階をアンカーベースのヘッド向けに調整して使います。違いは1つあります。YOLOXは最後のエポックでL1ボックス回帰のrefinementを追加しますが、v7では省略します。v7のSimOTA損失には、調整する未処理offsetのL1 branchがないためです。

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

検証

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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLO7b.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("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.pt format=tensorrt imgsz=640 half=True
エクスポートしたファイルを使う
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイル接尾辞で経路を選ぶため、エクスポート済み成果物も# 通常のチェックポイントと同様に読み込まれ、同じResultsオブジェクトを返すmodel = LibreYOLO("LibreYOLO7b.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

チェックポイント

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

ファイル入力(px)重みのライセンス
Detection
LibreYOLO7b.pt640mit

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

ライセンス

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

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

原著作物
YOLOv7, MultimediaTechLab
アップストリームのライセンス
MIT
アップストリームのソース
github.com/MultimediaTechLab/YOLO
LibreYOLOのコード
MIT
重み
MIT、huggingface.co/LibreYOLOで再公開
解釈
MIT is a permissive license, so these weights can be used in commercial and closed-source products. The one standing obligation is to keep the license text and the copyright notice, Kin-Yiu Wong and Hao-Tang Tsui, with any copy you redistribute. It places no condition on your own application code, and a model you train yourself on your own data is yours. The port follows the authors' MIT re-release of YOLOv7, not the GPL-3.0 WongKinYiu/yolov7 repository that carries the same model, so the permissive terms come from the source LibreYOLO actually derives from.

引用

@inproceedings{wang2022yolov7,
      title={{YOLOv7}: Trainable Bag-of-Freebies Sets New State-of-the-Art for Real-Time Object Detectors},
      author={Wang, Chien-Yao and Bochkovskiy, Alexey and Liao, Hong-Yuan Mark},
      year={2023},
      booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
}

著者によるgithub.com/MultimediaTechLab/YOLO#citationsの引用ブロックからコピーしています。

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