はじめに
Describe AnythingはNVIDIAといくつかの大学によって開発されたオープンソースプロジェクトで、Describe Anything Model(DAM)を中核としている。このツールは、ユーザーが画像やビデオにマークした領域(ドット、ボックス、落書き、マスクなど)に基づいて詳細な説明を生成する。静止画像の詳細を記述するだけでなく、動画内の領域の経時変化もキャプチャします。
機能一覧
- 複数の領域ラベル付け方法をサポート:ユーザーは、ドット、ボックス、落書きやマスクで画像やビデオの説明領域を指定することができます。
- 画像と動画の説明:静止画の詳細な説明を生成したり、動画の特定の領域における動的な変化を分析します。
- オープンソースのモデルとデータセット:DAM-3BとDAM-3B-Videoモデルは、画像とビデオの共同処理をサポートするために利用可能です。
- インタラクティブ・インターフェース:Gradioを通じてウェブ・インターフェースが提供され、ユーザーはマスクを描いてリアルタイムで説明を得ることができる。
- APIサポート:他のアプリケーションに簡単に統合できるように、OpenAI互換のサーバーインターフェースを提供します。
- DLC-Bench Evaluation: この分野で説明されているモデルの性能を評価するための特別なベンチマークツールが含まれています。
- SAM統合:自動マスク生成機能を備えたSAM(Segment Anything)統合モデル(オプション)により、運用効率を向上。
ヘルプの使用
設置プロセス
Describe AnythingはPython環境からインストールすることができ、依存関係の衝突を避けるために仮想環境を使用することを推奨する。以下は詳細なインストール手順です:
- Python環境の作成::
Python 3.8以降を使用して、新しい仮想環境を作成する:python -m venv dam_env source dam_env/bin/activate # Linux/Mac dam_env\Scripts\activate # Windows
- 何でも記述する::
取り付けオプションは2つある:- pipで直接インストールする:
pip install git+https://github.com/NVlabs/describe-anything
- リポジトリをクローンし、ローカルにインストールする:
git clone https://github.com/NVlabs/describe-anything cd describe-anything pip install -v .
- pipで直接インストールする:
- セグメント・エニシングのインストール(オプション)::
マスクを自動生成する必要がある場合は、SAM依存ファイルをインストールする必要がある:cd demo pip install -r requirements.txt
- インストールの確認::
インストールが完了したら、以下のコマンドを実行して成功を確認する:python -c "from dam import DescribeAnythingModel; print('Installation successful')"
使用方法
Describe Anything は、コマンドラインスクリプティング、対話型インターフェース、API 呼び出しを含む様々な方法で使用することができます。以下は、主な機能の詳細なウォークスルーです:
1.インタラクティブなグラディオのインターフェース
グラディオのインターフェイスは初心者向きで、画像をアップロードし、手動でマスクを描いて説明を得ることができる。
- 起動インターフェース::
以下のコマンドを実行して、Gradio サーバーを起動する:python demo_simple.py
コマンドが実行されると、ブラウザはローカルのウェブページ(通常は
http://localhost:7860
). - 手続き::
- 画像のアップロード:アップロードボタンをクリックして、ローカルの画像ファイルを選択します。
- マスクの描画: ブラシツールを使って、画像上の関心のある領域を丸で囲みます。
- 例えば、「赤い毛の犬、銀色のタグの首輪をしている、走っている」などです。
- オプションのSAM統合:SAMが有効な場合、画像上のドットをクリックすると、システムが自動的にマスクを生成します。
- ほら::
- 画像がRGBAフォーマットで、マスクがアルファチャンネルを通して処理されていることを確認してください。
- 記述の詳細レベルは、パラメータを調整することで調整することができる(例えば
max_new_tokens
) コントロール
2.コマンドラインスクリプト
コマンドラインスクリプトは、バッチ処理や開発者の使用に適しており、より高い柔軟性を提供します。
- 画像の説明::
以下のコマンドを実行して、画像の説明文を生成する:python examples/dam_with_sam.py --image_path <image_file> --input_points "[[x1,y1],[x2,y2]]"
例
python examples/dam_with_sam.py --image_path dog.jpg --input_points "[[500,300]]"
システムは指定されたポイントに基づいてマスクを生成し、説明を出力する。
- ビデオの説明::
連合モデルを使用したビデオ処理:python examples/query_dam_server_video.py --model describe_anything_model --server_url http://localhost:8000 --video_path <video_file>
フレーム上のエリアを指定するだけで、システムは自動的にエリアの変化を追跡し、描写する。
- パラメタリゼーション::
--temperature
推奨値は0.2です。--top_p
多様性の生成をコントロールし、推奨値は0.9。--max_new_tokens
デフォルトは512。
3. APIコール
Describe Anythingは、他のアプリケーションへの統合に適したOpenAI互換APIを提供します。
- サーバーの起動::
以下のコマンドを実行してDAMサーバーを起動する:python dam_server.py --model-path nvidia/DAM-3B --conv-mode v1 --prompt-mode focal_prompt
サーバーはデフォルトで
http://localhost:8000
. - リクエストを送信::
PythonとOpenAI SDKを使ってリクエストを送信します:from openai import OpenAI client = OpenAI(base_url="http://localhost:8000", api_key="not-needed") response = client.chat.completions.create( model="describe_anything_model", messages=[ {"role": "user", "content": [ {"type": "image_url", "image_url": {"url": "data:image/png;base64,<base64_image>"}}, {"type": "text", "text": "Describe the region in the mask"} ]} ] ) print(response.choices[0].message.content)
相互互換性
<base64_image>
画像のBase64エンコーディング。
4.DLCベンチ評価
DLC-Benchは、領域記述モデルを評価するためのベンチマークツールです。
- データセットをダウンロード::
git lfs install git clone https://huggingface.co/datasets/nvidia/DLC-Bench
- 運用評価::
以下のコマンドを使用して、モデル出力を生成し、それを評価する:python get_model_outputs.py --model_type dam --model_path nvidia/DAM-3B
結果は
model_outputs_cache/
フォルダー
注目の機能操作
- フォーカル・プロンプティングDAMは、フォーカル・プロンプティング・テクノロジーを使用して、グローバルな画像コンテキストとローカルエリアの詳細を組み合わせて、より正確な説明を生成します。ユーザーはプロンプトを手動で調整する必要はなく、システムが自動的に最適化します。
- ゲート・クロスアテンションゲーテッド・クロス・アテンション機構により、このモデルは複雑なシーンにおいて、無関係な情報の干渉を避けながら、特定の領域に焦点を合わせることができる。
- ビデオモーションの説明例えば、「牛の脚の筋肉が歩幅に合わせて激しく動いている」といった具合だ。
アプリケーションシナリオ
- 医用画像解析
医師はDescribe Anythingを使って、CTやMRIなどの医療画像上の特定の領域に注釈をつけ、診断に役立つ詳細な説明を生成することができる。例えば、肺の異常な領域にラベルを付けることで、システムは「不規則な陰影があり、エッジがぼやけた領域、おそらく炎症」と説明することができる。 - 都市計画
プランナーは空撮映像をアップロードし、建物や道路のエリアにラベルを付け、「密集した商業ビルに囲まれた4車線の広い幹線道路」といった説明を得ることができる。これは都市の配置を分析するのに役立つ。 - コンテンツ制作
ビデオ作成者は、Describe Anything を使用して、「翼を広げて飛ぶ鷲と背景の雪山」など、ビデオクリップ内の特定のオブジェクトの説明を生成することができます。これらの説明文は、キャプションやスクリプトに使用することができます。 - データ注釈
データサイエンティストはDAMを使って、画像やビデオ内のオブジェクトの説明を自動的に生成し、手作業によるラベリングの必要性を減らすことができる。例えば、データセット内の車両にラベルを付けると、「赤い車、ヘッドライト点灯」というフレーズが生成される。
品質保証
- Describe Anythingはどのような入力フォーマットに対応していますか?
PNG、JPEGなどの一般的な画像フォーマットや、MP4などのビデオフォーマットがサポートされています。画像はアルファチャンネルでマスクを指定したRGBAモードでなければなりません。 - 記述の正確性を高めるにはどうすればよいですか?
より正確なマスク(SAMで自動生成されたものなど)を使用し、以下のように調整する。temperature
歌で応えるtop_p
パラメータで、記述の創造性と多様性をコントロールする。 - 動作にはGPUが必要ですか?
推論の高速化にはNVIDIA GPU(RTX 3090など)が推奨されるが、CPUでも低速で動作させることができる。 - 動画で複数フレームの説明を扱うには?
あるフレームに領域をマークするだけで、DAMは自動的にその領域が後続フレームでどのように変化するかを追跡し、説明する。