YOLOv7
YOLOv7はアンカーベースの1段階検出器で、ヘッドは最終畳み込みの前に学習済みimplicit knowledge offsetを加えます。LibreYOLOは、公開されている1つのサイズを物体検出でサポートします。
- タスク
- detection
- サイズ
- b at 640 px
- インストール
pip install libreyolo- サポートティア
- サポート対象、v以降。補助的な学習可能モデル:CIで正常な状態を維持し、機能は機会に応じて追加されます。
- ライセンス
- コード:MIT、重み:MIT。商用利用
インストール
YOLOv7に基本パッケージ以外の追加パッケージは必要ありません。
pip install libreyolo推論
重みは初回使用時にHugging Faceからダウンロードされ、ローカルにキャッシュされます。
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)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つだけなので、選択するサイズはありません。
学習
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \ epochs=300 imgsz=640 batch=16 lr0=0.01from 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=True と pretrained は併用できません。デフォルトの 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/ キーの辞書を返します。
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLO7b.pt data=my-dataset.yamlエクスポート
| タスク | 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:対応 |
エクスポート済み成果物はファイル接尾辞に基づいて LibreYOLO() から再度読み込めます。そのため、.onnx または .engine ファイルはチェックポイントと同様に動作し、同じ Results を返します。LibreYOLOをインストールしていない単独のランタイムでグラフを実行することもできますが、その場合は前処理と後処理を自身で記述する必要があります。
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.pt format=tensorrt imgsz=640 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイル接尾辞で経路を選ぶため、エクスポート済み成果物も# 通常のチェックポイントと同様に読み込まれ、同じResultsオブジェクトを返すmodel = LibreYOLO("LibreYOLO7b.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)チェックポイント
このファミリーで公開されているすべての重みファイルです。
| ファイル | 入力(px) | 重みのライセンス |
|---|---|---|
| Detection | ||
| LibreYOLO7b.pt | 640 | mit |
上記のすべてのファイルは現在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の引用ブロックからコピーしています。