検出クラス置換
検出のクラスを、連結された分類モデルで予測されたクラスに置き換えます。
検出バウンディングボックスのクラスラベルを、切り出した領域に適用した分類モデルが予測したクラスで置き換え、汎用的な検出結果と特化した分類予測を組み合わせて、2段階検出ワークフロー、きめ細かな分類、および、汎用検出を特化分類器の具体的なクラスラベルで精緻化するクラス精緻化ワークフローを実現します。
このブロックの仕組み
このブロックは、検出モデル(バウンディングボックスと汎用クラス)からの結果と、分類予測(切り出した領域に適用した特化分類器からのもの)を組み合わせて、汎用クラスラベルを具体的なものに置き換えます。このブロックは、
異なる次元レベルの2つの入力を受け取ります:
object_detection_predictions:検出結果(次元レベル1)で、汎用クラス(例:「dog」「person」「vehicle」)を含むバウンディングボックスを持ちますclassification_predictions:各検出の切り出し領域に適用した分類器からの分類結果(次元レベル2)(例:dog検出に対する「Golden Retriever」「Labrador」)。文字列のリスト(例:OCR)でもかまいません。
分類を検出に対応付けます:
使用します
PARENT_ID_KEY(detection_id)を分類予測内で使用して、各分類結果を元の検出にリンクします。あるいは、親IDを持たない生の文字列/リストである場合は、位置対応(順序ベース)を使用します。
各分類予測から先頭のクラスを抽出します:
単一ラベル分類の場合:
分類結果の「top」クラス(予測クラス)を使用します
分類予測からクラス名、クラスID、信頼度を抽出します
複数ラベル分類の場合:
最も高い信頼度スコアのクラスを見つけます
最も信頼度の高いラベルを置換クラスとして使用します
最も信頼度の高い予測からクラス名、クラスID、信頼度を抽出します
文字列予測の場合:
その文字列をクラス名として使用します
デフォルトの信頼度1.0とクラスID 0を割り当てます
分類が欠落している場合を処理します:
対応する分類予測のない検出は、デフォルトでは破棄されます
もし
fallback_class_nameが指定されている場合、分類のない検出は破棄されず、代替クラスを使用します代替クラスIDは指定された値に設定されるか、
sys.maxsize未指定または負の値の場合は
検出をフィルタします:
分類結果を持つ検出(または指定されている場合は代替クラス)だけを保持します
分類予測に対応付けできない検出を削除します
クラス情報を置き換えます:
検出内のクラス名を分類のクラス名で置き換えます
検出内のクラスIDを分類のクラスIDで置き換えます
検出内の信頼度スコアを分類の信頼度スコアで置き換えます
新しいクラス情報を反映するように、すべての検出メタデータを更新します
新しい検出IDを生成します:
更新された検出用に新しい一意の検出IDを作成します(IDの競合を防ぎます)
クラス置換後に検出IDが一意になるようにします
更新された検出を返します:
クラスを置き換えた検出を出力し、バウンディングボックス座標やその他の属性は維持します
出力の次元は入力の検出予測(次元レベル1)と一致します
このブロックは、汎用的な検出モデルが対象物を見つけ、特化した分類モデルがきめ細かなラベルを付与する2段階検出ワークフローを可能にします。これは、空間情報を失うことなく、汎用的な位置特定(例:「dog」)と具体的な分類(例:「Golden Retriever」「German Shepherd」)を組み合わせたい場合に有用です。
一般的な使用例
2段階検出と分類:汎用検出と特化分類を組み合わせて、きめ細かなラベリングを行います(例:「dog」を検出して犬種を分類、「vehicle」を検出して種類を分類、「person」を検出して年齢層を分類)し、2段階検出ワークフローを実現します
クラス精緻化:特化モデルによる具体的な分類で汎用クラスラベルを精緻化します(例:「animal」を特定の種に、「vehicle」を特定のモデルに、「food」を特定の料理に精緻化)し、クラス精緻化ワークフローを実現します
マルチモデルワークフロー:検出モデルと分類モデルを組み合わせて両者の強みを活かします(例:位置特定には汎用検出器を、識別には専門分類器を使用する、粗いモデルときめ細かなモデルを組み合わせる、汎用検出器と特化分類器を活用する)し、マルチモデルワークフローを実現します
階層分類:検出が上位クラスを提供し、分類が詳細な下位クラスを提供する階層分類を適用します(例:「mammal」を検出して種を分類、「plant」を検出して品種を分類、「structure」を検出して種類を分類)し、階層分類ワークフローを実現します
切り出しベース分類:切り出した領域の分類結果を使用して検出結果を強化します(例:切り出しを分類して検出ラベルを改善する、検出領域に特化分類器を適用する、切り出し分類で検出を精緻化する)し、切り出しベース分類ワークフローを実現します
きめ細かな対象認識:位置特定と詳細分類を組み合わせることで、きめ細かな認識を可能にします(例:特定の製品モデルを認識する、特定の動物の品種を識別する、特定の車両タイプを分類する)し、きめ細かな認識ワークフローを実現します
他のブロックへの接続
このブロックは検出予測と分類予測を受け取り、クラスを置き換えた検出を生成します:
検出および分類モデルブロックの後 汎用検出と特化分類を組み合わせます(例:オブジェクト検出+分類で精緻化された検出、検出モデル+分類器でラベル付き検出)し、検出・分類融合ワークフローを実現します
切り出しブロックの後 検出から切り出しを作成して分類するブロック(例:検出を切り出してから切り出しを分類する、分類用の切り出しを作成してからクラスを置き換える)で、切り出し分類ワークフローを実現します
可視化ブロックの前で 精緻化されたクラスの検出を表示するため(例:精緻化された検出を可視化する、具体的なラベル付きの検出を表示する、分類で強化された検出を示す)に使用し、精緻化検出の可視化ワークフローを実現します
フィルタリングブロックの前 精緻化されたクラスの検出をフィルタするため(例:特定クラスでフィルタする、精緻化された検出をフィルタする、分類済み検出にフィルタを適用する)に使用し、精緻化検出のフィルタリングワークフローを実現します
分析ブロックの前で 精緻化された検出に対して分析を行うため(例:特定クラスを分析する、分類済み検出を分析する、精緻化された検出メトリクスを追跡する)に使用し、精緻化検出の分析ワークフローを実現します
ワークフロー出力で 精緻化された検出を最終出力として提供するため(例:2段階検出の出力、分類で強化された検出の出力、精緻化された検出結果)に使用し、精緻化検出の出力ワークフローを実現します
要件
このブロックは、オブジェクト検出予測(バウンディングボックス付き)と、それらのバウンディングボックスの切り出しから得られた分類予測を必要とします。分類予測には PARENT_ID_KEY (detection_id)が必要で、分類を元の検出にリンクします。このブロックは異なる次元レベルを受け付けます:検出予測はレベル1、分類予測はレベル2(切り出し由来)です。単一ラベル分類では「top」クラスが使用されます。複数ラベル分類では、最も信頼度の高いクラスが選択されます。分類結果のない検出は、 fallback_class_name が提供されない限り破棄されます。このブロックは、クラス、クラスID、信頼度を置き換えた検出を出力し、新しい検出IDを生成します。出力の次元は入力の検出予測(レベル1)と一致します。
種別識別子
ステップで次の識別子を使用します "type" フィールド: roboflow_core/detections_classes_replacement@v1 ワークフローにステップとしてブロックを追加するには。
プロパティ
名前
型
説明
参照
name
str
このステップの一意の識別子を入力してください。
❌
fallback_class_name
str
対応する分類予測のない検出に使用する、任意のクラス名です。指定しない場合(既定値 None)、分類のない検出は破棄されます。指定した場合、分類のない検出は削除されず、この代替クラス名を使用します。分類に失敗した場合や利用できない場合に検出を保持するのに便利です。
✅
fallback_class_id
int
分類予測のない検出に対して fallback_class_name と併用する任意のクラスIDです。未指定または負の値の場合、クラスIDは sys.maxsize に設定されます。fallback_class_name が指定されている場合にのみ使用されます。モデルで使用しているクラスIDマッピングと一致している必要があります。
✅
この 参照 列は、で利用可能な動的値を使用してプロパティをパラメータ化できる可能性を示します ワークフロー 実行時。参照 バインディング 詳細情報
入出力バインディング
利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が 検出クラス置換 のバージョン v1 持つか確認してください。
入出力バインディング
入力
object_detection_predictions(Union[instance_segmentation_prediction,keypoint_detection_prediction,object_detection_prediction]):汎用クラスラベルを含むバウンディングボックスを持つ検出予測(オブジェクト検出、インスタンスセグメンテーション、またはキーポイント検出)で、分類結果に置き換えられます。これらの検出は、切り出されて分類された領域に対応している必要があります。検出には、分類予測内の PARENT_ID_KEY と一致する detection ID が必要です。次元レベル1の検出です。classification_predictions(Union[classification_prediction,list_of_values,string]):検出クラス名を置き換えるラベルです。分類予測(parent_id 経由でリンク)、通常の文字列、または文字列のリスト(例:Gemini のような OCR/LMM の出力)を受け付けます。文字列入力は検出に位置ベースで対応付けられます(インデックスごとの1:1対応)。分類入力は、単一ラベル('top' クラス)と複数ラベル(最も信頼度の高いクラス)をサポートします。fallback_class_name(string):対応する分類予測のない検出に使用する、任意のクラス名です。指定しない場合(既定値 None)、分類のない検出は破棄されます。指定した場合、分類のない検出は削除されず、この代替クラス名を使用します。分類に失敗した場合や利用できない場合に検出を保持するのに便利です。fallback_class_id(integer):分類予測のない検出に対して fallback_class_name と併用する任意のクラスIDです。未指定または負の値の場合、クラスIDは sys.maxsize に設定されます。fallback_class_name が指定されている場合にのみ使用されます。モデルで使用しているクラスIDマッピングと一致している必要があります。
出力
predictions(Union[object_detection_prediction,instance_segmentation_prediction,keypoint_detection_prediction]): 検出されたバウンディングボックスを含む予測。sv.Detections(...) オブジェクトの形式で、もしobject_detection_prediction): 検出されたバウンディングボックスとセグメンテーションマスクを含む予測。sv.Detections(...) オブジェクトの形式で、もしinstance_segmentation_predictionまたは、検出されたバウンディングボックスと検出されたキーポイントを sv.Detections(...) オブジェクトの形式で持つ予測。keypoint_detection_prediction.
最終更新
役に立ちましたか?