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="yolo26n.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のような大規模データセットの埋め込みを作成および再利用できます。

In case you want to force update the embeddings table, you can pass force=True to create_embeddings_table method.

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

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="yolo26n.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="yolo26n.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駆動のクエリジェネレーターがプロンプトをクエリに変換し、一致する結果を返します。例えば、「100枚の画像を表示。それぞれ1人の人物と2匹の犬が写っているもの。他のオブジェクトがあっても良い」と尋ねると、クエリが生成され、その結果が表示されます。 注意: この機能は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="yolo26n.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="yolo26n.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="yolo26n.pt")
exp.create_embeddings_table()

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

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

埋め込みテーブルを直接操作することも可能です。埋め込みテーブルが作成されたら、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="yolo26n.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操作が含まれています。

  • これは、各データポイントがデータセットの残りの部分とどの程度類似しているかを推定しようとするものです。
  • It does that by counting how many image embeddings lie closer than max_dist to the current image in the generated embedding space, considering top_k similar images at a time.

結果として、以下の列を持つpandas DataFrameが返されます。

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

特定のデータセット、モデル、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モデルを使用したさまざまなコンピュータービジョンタスクに最適です。

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

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

pip install ultralytics[explorer]

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

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

Ultralytics Explorer APIを使用すると、埋め込みテーブルを作成し、それをクエリして類似画像を検索することで、類似度検索を実行できます。基本的な例を以下に示します。

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo26n.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セクションを参照してください。

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

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

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

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

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo26n.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セクションを確認してください。

コメント