YOLO Vision 2026:

Ultralytics Explorer API#

コミュニティからのお知らせ ⚠️

**ultralytics>=8.3.12**の時点で、Ultralytics Explorerは削除されました。Explorerを使用するには、pip install ultralytics==8.3.11をインストールしてください。類似の(および拡張された)データセット探索機能は、Ultralytics Platformで利用できます。

はじめに#

Open In Colab Explorer APIは、データセットを探索するためのPython APIです。SQLクエリ、ベクトル類似度検索、およびセマンティック検索を使用したデータセットのフィルタリングと検索をサポートしています。



Watch: Ultralytics Explorer API Overview

インストール#

Explorerの一部の機能は外部ライブラリに依存しています。これらはExplorerを使用する際に自動的にインストールされます。これらの依存関係を手動でインストールするには、次のコマンドを使用します。

pip install ultralytics[explorer]

使用方法#

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")

# Create embeddings for your dataset
explorer.create_embeddings_table()

# Search for similar images to a given image/images
df = explorer.get_similar(img="path/to/image.jpg")

# Or search for similar images to a given index/indices
df = explorer.get_similar(idx=0)
注意

指定されたデータセットとモデルのペアに対するEmbeddingsテーブルは一度だけ作成され、再利用されます。これらは内部でLanceDBを使用しており、ディスク上でスケールするため、メモリ不足になることなくCOCOのような大規模データセットの埋め込みを作成して再利用できます。

エンベディングテーブルを強制的に更新したい場合は、force=Truecreate_embeddings_tableメソッドに渡すことができます。

LanceDBのテーブルオブジェクトに直接アクセスして、高度な分析を実行できます。詳細については、Working with Embeddings Table sectionを参照してください。

1. 類似度検索#

類似度検索は、指定された画像に似た画像を検索するためのテクニックです。類似した画像には類似した埋め込みが存在するという考え方に基づいています。埋め込みテーブルが構築されたら、次のいずれかの方法でセマンティック検索を実行できます。

  • データセット内の特定のインデックスまたはインデックスのリストに対して:exp.get_similar(idx=[1,10], limit=10)
  • データセットに含まれていない任意の画像または画像のリストに対して:exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

複数の入力がある場合は、それらの埋め込みの集計が使用されます。

入力に最も類似したデータポイントの数(limit)と、埋め込み空間におけるそれらの距離を含むpandas DataFrameが取得されます。このデータセットを使用して、さらなるフィルタリングを実行できます。

セマンティック検索
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

similar = exp.get_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(
    img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
    limit=10,
)
print(similar.head())

類似画像のプロット#

また、plot_similarメソッドを使用して類似画像をプロットすることもできます。このメソッドはget_similarと同じ引数を受け取り、類似画像をグリッド状にプロットします。

類似画像のプロット
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()

2. Ask AI(自然言語クエリ)#

この機能を使用すると、SQLを書かずに自然言語を使用してデータセットをフィルタリングできます。AIを活用したクエリジェネレーターがプロンプトをクエリに変換し、一致する結果を返します。たとえば、「ちょうど1人の人と2匹の犬が写っている画像を100枚見せてください。他のオブジェクトが写っていても構いません」と質問すると、クエリが生成され、その結果が表示されます。 注意: この機能はLLMを使用しているため、結果は確率的であり、不正確な場合があります。

Ask AI
from ultralytics.data.explorer import plot_query_result

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())

# plot the results
plt = plot_query_result(df)
plt.show()

3. SQLクエリ#

sql_queryメソッドを使用して、データセットに対してSQLクエリを実行できます。このメソッドは入力としてSQLクエリを受け取り、結果を含むpandas DataFrameを返します。

SQLクエリ
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

SQLクエリ結果のプロット#

また、plot_sql_queryメソッドを使用してSQLクエリの結果をプロットすることもできます。このメソッドはsql_queryと同じ引数を受け取り、結果をグリッド状にプロットします。

SQLクエリ結果のプロット
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")

4. 埋め込みテーブルの操作#

また、embeddingsテーブルを直接操作することもできます。embeddingsテーブルが作成されたら、Explorer.tableを使用してアクセスできます。

ヒント

Explorerは内部でLanceDBテーブル上で動作します。Explorer.tableオブジェクトを使用してこのテーブルに直接アクセスし、生データのクエリの実行や、プレフィルターおよびポストフィルターのプッシュダウンなどを行うことができます。

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

テーブルを使用して実行できる操作の例をいくつか示します。

生の埋め込みを取得する#

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

embeddings = table.to_pandas()["vector"]
print(embeddings)

プレフィルタおよびポストフィルタを使用した高度なクエリ#

from ultralytics import Explorer

exp = Explorer(model="yolo11n.pt")
exp.create_embeddings_table()
table = exp.table

# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)

ベクトルインデックスの作成#

大規模なデータセットを使用する場合、より高速なクエリのために専用のベクターインデックスを作成することもできます。これを行うには、LanceDBテーブルでcreate_indexメソッドを使用します。

table.create_index(num_partitions=..., num_sub_vectors=...)

5. 埋め込みの応用#

埋め込みテーブルを使用して、さまざまな探索的分析を実行できます。以下に例を示します。

類似度インデックス#

Explorerにはsimilarity_index操作が付属しています:

  • これは、各データポイントが残りのデータセットとどのくらい似ているかを推定しようとするものです。
  • これは、生成されたエンベディング空間内で現在の画像に対してmax_distよりも近い位置にある画像がいくつあるかをカウントし、一度にtop_k個の類似画像を考慮することで行われます。

次の列を含むpandas DataFrameが返されます。

  • idx:データセット内の画像のインデックス
  • im_file:画像ファイルへのパス
  • count:現在の画像との距離がmax_distよりも近いデータセット内の画像の数
  • sim_im_filescountの類似画像へのパスのリスト
ヒント

指定されたデータセット、モデル、max_distおよびtop_kに対して、一度生成された類似度インデックスは再利用されます。データセットが変更された場合、または単に類似度インデックスを再生成する必要がある場合は、force=Trueを渡すことができます。

類似度インデックス
from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

類似度インデックスを使用して、データセットをフィルタリングするためのカスタム条件を構築できます。たとえば、次のコードを使用して、データセット内の他のどの画像にも似ていない画像を除外することができます。

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]

埋め込み空間の視覚化#

お好みのプロットツールを使用して埋め込み空間を視覚化することもできます。以下はMatplotlibを使用した簡単な例です。

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# Reduce dimensions using PCA to 3 components for visualization in 3D
pca = PCA(n_components=3)
reduced_data = pca.fit_transform(embeddings)

# Create a 3D scatter plot using Matplotlib Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")

# Scatter plot
ax.scatter(reduced_data[:, 0], reduced_data[:, 1], reduced_data[:, 2], alpha=0.5)
ax.set_title("3D Scatter Plot of Reduced 256-Dimensional Data (PCA)")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
ax.set_zlabel("Component 3")

plt.show()

Explorer APIを使用して、独自のCVデータセット探索レポートの作成を開始しましょう。インスピレーションを得るには、VOC Exploration Exampleをチェックしてください。

Ultralytics Explorerを使用して構築されたアプリ#

Explorer APIベースのGUI Demoをお試しください

よくある質問 (FAQ)#

Ultralytics Explorer APIは何に使用されますか?#

Ultralytics Explorer APIは、包括的なデータセット探索のために設計されています。ユーザーはSQLクエリ、ベクター類似度検索、セマンティック検索を使用してデータセットをフィルタリングおよび検索できます。この強力なPython APIは大規模なデータセットを処理できるため、Ultralyticsモデルを使用したさまざまなcomputer visionタスクに最適です。

Ultralytics Explorer APIをインストールするにはどうすればよいですか?#

Ultralytics Explorer APIとその依存関係をインストールするには、次のコマンドを使用します。

pip install ultralytics[explorer]

これにより、Explorer APIの機能に必要なすべての外部ライブラリが自動的にインストールされます。追加のセットアップ詳細については、ドキュメントのinstallation sectionを参照してください。

Ultralytics Explorer APIを類似度検索に使用するにはどうすればよいですか?#

Ultralytics Explorer APIを使用して類似度検索を実行するには、埋め込みテーブルを作成し、類似画像についてクエリを実行します。基本的な例を次に示します。

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()

# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())

詳細については、Similarity Search sectionをご覧ください。

LanceDBをUltralytics Explorerで使用する利点は何ですか?#

Ultralytics Explorerの内部で使用されているLanceDBは、スケーラブルなディスク上の埋め込みテーブルを提供します。これにより、メモリ不足になることなく、COCOなどの大規模データセットの埋め込みを作成して再利用できます。これらのテーブルは1回のみ作成され、再利用できるため、データ処理の効率が向上します。

Ultralytics Explorer APIのAsk AI機能はどのように機能しますか?#

Ask AI機能を使用すると、ユーザーは自然言語クエリを使用してデータセットをフィルタリングできます。この機能はLLMを活用して、裏でこれらのクエリをSQLクエリに変換します。以下に例を示します。

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()

# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())

その他の例については、Ask AI sectionを確認してください。

コメント