Ultralytics YOLO27:

Ultralytics Explorer API#

コミュニティノート ⚠️

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

はじめに#

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のような大規模データセットのembeddingsを作成して再利用できます。

embeddingsテーブルを強制的に更新する場合は、force=Truecreate_embeddings_tableメソッドに渡します。

LanceDBテーブルオブジェクトに直接アクセスして、高度な分析を実行することもできます。詳細については、Embeddings Tableの操作セクションをご覧ください。

1. 類似検索#

類似検索は、指定した画像に類似する画像を見つけるための手法です。類似する画像は類似したembeddingsを持つという考えに基づいています。embeddingsテーブルを構築すると、次のいずれかの方法でセマンティック検索を実行できます。

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

入力が複数ある場合は、それらのembeddingsの集約値が使用されます。

入力に最も類似するデータポイントlimit件と、embedding空間内での距離を含む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. AIに質問(自然言語クエリ)#

この機能を使用すると、SQLを記述せずに自然言語でデータセットをフィルタリングできます。AI搭載のクエリジェネレーターがプロンプトをクエリに変換し、一致する結果を返します。たとえば、「人物が1人、犬が2匹いる画像を100枚表示してください。ほかのオブジェクトがあってもかまいません」と尋ねると、クエリを生成して該当する結果を表示します。 注: この機能はLLMを使用するため、結果は確率的であり、不正確な場合があります。

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テーブルを直接操作することもできます。embeddingsテーブルを作成すると、Explorer.tableを使用してアクセスできます。

ヒント

Explorerは内部でLanceDBテーブルを使用します。Explorer.tableオブジェクトを使用してこのテーブルに直接アクセスし、rawクエリの実行や、前処理および後処理フィルターのプッシュダウンなどを行えます。

from ultralytics import Explorer

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

テーブルを使用して実行できる操作の例を以下に示します。

raw Embeddingsの取得#

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. Embeddingsの応用#

embeddingsテーブルを使用して、さまざまな探索的分析を実行できます。以下にいくつかの例を示します。

類似度インデックス#

Explorerには、similarity_index操作が用意されています。

  • 各データポイントがデータセット内のほかのデータポイントとどの程度類似しているかを推定します。
  • 生成されたembedding空間で、現在の画像からmax_distより近い画像embeddingの数を、top_k件の類似画像を一度に考慮して数えることで実行します。

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

  • idx: データセット内の画像のインデックス
  • im_file: 画像ファイルへのパス
  • count: 現在の画像からmax_distより近い、データセット内の画像数
  • sim_im_files: count件の類似画像へのパスのリスト
ヒント

指定したデータセット、モデル、max_disttop_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]

Embedding空間の可視化#

任意のプロットツールを使用して、embedding空間を可視化することもできます。たとえば、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は、包括的なデータセット探索を目的として設計されています。SQLクエリ、ベクトル類似検索、セマンティック検索を使用して、データセットをフィルタリングおよび検索できます。この強力なPython APIは大規模データセットを処理できるため、Ultralyticsモデルを使用するさまざまなコンピュータービジョンタスクに適しています。

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

    pip install ultralytics[explorer]

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

  • embeddingsテーブルを作成し、類似画像を検索することで、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())

    詳細については、類似検索セクションをご覧ください。

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

  • 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セクションをご覧ください。

コメント