For the complete documentation index, see llms.txt. This page is also available as Markdown.

Grounding DINO

テキストプロンプト付き物体検出に Grounding DINO を、Dedicated Deployment またはセルフホスト Inference で使用します

Grounding DINO はオープン語彙の物体検出器です。画像とテキストクラスのリストを渡すと、モデルは学習なしで一致する領域のバウンディングボックスを返します。

Grounding DINO は Serverless Cloud API では利用できません。以下で実行してください。 専用デプロイメント または セルフホストの Inference.

コード例

1

API キーを取得する

Roboflow アカウントを作成し、キーを次の場所で見つけてください。 Roboflow API 設定ページ そしてシェルから使えるようにします。

export ROBOFLOW_API_KEY="your-key-here"
2

依存関係をインストールする

これらのパッケージは API を呼び出して、その結果を描画します:

pip install -U requests supervision opencv-python
3

モデルを実行する

設定してください URL 専用デプロイメントのURLまたはローカルの推論サーバーに。

import base64
import os
import cv2
import numpy as np
import requests
import supervision as sv

URL = "https://your-deployment.roboflow.cloud"
image = sv.load_image_from_url("https://media.roboflow.com/notebooks/examples/dog.jpeg")
_, buffer = cv2.imencode(".jpg", image)
image_base64 = base64.b64encode(buffer).decode("utf-8")

response = requests.post(
    f"{URL}/grounding_dino/infer",
    json={
        "api_key": os.environ["ROBOFLOW_API_KEY"],
        "image": {"type": "base64", "value": image_base64},
        "text": ["", "", "リュックサック"],
    },
)
preds = response.json()["predictions"]

xyxys = [
    [p["x"] - p["width"] / 2, p["y"] - p["height"] / 2,
     p["x"] + p["width"] / 2, p["y"] + p["height"] / 2]
    for p in preds
]
detections = sv.Detections(
    xyxy=np.array(xyxys, dtype=float),
    class_id=np.array([p.get("class_id", 0) for p in preds]),
    confidence=np.array([p["confidence"] for p in preds], dtype=float),
    data={"class_name": np.array([p["class"] for p in preds])},
)
labels = [f"{p['class']} {p['confidence']:.2f}" for p in preds]
annotated = sv.BoxAnnotator().annotate(image.copy(), detections)
annotated = sv.LabelAnnotator().annotate(annotated, detections, labels=labels)
cv2.imwrite("dog_annotated.png", annotated)

推論速度

以下で測定したレイテンシ Roboflow Inference 1台のNVIDIA L4、バッチサイズ1、ウォームアップ後の平均で測定。

モデル
レイテンシ(ms)

grounding-dino

165.4

2 つのテキストプロンプトで測定しました。

設定してください URL をデプロイ先に合わせてください:

Inference(セルフホスト)で使用

また、Grounding DINO を直接ご自身の Python プロセスに読み込むこともできます。 inference パッケージを使えば、HTTP の往復を完全に省略できます。

1

パッケージをインストールしてください

pip install "inference[grounding-dino]"
2

モデルを実行する

from inference.models.grounding_dino import GroundingDINO

model = GroundingDINO(api_key="YOUR_API_KEY")

results = model.infer(
    {
        "image": {
            "type": "url",
            "value": "https://media.roboflow.com/fruit.png",
        },
        "text": ["りんご"],
        # 省略可能な閾値。どちらもデフォルトは 0.5 です
        "box_threshold": 0.5,
        "text_threshold": 0.5,
    }
)

print(results)

置き換えてください りんご を検出したい対象に置き換え、 box_thresholdtext_threshold を用途に合わせて調整してください。 Grounding DINO README しきい値の説明については、

Grounding DINO は一般的な物体(車、人、犬)に最も効果的です。狭く粒度の細かいカテゴリでは精度が劣るため、プロンプトの言い回しを試してみてください。よくあるパターンは、Grounding DINO を使ってデータを自動ラベル付けし、その結果でより小さく高速な検出器を学習させることです。

最終更新

役に立ちましたか?