FCN
検出器の全結合層を畳み込みに置き換えた密なピクセル単位の分類器で、ボックスの代わりにフル解像度のクラスマップを出力します。LibreYOLOはセマンティックセグメンテーション専用で提供します。
- タスク
- semantic
- サイズ
- r50, r101 at 520 px
- インストール
pip install libreyolo- サポートティア
- 推論のみ、v以降。推論、検証、エクスポートのみです。学習機能は対象外です。
- ライセンス
- コード:BSD-3-Clause、重み:BSD-3-Clause。商用利用
インストール
FCNに任意の追加パッケージは必要ありません。インポートするものはすべて基本インストールに含まれます。
pip install libreyolo推論
重みは初回使用時にHugging Faceからダウンロードされ、ローカルにキャッシュされます。
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreFCNr50.pt")result = model(SAMPLE_IMAGE, save=True) mask = result.semantic_maskprint(mask.data.shape) # (H, W)クラスIDprint(mask.classes) # 画像内に存在するクラスIDをソートlibreyolo predict model=LibreFCNr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Trueセマンティックセグメンテーションはボックスではなく、ピクセルごとに1個のクラスIDを返します。
result.semantic_maskの.dataには(H, W)配列、.classesには画像内に存在するクラスIDの
一覧が入ります。conf、iou、max_detはAPIの一貫性のため受け付けますが、効果はありません。
モデルはargmaxで各ピクセルへクラスを割り当て、信頼度のしきい値処理もNMS処理も行わないためです。
入力ソース、ストリーミング、結果の処理については推論を参照してください。
バリアント
ResNetの深さは2種類で、どちらも固定520 px入力です。ライブラリの推論グラフはtorchvisionの dilated-ResNet FCNで、元の論文にあるskip connection付きのVGGベースFCN-8sネットワークでは ありません。
LibreYOLOはFCNを学習しません。このファミリーでtrain()を呼び出すとNotImplementedErrorが
発生し、上記のサポート層でも推論専用と示されています。公開されている2個の
チェックポイントは、torchvision独自のCOCO学習済み重みをLibreYOLOのローダー向けに変換したものです。
検証
val()は、学習に使った形式の任意のデータセットに対して測定したmetrics/mIoUと
metrics/pixel_accuracyを返します。
from libreyolo import LibreYOLO model = LibreYOLO("LibreFCNr50.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mIoU"])print(metrics["metrics/pixel_accuracy"])libreyolo val model=LibreFCNr50.pt data=my-dataset.yamlエクスポート
| タスク | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| semantic | semantic to ONNX:対応 | semantic to TorchScript:対応 | semantic to ExecuTorch:非対応 | semantic to TensorRT:対応 | semantic to OpenVINO:対応 | semantic to Paddle:非対応 | semantic to MNN:非対応 | semantic to RKNN:非対応 | semantic to ncnn:非対応 | semantic to TFLite:非対応 | semantic to CoreML:非対応 | semantic to Core AI:非対応 |
エクスポートした成果物はファイル接尾辞に基づいてLibreYOLO()から再読み込みされます。そのため、
.onnxまたは.engineファイルはチェックポイントと同様に動作し、同じResultsを返します。
エクスポートには各形式が受け付ける引数の一覧があります。
from libreyolo import LibreYOLO model = LibreYOLO("LibreFCNr50.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreFCNr50.pt format=onnxlibreyolo export model=LibreFCNr50.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリがファイル接尾辞で振り分けるため、エクスポートした成果物も# 通常のチェックポイントと同様に読み込まれ、同じResultsオブジェクトを返すmodel = LibreYOLO("LibreFCNr50.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)チェックポイント
このファミリーで公開されているすべての重みファイルです。
| ファイル | 入力(px) | 重みのライセンス |
|---|---|---|
| semantic | ||
| LibreFCNr50.pt | 520 | bsd-3-clause |
| LibreFCNr101.pt | 520 | bsd-3-clause |
上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- FCN, 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 and these weights can be used in commercial and closed-source products. It asks you to keep the copyright notice, license text and a non-endorsement clause with any copy you redistribute. LibreYOLO's inference graph is torchvision's dilated-ResNet FCN, not the original VGG-based FCN-8s skip-fusion network from the paper. The two published checkpoints are torchvision's official COCO-trained weights; their separate LibreYOLO Hugging Face mirrors carry BSD-3-Clause on an implied basis disclosed by torchvision rather than an explicit checkpoint-specific grant, and torchvision's own documentation notes that pretrained-model terms can depend on the training data, leaving that determination to the user.