コンテンツへスキップ

Ultralytics エクスプローラAPI

コミュニティ・ノート ⚠️

現在 ultralytics>=8.3.10Ultralytics エクスプローラーのサポートは廃止されました。しかしご心配なく!現在では、同様の機能、さらに強化された機能に Ultralytics ハブHUBは、ワークフローを合理化するために設計された、直感的なコード不要のプラットフォームです。Ultralytics HUBを使えば、コードを一行も書くことなく、データの探索、視覚化、管理を楽に続けることができます。ぜひチェックして、その強力な機能をご活用ください🚀。

はじめに

オープン・イン・コラボ Explorer API は、データセットを探索するためのPython API です。SQLクエリを使ったデータセットのフィルタリングや検索、ベクトル類似度検索、セマンティック検索をサポートしています。



見るんだ: Ultralytics エクスプローラAPIの概要

インストール

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

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
dataframe = explorer.get_similar(img="path/to/image.jpg")

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

与えられたデータセットとモデルのペアに対する埋め込みテーブルは、一度だけ作成され、再利用されます。これらはオンディスクでスケールするLanceDBを使用しているため、COCOのような大規模なデータセットでもメモリ不足になることなくエンベッディングを作成し、再利用することができます。

embeddingsテーブルを強制的に更新したい場合は、次のようにします。 force=True への create_embeddings_table メソッドを使用する。

LanceDBテーブル・オブジェクトに直接アクセスして高度な分析を行うことができます。詳しくは、埋め込みテーブルを使用するセクションをご覧ください。

類似画像検索は、与えられた画像に類似した画像を見つける技術である。類似画像は類似の埋め込みを持つという考えに基づいています。埋め込みテーブルが構築されると、以下のいずれかの方法でセマンティック検索を実行することができます:

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

複数の入力がある場合は、それらの埋め込み値の合計が使われる。

でpandasデータフレームを取得します。 limit 入力と最も類似したデータ点の数と、埋め込み空間におけるそれらの距離。このデータセットを使って、さらにフィルタリングを行うことができる

セマンティック検索

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())
from ultralytics import Explorer

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

similar = exp.get_similar(idx=1, limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(idx=[1, 10], 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()
from ultralytics import Explorer

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

plt = exp.plot_similar(idx=1, limit=10)
plt.show()

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

これにより、自然言語を使ってデータセットをどのようにフィルタリングしたいかを書くことができる。SQLクエリの記述に習熟する必要はありません。私たちのAIクエリージェネレーターが、自動的にそれを行います。例えば、「人が1人、犬が2匹写っている画像を100枚表示してください。他のオブジェクトもあります "と言えば、内部でクエリを生成し、その結果を表示します。 注意:これはLLMを使用しているので、結果は確率的であり、時には間違ってしまうかもしれません。

AIに聞く

from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result

# 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 クエリを実行するには sql_query メソッドを使用します。このメソッドは、SQL クエリを入力として受け取り、その結果を pandas データフレームとして返します。

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クエリの結果をプロットする

SQLクエリの結果をプロットすることもできます。 plot_sql_query メソッドと同じ引数を取る。このメソッドは 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

チップ

エクスプローラーは ランスDB テーブルを内部的に使用します。このテーブルには 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)

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

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

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

利用可能なベクトル・インデックスの種類とパラメータの詳細については、こちらをご覧ください。 将来的には、エクスプローラAPIから直接ベクトル・インデックスを作成するためのサポートを追加する予定です。

5.埋め込みアプリケーション

埋め込み表を使って、さまざまな探索的分析を行うことができる。以下にいくつかの例を示します:

類似性指数

エクスプローラーには similarity_index オペレーションを行う:

  • これは、各データポイントが残りのデータセットとどの程度類似しているかを推定しようとするものである。
  • よりも近い画像埋め込みがいくつあるかをカウントすることでこれを行う。 max_dist を,生成された埋め込み空間内の現在の画像に適用する。 top_k 同じような画像を一度に見ることができる。

これは、以下のカラムを持つpandasデータフレームを返す:

  • 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()

エクスプローラAPIを使用して、独自のCVデータセット調査レポートの作成を開始します。VOC Exploration Exampleをご覧ください。

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

エクスプローラAPIをベースにしたGUIデモをお試しください。

近日公開

  • [データセットから特定のラベルをマージします。例 - すべてをインポート person COCOと car シティスケープのラベル
  • [指定された閾値よりも高い類似度指数を持つ画像を削除します。
  • [エントリーをマージ/削除した後、新しいデータセットを自動的に永続化する。
  • [高度なデータセット視覚化

よくあるご質問

Ultralytics Explorer APIは何に使うのですか?

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

Ultralytics Explorer APIはどのようにインストールするのですか?

Ultralytics Explorer APIとその依存関係をインストールするには、以下のコマンドを使用する:

pip install ultralytics[explorer]

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

Ultralytics Explorer API を使って、embeddings テーブルを作成し、類似画像を検索することができます。以下に基本的な例を示します:

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を使用するメリットは何ですか?

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="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())

その他の例については、「AIに聞く」のセクションをご覧ください。

📅作成:1年前 ✏️更新しました 8日前

コメント