VOC探索の例#
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Ultralytics Explorer APIノートブックへようこそ。このノートブックでは、セマンティック検索、ベクトル検索、SQLクエリを使用してデータセットを探索するために利用できるリソースを紹介します。
yolo explorer をお試しください (Explorer API 提供)
ターミナルで ultralytics をインストールし、yolo explorer を実行すると、ブラウザ上でカスタムクエリやセマンティック検索を実行できます。
**ultralytics>=8.3.12**の時点で、Ultralytics Explorerは削除されました。Explorerを使用するには、pip install ultralytics==8.3.11をインストールしてください。類似の(および拡張された)データセット探索機能は、Ultralytics Platformで利用できます。
セットアップ#
ultralytics と必要な dependencies をインストールし、ソフトウェアとハードウェアを確認してください。
!uv pip install ultralytics[explorer] openai
yolo checks類似度検索#
ベクトル類似度検索のパワーを活用して、埋め込み空間における距離とともに、データセット内の類似データポイントを見つけます。指定されたデータセットとモデルのペアに対して、埋め込みテーブルを作成するだけです。これは1回のみ必要であり、自動的に再利用されます。
exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()埋め込みテーブルが構築されたら、以下のいずれかの方法でセマンティック検索を実行できます。
- データセット内の特定のインデックスまたはインデックスのリストに対して (例:
exp.get_similar(idx=[1, 10], limit=10)) - データセットに含まれない任意の画像/画像リストに対して - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) 複数の入力がある場合、それらの埋め込みの集計が使用されます。
入力に最も類似したデータポイントが指定された件数(limit)だけ、埋め込み空間での距離とともにpandas DataFrameとして返されます。このデータセットを使用して、さらにフィルタリングを実行できます。

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()plot_similar ユーティリティを使用して、類似したサンプルを直接プロットすることもできます。

exp.plot_similar(idx=6500, limit=20)
exp.plot_similar(idx=[100, 101], limit=10) # Can also pass list of idxs or imgs
exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10, labels=False) # Can also pass external images
Ask AI: 自然言語による検索またはフィルタリング#
Explorer オブジェクトに表示したいデータポイントの種類をプロンプトで指示すると、それらの結果を含む DataFrame を返そうとします。LLM を利用しているため、必ずしも正しい結果が得られるとは限りません。その場合、None が返されます。

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)これらの結果をプロットするには、plot_query_result ユーティリティを使用できます。例:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# plot
from PIL import Image
from ultralytics.data.explorer import plot_query_result
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)データセットに対するSQLクエリの実行#
データセット内の特定のエントリを調査したい場合があります。このために、ExplorerではSQLクエリを実行できます。以下のいずれかのフォーマットを受け付けます。
- "WHERE"で始まるクエリは、自動的にすべての列を選択します。これは省略形のクエリと考えることができます。
- 選択する列を指定する完全なクエリを記述することもできます。
これを使用して、モデルのパフォーマンスや特定のデータポイントを調査できます。例:
- モデルが人間と犬が写っている画像の処理に苦戦していると仮定します。少なくとも2人の人間と少なくとも1匹の犬がいるポイントを選択するために、このようなクエリを記述できます。
SQLクエリとセマンティック検索を組み合わせて、特定のタイプの成果物に絞り込むことができます
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)類似検索と同様に、exp.plot_sql_query を使用して SQL クエリを直接プロットするユーティリティも提供されます。

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)埋め込みテーブルの操作(高度)#
Explorerは内部でLanceDBテーブル上で動作します。Explorer.tableオブジェクトを使用してこのテーブルに直接アクセスし、生データのクエリの実行や、プレフィルターおよびポストフィルターのプッシュダウンなどを行うことができます。
table = exp.table
print(table.schema)生のクエリの実行¶#
ベクトル検索はデータベースから最も近いベクトルを検索します。レコメンデーションシステムや検索エンジンでは、検索した製品に似た製品を見つけることができます。LLMやその他のAIアプリケーションでは、各データポイントは一部のモデルによって生成された埋め込みによって表現され、最も関連性の高い特徴が返されます。
高次元ベクトル空間での検索は、クエリベクトルのK近傍(KNN)を見つけることです。
メトリック LanceDBでは、メトリックは一対のベクトル間の距離を説明する方法です。現在、以下のメトリックをサポートしています。
- L2
- コサイン
- Dot Explorer の類似検索では、デフォルトで L2 が使用されます。テーブルに対して直接クエリを実行するか、lance フォーマットを使用してカスタムユーティリティを構築し、データセットを管理できます。利用可能な LanceDB テーブル操作の詳細については、docs を参照してください。

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()一般的なデータフォーマットへの相互変換#
df = table.to_pandas()
pa_table = table.to_arrow()埋め込みの操作#
lancedb の Table から生のエミングにアクセスして分析できます。画像のエミングは vector 列に保存されます。
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)散布図#
埋め込みを分析する初期ステップの1つは、次元削減を介して2D空間にプロットすることです。例を試してみましょう

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA # pip install scikit-learn
# 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's 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 には similarity_index 操作が付属しています。
- これは、各データポイントが残りのデータセットとどのくらい似ているかを推定しようとするものです。
- これは、一度に上位k個の類似画像を考慮しながら、生成された埋め込み空間内で現在の画像からmax_distよりも近くに位置する画像の数をカウントすることによって行われます。
指定したデータセット、モデル、max_dist および top_k に対して、類似度インデックスは一度生成されると再利用されます。データセットが変更された場合や、類似度インデックスを再生成する必要がある場合は、force=True を渡すことができます。ベクター検索や SQL 検索と同様に、これを直接プロットするユーティリティも付属しています。
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01)
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
まずプロットを見てみましょう
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)次に、この操作の出力を見てみましょう
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)
sim_idx類似度カウントが30を超えるデータポイントを確認し、それらに類似した画像をプロットするクエリを作成しましょう。
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]次のような結果が表示されます

exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images