Resultsの型

Resultsは、すべてのLibreYOLOモデルが画像ごとに返す単一の型です。タスク形状ごとに1つ、合計18個のオプションのペイロードスロットを持ち、モデルが生成したものだけを格納します。

Resultsオブジェクト

1つのResultsが1枚の画像を表します。単一画像のソースは1つ、リストのソースまたは ディレクトリはリストを返し、stream=Trueはそれらを生成するジェネレーターを返します。

属性意味
orig_shape(int, int)元画像の高さと幅
pathstr入力がディスク由来の場合のソースパス
namesdict[int, str]クラスインデックスからクラス名への対応
speeddict[str, float]ステージごとのミリ秒
track_idtensor結果がtrack()由来の場合のトラックID
frame_idxint動画およびストリームソースのフレームインデックス
restore_scaleint復元結果の出力対入力アップスケール係数。他ではすべて1

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9t.pt")result = model(SAMPLE_IMAGE) print(result.orig_shape, result.path)print(result.boxes.xyxy)print(result.boxes.conf)print(result.names[int(result.boxes.cls[0])])

ペイロードスロット

モデルが生成しない限り、各スロットはNoneです。ファミリーが埋めるスロットは、そのタスクに よって決まります。

スロットクラスタスク
boxesBoxesdetect
masksMaskssegment
keypointsKeypointspose
probsProbsclassify
obbOBBobb
gazeGazegaze
pointsPointspoint
semantic_maskSemanticMasksemantic
panopticPanopticSegmentationpanoptic
depth_mapDepthMapdepth
normal_mapNormalMapnormal
edgesEdgeMapedge
restoredRestoredImagerestore
matteMattematte
ocrOCRRegionsocr
embeddingsEmbeddingsembed
identitiesIdentitiesgalleryを伴うembed
meshesMeshesmesh

result.normalsresult.normal_mapの読み書き可能な別名です。

複数のスロットを同時に設定できます。セグメンテーションモデルはboxesmasksの両方を 埋めます。視線モデルは顔のボックスをboxesに、角度をgazeに格納します。メッシュモデルは 人物ボックスをboxesに格納し、それと行を対応させてmeshesを埋めます。

Boxes

1枚の画像に対する検出ボックス。

メンバー戻り値
xyxy元画像のピクセル単位の隅座標
xywhピクセル単位の中心とサイズ
xyxyn[0, 1]に正規化された隅座標
xywhn[0, 1]に正規化された中心とサイズ
confボックスごとの信頼度
clsボックスごとのクラスインデックス
idボックスごとのトラックID、またはNone
is_trackトラックIDがある場合はTrue
dataパック済みテンソル

with_id(id)with_orig_shape(orig_shape)は、該当フィールドを置き換えた新しいBoxesを 返します。

Masks

1枚の画像に対するインスタンスマスク。dataはマスクテンソルです。xyはインスタンスごとの 輪郭をピクセル単位で返し、xynは正規化して返します。

Keypoints

boxesと行が対応する姿勢キーポイント。xyはキーポイントごとの座標ペア、xynは正規化済み ペアです。データに第3チャンネルがあればconfはその値、なければNoneです。has_visibleは ブール配列で、conf > 0の位置がtrueになり、信頼度チャンネルがない場合はすべてtrueです。

Points

1枚の画像に対する点の位置特定。dataの形状は(N, 4)で、各行はx, y, class, confidenceです。 座標は絶対ピクセルです。xyclsconfが各列を分け、xynが座標を正規化します。

Probs

分類スコア。top1は最上位のインデックス、top5は上位5件のインデックス、top1conftop5confはそれぞれのスコアです。

OBB

回転ボックス。dataは行ごとに7個または8個の値を保持します:xywhr、オプションの トラックID、信頼度、クラスの順です。

メンバー戻り値
xywhr中心、サイズ、ラジアン単位の回転
xyxyxyxyピクセル単位の4つの隅
xyxyxyxyn正規化された4つの隅
xyxyピクセル単位の軸平行外接矩形
conf, cls, id, is_trackBoxesと同じ

Gaze

顔ごとのラジアン単位の視線角度で、形状は(N, 2)boxesの顔ボックスと行が対応します。 L2CSの規約に従い、列0はピッチ、列1はヨーです。正のヨーは被写体から見て左へ視線を回転させ、 正のピッチは下へ回転させます。pitch_degyaw_degは度へ変換し、direction_3dは単位方向 ベクトルを返します。

SemanticMask

元画像のキャンバス上にある、整数クラスIDの密なセマンティックマップで、形状は(H, W)です。 255は無視する値であり、クラスとして数えられることはありません (SemanticMask.IGNORE_INDEX)。classesは存在するクラスIDを一覧化し、 class_mask(class_id)は1つのクラスに対するブールマスクを返します。

PanopticSegmentation

すべてのピクセルに重複しないセグメントをちょうど1つ割り当て、stuff領域とthingインスタンスを 統合します。data(H, W)の整数セグメントIDマップです。セグメントID0はラベルなしを 表します(PanopticSegmentation.IGNORE_INDEX)。segments_infoはセグメントごとに1つの dictを持つリストで、それぞれ少なくとも{"id": int, "category_id": int}を含みます。 ここでidはマップ内の値に一致し、category_idnamesのインデックスです。 segment_idsは存在するIDを一覧化し、segment_mask(segment_id)は1つのセグメントの ブールマスクを返します。

thingとstuffの区別はセグメントではなくカテゴリーのプロパティです。ペイロードはそれを "isthing": boolとして各セグメントへ非正規化する場合があり、その場合、値はカテゴリー レベルのマップと一致する必要があります。

DepthMap

元画像のキャンバス上にある、浮動小数点数の密な相対逆深度マップで、形状は(H, W)です。 値が大きいほどカメラに近いことを意味します。値は相対値であり、メートル単位の実測値では ありません。minmaxmeanは有限値に対して計算され、normalized()はマップを [0, 1]に再スケーリングします。

NormalMap

元画像のキャンバス上にある、float32の密な表面法線フィールドです。形状は(H, W, 3)で、 OpenCVのカメラ座標系を使います:+xは右、+yは下、+zはシーンの奥です。法線はカメラを 向くため、正面に平行な面は(0, 0, -1)です。すべてのピクセルは単位ベクトルです。 assert_normalized(atol=1e-4)はこの不変条件を確認します。

EdgeMap

元画像のキャンバス上にある、float32の密なエッジ確率マップで、形状は(H, W)です。0は 非エッジ、1はエッジです。しきい値を呼び出し元が選べるよう、連続値マップが保持されます。 binary(threshold=0.5)がしきい値を適用し、arrayはnumpyビューを返します。

RestoredImage

復元されたRGB画像で、形式は(H, W, 3)のuint8です。超解像では、キャンバスは入力の Results.restore_scale倍になります。arrayはnumpyビューを返し、save(path)は画像を 書き出します。

Matte

元画像のキャンバス上にある、[0, 1]範囲のfloat32によるソフト不透明度マットで、形状は (H, W)です。1は完全な前景、0は完全な背景です。ソフトマットは0.5でしきい値処理した 強制的な背景除去マスクを包含し、バイナリマスクでは失われるアンチエイリアス処理済みの境界を 保持します。arrayはnumpyビューを返します。

マットの結果では、Results.cutout(image=None)が第4チャンネルをマットとするRGBAの (H, W, 4) uint8配列を返し、Results.save(path, image=None)がその切り抜きを透明背景の PNGとして書き出します。どちらもimageが指定されていればそこからRGBを取得し、それ以外は Results.pathから再読み込みします。

OCRRegions

位置が特定されたテキストと転記。dataは元画像のピクセル単位による(N, 4, 2)の浮動小数点 ポリゴンで、左上、右上、右下、左下の順です。領域は上から下、次に左から右という読み順で 並びます。textsはN個の転記のリストです。confは領域ごとの認識スコア、det_confは 検出スコアで、どちらも形状は(N,)です。

検出四角形は実際のポリゴンであるため、Results.boxesには格納されません。xyxyは軸平行の 外接矩形を返します。

Embeddings

embedタスクのL2正規化済みベクトルで、形状は常に(N, D)です。画像全体の結果は1行を持ち、 ボックスはありません。領域の埋め込みベクトルはboxesと行が対応します。各行は正規化されて いるため、コサイン類似度はドット積になります。

メンバー戻り値
dimD
normalized再正規化された行
similarity(other)別のEmbeddingsまたはテンソルに対するペア単位のコサイン類似度
verify(i, j, threshold=0.4)ijが一致する場合はTrue

Identities

embeddingsと行が対応する、名前付きギャラリーとの一致結果。Galleryembed推論に渡すと 生成されます。nameはリストで、一致のしきい値を下回る項目はNoneです。しきい値を下回る 最も近い名前が推測されることはありません。scoreは一致スコアの配列で、dataは名前と スコアをペアにします。

Meshes

boxesの人物ボックスと行が対応する、パラメトリックな人体メッシュ。すべて元画像のカメラ 座標系にあります。translはメートル単位の実測値で、+zはカメラから遠ざかる方向です。 verticesjoints3dは実測値で、すでにtranslを含みます。joints2dはネットワークが 入力した切り抜きではなく、元画像のキャンバス上のピクセル単位です。ワールド座標系や重力 座標系を持つフィールドはありません。

パラメータの配置は人体モデルごとに異なるため、形状についてハードコードされているものは ありません。body_modelがパラメータ化方式を示し、num_verticesnum_jointsnum_betashas_verticesの数値はテンソルから読み取られます。paramsはパラメータの dictを返し、save_obj(path, index=0)は1つのメッシュを書き出します。フィールドは global_orientbody_posebetastranslverticesfacesjoints3djoints2dconffocal_lengthextrasです。

body_model="mhr"の場合、回転は軸角ではなくラジアン単位のオイラー角です。body_poseは 関節ごとの3要素ではなく、関節ごとの平坦なパラメータベクトルで、betasは人物識別用の ブレンドシェイプ係数です。骨格スケール、手の姿勢、顔の表情はextrasに格納されます。

変換と選択

すべてのペイロードはto(*args, **kwargs)cpu()cuda()numpy()を持ちます。 Resultsでいずれかを呼び出すと、格納済みのすべてのスロットへ一度に適用されます。

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9t.pt")result = model(SAMPLE_IMAGE) # すべてのペイロードをまとめて移動result = result.cpu().numpy() # 行を通常のdictで取得し、次にJSONへ変換print(result.summary()[:1])print(result.to_json())

result[idx]は、行が対応するペイロード全体から行を選択します。len(result)は検出数で、 ボックスがなければ点の数です。result.update(...)は指定したスロットを置き換えたコピーを 返します。すべてのスロットに加えて、track_idrestore_scaleを受け入れます。

summaryとto_json

summary(normalize=False, decimals=5, embeddings=False)は通常のdictのリストを返します。 どのスロットが設定されているかに応じて、検出、セグメント、点、または領域ごとに1行です。 to_json(**kwargs)は引数をsummaryへ渡し、JSON文字列を返します。

plot()は密な法線またはエッジの結果を標準の可視化形式でレンダリングします。他の結果型では 例外を発生させます。その他のタスクのアノテーション付き画像はpredict(save=True)で 生成されます。

v1.5.0のlibreyolo/utils/results.pyからスロット名、形状、プロパティ、デフォルト値を確認しました。意味はペイロードクラスのdocstringから引用しました。