> 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/deployment/ja/to/model-monitoring.md).

# モデルモニタリング

## 概要

Roboflow のモデルモニタリングダッシュボードでは、プロトタイピングから本番運用まで、モデルに関する比類のない可視性を得られます。モデルモニタリングでは、モデルの経時的なパフォーマンスを把握するための高レベルな統計情報を表示したり、個々の推論リクエストを表示して、エッジケースでのモデルのパフォーマンスを確認したりできます。

{% hint style="info" %}
モデルモニタリング **は非推奨になります** および Vision Events に置き換えられます。詳細は [Vision Events のドキュメント](/deployment/ja/to/vision-events.md) をご覧ください。
{% endhint %}

## Web アプリ

### モデルモニタリングへのアクセス

モデルモニタリングは、［Models］ページのサブタブです。アクセスするには、ワークスペースのナビゲーションバーで［Models］ドロップダウンを開いて［Model Monitoring］を選択するか、［Models］ページの［Model Monitoring］タブに直接移動します。

### ワークスペースダッシュボード

すぐに、モデルに関する次の 3 つの統計情報が表示されます。

* **合計リクエスト数**：ワークスペース内のすべてのモデルに対して実行された推論の合計数
* **平均信頼度：** モデルによって行われたすべての予測における平均信頼度。
* **平均推論時間**：すべての推論における平均推論時間（画像の前処理を含め、予測の生成にかかった秒単位の時間）

<figure><img src="/files/7cf6062b1193b1742fb52cdb9267c2a7a8bd39f7" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
変化率の値は、現在の期間と前の期間の比較に基づいています。デフォルトでは、これらの統計情報には過去 1 週間のデータが表示されます。ただし、統計情報の上部にあるボタンを使用して期間を変更できます。

<img src="/files/cc66aadc98db2c4232e50d66962bfe2ccf8725a3" alt="" data-size="original">
{% endhint %}

［Models］テーブルには、推論が実行されたすべてのモデルが表示され、モデルをクリックすると [モデルダッシュボード](#model-dashboard).

<figure><img src="/files/63b8fe62d5c45737aae6e499bdd97cc3c2d2548c" alt=""><figcaption></figcaption></figure>

また、［Recent Inferences］（すべてのモデル対象）を表示するタブと、 [アラートを設定する](#alerting).

<figure><img src="/files/abea241ab733896a94bb0370f976fc6cf62ec5fa" alt="" width="375"><figcaption></figcaption></figure>

### モデルダッシュボード

［Models］タブでは、特定のモデルを選択してそのデータを表示できます。そこでは、ワークスペース概要と同じ統計情報が、1 つのモデルに特化して表示されます。

ここでは、統計情報に加えて、モデル内の各クラスの検出数を表示し、他のクラスとの分布を確認できます。

<figure><img src="/files/e5fedf0b493f425ec013e4ab405244b85a07443f" alt=""><figcaption></figcaption></figure>

テーブル右上の［See All Inferences］ボタンをクリックすると、 [推論テーブル](#inferences-table).

### 推論テーブル

ここでは、モデルのすべての予測結果を確認できます。さらに、推論に追加されたカスタムメタデータも表示されます。推論のサブセットを表示するには、テーブル右上のフィルターを使用できます。

<figure><img src="/files/69a98eba5807ba64a1085b618250139f7a24c8d6" alt=""><figcaption></figcaption></figure>

#### 推論の詳細

推論テーブルから、特定の推論を詳しく確認して詳細を表示できます。この画像に示されている順序で説明します。

<figure><img src="/files/2992d0139d7c989b65d40dc8e850f11c68b5e020" alt=""><figcaption></figcaption></figure>

1. **画像：** ここでは、推論された画像を確認できます。 *注：これはデフォルトでは有効になっていません。* [*推論画像を有効にする*](#enabling-inference-images)
2. **推論の詳細：** このパネルでは、推論リクエストに関するすべての詳細とプロパティを確認できます。デフォルトでは利用可能なすべてのフィールドが表示されますが、一部を非表示にしたい場合は、右上隅の［歯車］アイコンをクリックしてフィールドを非表示にできます。（この設定はブラウザに保存されます）
3. 一部のフィールドでは、利用可能な場合、そのフィールドに基づいて推論を検索するオプションがあります。強調表示された例では、同じモデルからの推論を検索します。
4. **検出結果：** この折りたたみ可能なペインには、その推論から受信した検出結果の一覧が表示されます。［Class］および［Confidence］のテーブルヘッダーをクリックして、テーブルの並べ替え順序を選択できます。
5. **ダウンロードおよびリンクボタン：** ここでは、推論に関連付けられた画像をダウンロードするか、後で参照するためにこの推論の詳細へのリンクをコピーできます。

#### 推論画像を有効にする

{% hint style="info" %}
Active Learning またはデータセットアップロードで保存された画像は、プロジェクトに画像をアップロードした場合と同様にカウントされます。プランの種類に応じて、クレジット、上限、またはクォータが消費される場合があります。
{% endhint %}

モデルモニタリングに推論画像を表示するには、2 つの方法があります。

* **Roboflow Dataset Upload ブロック：** Workflows では、［Roboflow Dataset Upload］ブロックを追加できます。予測と予測画像を接続すると、モデルモニタリングに表示されます。

<figure><img src="/files/51eea94297921326c89bfb67bc78fd7ec28d3a4f" alt="" width="151"><figcaption></figcaption></figure>

* **Active Learning：** を設定して [Active Learning](/deployment/ja/to/active-learning.md) プロジェクトからのルールにより、本番推論画像を自動的に収集できます。

<figure><img src="/files/7c9120e18159b340a7749eba4a14a5b51f63604f" alt="" width="198"><figcaption></figcaption></figure>

### アラート

モデルで問題や異常が発生した際に、あなたやチームの他のメンバーはリアルタイムアラートを購読できます。たとえば、モデルの信頼度が急激に低下した場合や、Inference Server が停止してモデルが実行されなくなった場合、チームにメール通知が送信されます。

アラートページの詳細をご覧ください：

{% content-ref url="/pages/09a8d3ae73c963be628ed23bfa1f5a9de8d89ac1" %}
[アラート](/deployment/ja/to/model-monitoring/alerting.md)
{% endcontent-ref %}

### カスタムメタデータ

推論に追加のメタデータを添付するには、モデルモニタリングのカスタムメタデータ機能を使用できます。カスタムメタデータを使用すると、画像が撮影された場所、予測の期待値などの情報を推論に追加できます。カスタムメタデータは、［Recent Inferences］および［All Inferences］ビューに表示されます。

推論結果にカスタムメタデータを添付するには、 [カスタムメタデータ API](#http-api) のドキュメントをご覧ください。

### モデルモニタリング API

自動化および外部システムとの統合のために、以下を使用してモデルモニタリングの統計情報を取得できます [モデルモニタリング用 API](#http-api).

### サポートされているデプロイメント

モデルモニタリングは、Roboflow の Cloud API または Roboflow Inference Server を使用して行われた推論リクエストをサポートします（Inference Server がインターネットにアクセスできることが条件です）。これには、Roboflow の以下を使用するエッジデプロイメントも含まれます [ライセンスサーバー](https://blog.roboflow.com/roboflow-license-server/).

## HTTP API

### ワークスペース内でデプロイされたモデルに関する統計情報を取得する

モデルモニタリング API を使用して、モデルモニタリングの統計情報を取得できます。このエンドポイントは現在、api\_key に加えて 3 つのクエリパラメータを受け付けます。

* **startTime**：形式が「YYYY-MM-DD HH」の DateTime 文字列:flag\_mm:ss」。空の場合、リクエスト時刻から 24 時間前がデフォルトになります
* **endTime**：形式が「YYYY-MM-DD HH」の DateTime 文字列:flag\_mm:ss」。空の場合、リクエスト時点の現在時刻がデフォルトになります
* **modelNames**：カンマ区切りのモデル名の文字列。例：「?modelNames=license-plate-detector,truck-detector」

#### 統計情報

`GET /:workspace/inference-stats`

#### **リクエスト例：**

```
curl --location --request GET 'https://api.roboflow.com/${WORKSPACE}/inference-stats?api_key=$ROBOFLOW_API_KEY&startTime=&endTime=' \
```

**レスポンス例：**

{% tabs %}
{% tab title="200" %}

```json
{
    "num_inferences": 120,
    "prev_num_inferences": 290,
    "num_errors": 0,
    "prev_num_errors": 0,
    "avg_confidence": 0.92541713388321,
    "prev_avg_confidence": 0.8610920182589827,
    "avg_response_time": 0.16464362986438943,
    "prev_avg_response_time": 0.043521592255159045,
    "inference_stats": [
        {
            "model_name": "cards-3z9gn",
            "predicted_class": "Playingcards",
            "num_inferences": 106,
            "prev_num_inferences": 190,
            "num_errors": null,
            "prev_num_errors": null,
            "avg_confidence": 0.931105958703923,
            "prev_avg_confidence": 0.935741652940449,
            "avg_response_time": 0.176652773857811,
            "prev_avg_response_time": 0.05487422056841488,
            "median_confidence": 0.9268901944160461,
            "class_count": 211,
            "deployment_types": "hosted",
            "inference_server_versions": "0.15.3,0.16.0",
            "model_num_inferences": 107,
            "prev_model_num_inferences": 190
        },
        {
            "model_name": "cards-3z9gn",
            "predicted_class": "",
            "num_inferences": 1,
            "prev_num_inferences": null,
            "num_errors": null,
            "prev_num_errors": null,
            "avg_confidence": 0,
            "prev_avg_confidence": null,
            "avg_response_time": 0,
            "prev_avg_response_time": null,
            "median_confidence": 0,
            "class_count": 1,
            "deployment_types": "hosted",
            "inference_server_versions": "0.16.0",
            "model_num_inferences": 107,
            "prev_model_num_inferences": null
        },
        {
            "model_name": "hard-hat-sample-8j2w3",
            "predicted_class": "head",
            "num_inferences": null,
            "prev_num_inferences": 100,
            "num_errors": null,
            "prev_num_errors": null,
            "avg_confidence": null,
            "prev_avg_confidence": 0.6933842897415161,
            "avg_response_time": null,
            "prev_avg_response_time": 0.021951598459972955,
            "median_confidence": null,
            "class_count": null,
            "deployment_types": "hosted",
            "inference_server_versions": "0.15.1",
            "model_num_inferences": null,
            "prev_model_num_inferences": 100
        },
        {
            "model_name": "hard-hat-sample-8j2w3",
            "predicted_class": "helmet",
            "num_inferences": null,
            "prev_num_inferences": 100,
            "num_errors": null,
            "prev_num_errors": null,
            "avg_confidence": null,
            "prev_avg_confidence": 0.7451311349868774,
            "avg_response_time": null,
            "prev_avg_response_time": 0.021951598459972955,
            "median_confidence": null,
            "class_count": null,
            "deployment_types": "hosted",
            "inference_server_versions": "0.15.1",
            "model_num_inferences": null,
            "prev_model_num_inferences": 100
        },
        {
            "model_name": "coco",
            "predicted_class": "car",
            "num_inferences": 11,
            "prev_num_inferences": null,
            "num_errors": null,
            "prev_num_errors": null,
            "avg_confidence": 0.91790372133255,
            "prev_avg_confidence": null,
            "avg_response_time": 0.0647244118180817,
            "prev_avg_response_time": null,
            "median_confidence": 0.91790372133255,
            "class_count": 22,
            "deployment_types": "hosted",
            "inference_server_versions": "0.15.3",
            "model_num_inferences": 11,
            "prev_model_num_inferences": null
        },
        {
            "model_name": "license-plate-recognition-rxg4e",
            "predicted_class": "License_Plate",
            "num_inferences": 2,
            "prev_num_inferences": null,
            "num_errors": null,
            "prev_num_errors": null,
            "avg_confidence": 0.8706022202968597,
            "prev_avg_confidence": null,
            "avg_response_time": 0.07911215199999333,
            "prev_avg_response_time": null,
            "median_confidence": 0.8706022202968597,
            "class_count": 2,
            "deployment_types": "hosted",
            "inference_server_versions": "0.15.3",
            "model_num_inferences": 2,
            "prev_model_num_inferences": null
        }
    ]
}
```

{% endtab %}
{% endtabs %}

### 推論にメタデータを添付する

各推論結果にカスタムメタデータ値を添付し、モデルモニタリングダッシュボードで表示できます。

**用途**

カスタムメタデータには、データをタグ付けして検索や整理を容易にすることから、推論結果に追加のコンテキストを加えることまで、さまざまな用途があります。たとえば、米国内に 3 つの工場を持つ自動車メーカーであるとします。推論結果に追加することを検討できる項目には、場所、画像が撮影された生産ライン、特定の操作が成功したか失敗したか、推論の期待結果（例： `color=blue`).

**カスタムメタデータを作成する**

<mark style="color:緑;">`POST`</mark> `/:workspace/inference-stats/metadata`

モデルモニタリングダッシュボードに表示される追加データを推論結果に添付します。

Roboflow の Inference Container または Serverless Cloud API で推論リクエストを行うと、レスポンスで `inference_id` を受け取ります。この ID を使用して、以下に示すように `inference_ids` 配列に追加し、メタデータを添付できます。 `field_name` はプロパティの名前であり、 `value` は値です。

たとえば、推論結果に地理的位置を添付する場合は、 `field_name` を「location」に設定し、 `value` は「united\_states」のような場所になります。

**注:** の値 `field_name` および `field_value` は完全にユーザー定義です。文字の大文字・小文字を含め、書式を一貫させてください。たとえば、 `field_name: "my_location"` および `field_name: "My_location"` は 2 つの別個のメタデータ値として扱われます。

**リクエスト例：**

```
curl --location --request POST 'https://api.roboflow.com/${WORKSPACE}/inference-stats/metadata' \
--header 'Content-Type: application/json' \
--data-raw '{
    "api_key": "YOUR_API_KEY",
    "data": [
        {
            "inference_ids": ["a12a19a9-a933-44c9-970c-a55ea03bb453"],
            "field_name": "camera_location",
            "field_value": "canada"
        },
        {
            "inference_ids": ["accf0af9-bdf0-4b22-8106-6988d4cada5a"],
            "field_name": "camera_location",
            "field_value": "emea"
        }
    ]
}'
```

**ヘッダー：**

| 名前           | 値                  |
| ------------ | ------------------ |
| Content-Type | `application/json` |

**本文：**

| 名前     | 型                | 説明                                                                                                                  |
| ------ | ---------------- | ------------------------------------------------------------------------------------------------------------------- |
| `data` | Array\<Metadata> | <p>{</p><p>"inference\_ids": Array\<string>;</p><p>"field\_name": string;</p><p>"field\_value": string;</p><p>}</p> |

**レスポンス：**

{% tabs %}
{% tab title="200" %}

```json
{
  "status": "ok"
}
```

{% endtab %}

{% tab title="400" %}

```json
{
  "error": "Invalid request"
}
```

{% endtab %}
{% endtabs %}

**Python を使用する例：**

```python
import requests
from inference_sdk import InferenceHTTPClient, InferenceConfiguration

#### これらを変更してください
api_key = "YOUR_API_KEY"
workspace = "YOUR_WORKSPACE_ID"

#### デフォルト値
field_name = "test_field"
field_value = "test_value"
model_id = "coco/24"
image_path = "https://cdn.britannica.com/79/232779-050-6B0411D7/German-Shepherd-dog-Alsatian.jpg"
api_url = "https://serverless.roboflow.com"

#### クライアントを初期化する
print("InferenceHTTPClient を初期化しています...")
client = InferenceHTTPClient(
    api_url=api_url, api_key=api_key
).configure(InferenceConfiguration(api_key_transport="header"))

#### 推論を実行する
result = client.infer(image_path, model_id=model_id)
print("結果：", result)

#### 結果から推論 ID を抽出する
inference_id = result.get('inference_id')
if inference_id:
    print("推論 ID：", inference_id)
else:
    raise ValueError("レスポンス内に推論 ID が見つかりません。")

url = f"https://api.roboflow.com/{workspace}/inference-stats/metadata"

#### POST リクエストのヘッダーとデータを設定する
headers = {
    "Content-Type": "application/json"
}
data = {
    "api_key": api_key,
    "data": [
        {
            "inference_ids": [inference_id],
            "field_name": field_name,
            "field_value": field_value
        }
    ]
}

#### カスタムメタデータを添付する POST リクエストを実行する
response = requests.post(url, headers=headers, json=data)

#### レスポンスステータスを確認する
if response.status_code == 200:
    print("カスタムメタデータが正常に添付されました：", response.json())
else:
    print("カスタムメタデータの添付に失敗しました：", response.text)
```
