> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ja/burokku/blocks/advanced-blocks/detections-difference.md).

# 検出差分

異なる時点で撮影された同じシーンの2つの検出結果セットを比較し、削除されたもの、残っているもの、新しいものを報告します。

典型的なユースケースは **クリーンアップの検証**: ごみが散らかった場所の「before」写真に検出器を実行し、清掃が完了したとされる後、ほぼ同じ視点から撮影した「after」写真でもう一度実行します。「before」画像で検出されたが「after」画像で一致しないものは `削除された` - 清掃が実際に行われたことの証拠です。同じパターンは、before/after のあらゆる監査にも一般化できます。たとえば、棚の補充確認（どの商品がなくなった／現れたか）、建設現場や倉庫の巡回検査、駐車場の空き状況の差分、あるいは同じ画像に対する2つの異なるモデルの出力を比較して、オブジェクトレベルでどこが食い違っているかを確認する場合などです。

`reference_predictions` は「before」側のセット、 `candidate_predictions` は「after」側のセットです。各 reference 検出は、ペアごとのコストを最小化することで、候補検出1つまで（その逆も同様）に対応付けられます。

```
cost = spatial_weight * spatial_term (+ class_mismatch_penalty)
```

ここで `spatial_term` は `1 - IoU` 重なっているボックスでは `1 + d`、ここで `d` は、2つのボックスを最小で囲む外接ボックスの対角線で正規化した中心距離です。そのため、重なりのあるペアは常に重なりのないペアより安く、重なりのないペア同士は近さで順位付けされます。クラスのペナルティは、2つの検出のクラスが異なる場合に適用されます。 `class_strict` が有効な場合、クラスをまたぐマッチングは禁止されます。コストが `reject_cost` を超える一致済みペアは破棄され、ペアの両側は未一致の削除／出現として扱われます。

出力： `removed_detections` （未一致の reference 検出、 *reference* 画像の座標系における）、 `persisted_detections` と `new_detections` （一致済み／未一致の candidate 検出、 *candidate* 画像の座標系における）、対応する件数、そして `verified` フラグ。reference セットが空でなく、かつ少なくとも `min_removed_to_verify` 件の検出が削除された場合に true になります。

このブロックは [`roboflow_core/overlap_analysis@v1`](/workflows/ja/burokku/blocks/advanced-blocks/overlap-analysis.md)の時系列版であり、同じ *same* 画像から得られた2つの検出セットを幾何学的に関連付けます。これに対し、このブロックは同じシーンの2枚の画像をまたいで検出を1対1に対応付け、集合差を報告します。

### タイプ識別子

ステップの `"type"` フィールドには次の識別子を使用してください： `roboflow_core/detections_difference@v1` ワークフローのステップとしてブロックを追加するために使用します。

### プロパティ

| **名前**                   | **型**   | **説明**                                                                                                | 参照 |
| ------------------------ | ------- | ----------------------------------------------------------------------------------------------------- | -- |
| `name`                   | `str`   | このステップに一意の識別子を入力してください。                                                                               | ❌  |
| `spatial_weight`         | `float` | マッチングコストにおける空間項の重み。空間項は `1 - IoU` 重なっているボックスでは `1 + 正規化された中心距離` 重なっていないボックスでは です。そのため、値域は \[0, 2) です。 | ✅  |
| `class_mismatch_penalty` | `float` | 検出のクラスが異なるペアに追加されるコストです。 `class_strict` class\_strict                                                 | ✅  |
| `reject_cost`            | `float` | この値を超えるマッチングコストを持つペアは一致しません。その場合、両方の検出はそれぞれ削除／新規として報告されます。                                            | ✅  |
| `class_strict`           | `bool`  | 有効にすると、空間的にどれだけ近くても、異なるクラスの検出は絶対に一致しません。                                                              | ✅  |
| `min_removed_to_verify`  | `int`   | verified `verified` の出力を true にするために必要な、削除された検出の最小件数（空でない reference セットと併せて）。                         | ✅  |

この **参照** 列は、workflow runtime で利用可能な動的値でこのプロパティをパラメータ化できるかどうかを示します。詳細は Bindings を参照してください。 `workflow` runtime. See *Bindings* for more info.

### Input and Output Bindings

利用可能な接続は、バインディング種別によって異なります。 `検出差分` のバージョン `v1` があります。

<details>

<summary>入出力バインディング</summary>

* 入力
  * `reference_predictions` ([*`object_detection_prediction`*](/workflows/ja/gaido/developer-guide/kinds/object-detection-prediction.md)): reference（「before」）画像の検出結果。reference 検出のうち、 `candidate_predictions` では一致させられないものは `removed_detections`..
  * `candidate_predictions` ([*`object_detection_prediction`*](/workflows/ja/gaido/developer-guide/kinds/object-detection-prediction.md)): candidate（「after」）画像の検出結果。reference 検出に一致した candidate 検出は `persisted_detections`として報告されます。未一致のものは `new_detections`..
  * `spatial_weight` ([*`float_zero_to_one`*](/workflows/ja/gaido/developer-guide/kinds/float-zero-to-one.md)): マッチングコストにおける空間項の重み。空間項は `1 - IoU` 重なっているボックスでは `1 + 正規化された中心距離` 重なっていないボックスでは です。そのため、値域は \[0, 2) です。
  * `class_mismatch_penalty` ([*`float`*](/workflows/ja/gaido/developer-guide/kinds/float.md)): 検出のクラスが異なるペアに追加されるコストです。 `class_strict` class\_strict
  * `reject_cost` ([*`float`*](/workflows/ja/gaido/developer-guide/kinds/float.md)): この値を超えるマッチングコストを持つペアは一致しません。その場合、両方の検出はそれぞれ削除／新規として報告されます。
  * `class_strict` ([*`boolean`*](/workflows/ja/gaido/developer-guide/kinds/boolean.md)): 有効にすると、空間的にどれだけ近くても、異なるクラスの検出は絶対に一致しません。
  * `min_removed_to_verify` ([*`integer`*](/workflows/ja/gaido/developer-guide/kinds/integer.md)): 削除された検出の必要最小件数（空でない reference セットと合わせて）について、 `verified` の出力を true にするために必要な、削除された検出の最小件数（空でない reference セットと併せて）。
* 出力
  * `removed_detections` ([`object_detection_prediction`](/workflows/ja/gaido/developer-guide/kinds/object-detection-prediction.md)): 検出されたバウンディングボックスを含む、sv.Detections(...) オブジェクト形式の予測。
  * `persisted_detections` ([`object_detection_prediction`](/workflows/ja/gaido/developer-guide/kinds/object-detection-prediction.md)): 検出されたバウンディングボックスを含む、sv.Detections(...) オブジェクト形式の予測。
  * `new_detections` ([`object_detection_prediction`](/workflows/ja/gaido/developer-guide/kinds/object-detection-prediction.md)): 検出されたバウンディングボックスを含む、sv.Detections(...) オブジェクト形式の予測。
  * `removed_count` ([`integer`](/workflows/ja/gaido/developer-guide/kinds/integer.md)): 整数値。
  * `new_count` ([`integer`](/workflows/ja/gaido/developer-guide/kinds/integer.md)): 整数値。
  * `verified` ([`boolean`](/workflows/ja/gaido/developer-guide/kinds/boolean.md)): ブールフラグ。

</details>

<details>

<summary>JSON 定義の例</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/detections_difference@v1",
	    "reference_predictions": "$steps.before_model.predictions",
	    "candidate_predictions": "$steps.after_model.predictions",
	    "spatial_weight": 0.4,
	    "class_mismatch_penalty": 0.15,
	    "reject_cost": 0.75,
	    "class_strict": false,
	    "min_removed_to_verify": 1
	}
```

</details>
