> 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 の Model Monitoring ダッシュボードを使えば、プロトタイピングから本番運用まで、モデルを比類なく可視化できます。Model Monitoring では、高レベルの統計を確認して、モデルの時間経過に伴う性能を把握したり、個々の推論リクエストを確認して、エッジケースでのモデルの性能を把握したりできます。

{% hint style="info" %}
モデルモニタリング **は非推奨になります** され、Vision Events に置き換えられます。参照: [Vision Events のドキュメント](/deployment/ja/to/vision-events.md) を参照して、追加情報をご確認ください。
{% endhint %}

## Web アプリ

### Model Monitoring へのアクセス

Model Monitoring は 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](#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>

### Model Dashboard

Models タブでは、特定のモデルを選択してそのデータを表示できます。そこでは、Workspace Overview と同じ統計が表示されますが、1つのモデルに特化した内容になります。

ここでは、統計に加えて、モデル内の各クラスごとの検出数を確認でき、他のクラスに対する分布も確認できます。

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

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

### 推論テーブル

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

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

#### 推論の詳細

Inferences Table から、特定の推論を詳しく掘り下げて、より多くの詳細を確認できます。以下の画像に示されている順に見ていきましょう:

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

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

#### 推論画像の有効化

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

推論画像を Model Monitoring に表示させる方法は2つあります:

* **Roboflow Dataset Upload ブロック:** Workflows では、「Roboflow Dataset Upload」ブロックを追加できます。予測と予測画像を接続すると、Model Monitoring に表示されます。

<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 %}

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

推論に追加のメタデータを付与するには、Model Monitoring のカスタムメタデータ機能を使用できます。カスタムメタデータを使うと、画像が撮影された場所、予測の期待値など、推論に関する情報を追加できます。カスタムメタデータは「Recent Inferences」と「All Inferences」の表示に現れます。

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

### Model Monitoring API

自動化や外部システムへの統合のために、 [モデルモニタリング用API](#http-api).

### 対応デプロイ

Model Monitoring は、Roboflow の Hosted API または Roboflow Inference Server を使用して行われた推論リクエストをサポートします。Inference Server にインターネットアクセスがあることが条件です。これには、Roboflow の [License Server](https://blog.roboflow.com/roboflow-license-server/).

## HTTP API

### ワークスペース内のデプロイ済みモデルの統計を取得する

Model Monitoring API を使って Model Monitoring の統計を取得できます。このエンドポイントは現在、api\_key に加えて3つのクエリパラメータを受け付けます:

* **startTime** : 形式 "YYYY-MM-DD HH:flag\_mm:ss" の DateTime 文字列。空の場合、リクエスト時刻から24時間前がデフォルトになります
* **endTime** : 形式 "YYYY-MM-DD HH:flag\_mm:ss" の DateTime 文字列。空の場合、リクエスト時刻がデフォルトになります
* **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 %}

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

各推論結果にカスタムメタデータ値を付与し、Model Monitoring ダッシュボードで確認できます。

**用途**

カスタムメタデータには、データのタグ付けによって見つけやすく整理しやすくすることから、推論結果に追加の文脈を与えることまで、さまざまな用途があります。たとえば、自動車メーカーで、米国内に3つの工場があるとします。推論結果に追加するとよい項目としては、場所、画像がどの生産ラインで撮影されたか、ある操作が合格か不合格か、推論の期待結果（たとえば `color=blue`).

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

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

Model Monitoring ダッシュボードに表示される推論結果へ追加データを付与します。

Roboflow の Inference Container または Serverless Hosted 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": "無効なリクエスト"
}
```

{% endtab %}
{% endtabs %}

**Python を使った例:**

```python
import requests
from inference_sdk import InferenceHTTPClient

#### 変更する箇所
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)

#### 推論を実行
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)
それ以外の場合：
    raise ValueError("レスポンスに inference 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())
それ以外の場合：
    print("カスタムメタデータの付与に失敗しました:", response.text)
```
