Markdownで表示

Mask R-CNN

Mask R-CNNはFaster R-CNNへ領域ごとのマスク分岐を追加し、検出した各ボックスとともにセグメンテーションマスクを予測します。LibreYOLOは検出とインスタンスセグメンテーション向けにtorchvision実装を移植しています。

タスク
detection, instance segmentation
サイズ
r50 at 800 px
インストール
pip install libreyolo
サポートティア
推論のみ、v以降。推論、検証、エクスポートのみです。学習機能は対象外です。
アップストリーム
PyTorchのMask R-CNN、BSD-3-Clause。論文ソース
ライセンス
コード:BSD-3-Clause、重み:BSD-3-Clause。商用利用

インストール

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

bash
pip install libreyolo

推論

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

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreMaskRCNNr50.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreMaskRCNNr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
ボックスのみ
from libreyolo import LibreYOLO, SAMPLE_IMAGE # task="detect"でマスクヘッドを省略し同じチェックポイントから# ボックスを返す 結果にマスクはないmodel = LibreYOLO("LibreMaskRCNNr50.pt", task="detect")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

返される Results オブジェクトはすべてのファミリーで共通のため、別の検出器への置き換えは1行の変更で済みます。task 引数なしでチェックポイントを読み込むと、インスタンスマスクを返します。セグメンテーションがこのファミリーのデフォルトタスクであるためです。その場合、result.masks はボックスとともにマスクを保持します。task="detect" を渡すとマスクヘッドなしで同じ重みを読み込み、ボックスだけを返します。confiou は信頼度とNMSのしきい値を設定します。クエリベース検出器とは異なり、Mask R-CNNはアップストリームのNMS処理を維持します。ソース、ストリーミング、結果の処理については、推論を参照してください。

バリアント

バックボーンは1つです。特徴ピラミッドを持つResNet-50で、torchvisionのv2 Mask R-CNNビルダーを使用します。公開チェックポイントにはBSD-3-Clauseライセンスが適用され、このファミリーの両方のタスクを提供します。そのため、選択するサイズはありません。

検証

val()metrics/ キーの辞書を返します。このチェックポイントのデフォルトのセグメンテーションタスクに対し、通常の metrics/mAP50-95 キーがマスクスコアを保持し、同じ実行で (B) 接尾辞の下にボックスも報告されます。そのため、1回の処理で両方を利用できます。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])      # マスクprint(metrics["metrics/mAP50-95(B)"])   # ボックス
CLI
libreyolo val model=LibreMaskRCNNr50.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:非対応
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:非対応

Mask R-CNNはバッチサイズ1でONNXだけにエクスポートできます。エクスポート済みグラフはアップストリームのリサイズ処理とマスク貼り付け処理を内部に保持するため、LibreYOLOは指定内容にかかわらず dynamic=True を強制し、正方形でないソースでもグラフが有効になるようにします。エクスポート済み .onnx ファイルは、ファイル接尾辞によって LibreYOLO() から再度読み込まれ、同じ Results を返します。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")model.export(format="onnx", imgsz=800)
CLI
libreyolo export model=LibreMaskRCNNr50.pt format=onnx imgsz=800
エクスポートしたファイルを使う
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイル接尾辞で振り分けるためエクスポート済み成果物も# チェックポイントと同様に読み込まれて同じResultsオブジェクトを返すmodel = LibreYOLO("LibreMaskRCNNr50.onnx")result = model(SAMPLE_IMAGE) print(result.masks.data.shape)

チェックポイント

このファミリーで公開されているすべての重みファイルです。次の1つのチェックポイントはdetectの下に記載されていますが、同じファイルをセグメンテーションにも読み込めます。task 引数を渡さなければ、デフォルトでマスクを返します。

ファイル入力(px)重みのライセンス
Detection
LibreMaskRCNNr50.pt800bsd-3-clause

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

ライセンス

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

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

原著作物
Mask R-CNN, PyTorch
アップストリームのライセンス
BSD-3-Clause
アップストリームのソース
github.com/pytorch/vision
LibreYOLOのコード
MIT
重み
BSD-3-Clause、huggingface.co/LibreYOLOで再公開
解釈
BSD-3-Clause is a permissive license, so this code can be used in commercial and closed-source products with no obligation on your own application code. It asks only that you keep the copyright notice and disclaimer with any copy you redistribute, and it carries no patent grant. The published checkpoint used for parity testing is not distributed in the LibreYOLO source tree: torchvision's own documentation notes that a pretrained model's terms may depend on its training data, so the Hugging Face mirror ships the BSD text on that implied basis and repeats the caveat rather than issuing an explicit checkpoint-specific grant.

Mask R-CNNはLibreYOLOのFaster R-CNNラッパーのサブクラスとして構築されています。同じtorchvisionソースとBSD-3-Clauseライセンスを共有し、同じ移植元コミットのマスク予測器とマスクRoIヘッドを追加します。

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