VOC探査の例¶。
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Ultralytics Explorer API ノートブックへようこそ! このノートブックは、Ultralytics を使用して、セマンティック検索の力を使ってデータセットを探索することを始めるのに役立つ、利用可能なさまざまなリソースを探索するための出発点となります。ベクトル検索やSQLクエリを使用して、特定のタイプのラベルを調べることができるユーティリティをすぐに利用できます。
このノートブックのリソースが、Ultralytics を最大限に活用するための一助となれば幸いです。詳細はエクスプローラ・ドキュメントを参照し、サポートについてはGitHubで問題を提起し、質問や議論についてはDiscordコミュニティに参加してください!
試す yolo explorer
エクスプローラAPI
単に pip install ultralytics
そして yolo explorer
を使えば、ブラウザ上でデータセットのカスタムクエリやセマンティック検索を実行することができます!
%pip install ultralytics[explorer] openai
import ultralytics
ultralytics.checks()
から ultralytics インポート エクスプローラ
類似検索
ベクトル類似度検索のパワーを利用して、データセット中の類似データ点を、埋め込み空間における距離とともに見つけることができます。与えられたデータセットとモデルのペアに対して、埋め込みテーブルを作成するだけです。必要なのは一度だけで、自動的に再利用されます。
エキスポート = エクスプローラ("VOC.yaml", モデル="yolov8n.pt")
exp.create_embeddings_テーブル()
埋め込みテーブルが構築されると、以下のいずれかの方法でセマンティック検索を実行することができます:
- データセット中の指定されたインデックス/インデックスのリストに対して、以下のように実行する。
exp.get_similar(idx=[1,10], limit=10)
- データセットに含まれていない画像/画像リストについて
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
複数の入力がある場合は、それらの埋め込み値の集合体が使用される。
でpandasデータフレームを取得します。 limit
入力と最も類似したデータ点の数と、埋め込み空間におけるそれらの距離。このデータセットを使って、さらにフィルタリングを行うことができる
同様 = 経験値.get_similar(idx=1, リミット=10)
同様.頭()
を使用して、類似サンプルを直接プロットすることもできます。 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 any external images
2.AIに聞く:自然言語で検索またはフィルタリング¶。
エクスプローラー・オブジェクトに見たいデータ・ポイントの種類を入力すると、それを含むデータ・フレームを返そうとする。エクスプローラーはLLMで動いているため、常に正しく動作するとは限りません。その場合はNoneを返します。
df = exp.ask_ai("少なくとも2人の人物が写っている10枚以上のオブジェクトを含む画像を表示してください")
df.ヘッド(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)
3.データセットに対してSQLクエリーを実行する。
データセット内のある種のエントリーを調査したい場合がある。このような場合、エクスプローラーはSQLクエリーを実行することができる。 SQLクエリーは、以下のいずれかの形式で実行できます:
- WHERE "で始まるクエリは、自動的にすべてのカラムを選択する。これはショートハンドクエリと考えることができます。
- どのカラムを選択するかを指定できる完全なクエリを書くこともできます。
これは、モデルのパフォーマンスや特定のデータポイントを調査するために使用することができます。例えば
- 例えば、あなたのモデルが人間と犬のいる画像で格闘しているとしよう。このようなクエリを書いて、少なくとも2人の人間と少なくとも1匹の犬がいるポイントを選択することができます。
SQLクエリーとセマンティック検索を組み合わせることで、特定のタイプの結果を絞り込むことができます。
テーブル = 表.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
テーブル
類似性検索と同様に、次のようなSQLクエリを直接プロットするユーティリティもある。 exp.plot_sql_query
.エキスパード.プロット_sql_クエリ("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", ラベル=真)
テーブル = 表.テーブル
テーブル.スキーマ
生のクエリを実行する¶。
ベクトル検索は、データベースから最も近いベクトルを検索します。推薦システムや検索エンジンでは、検索した商品の類似商品を見つけることができる。LLMや他のAIアプリケーションでは、各データポイントは、いくつかのモデルから生成された埋め込みによって提示することができ、それは最も関連性の高い特徴を返します。
高次元ベクトル空間での検索は、クエリベクトルのK-最近傍(KNN)を見つけることである。
メトリック LanceDB では、Metric はベクトルのペア間の距離を表す方法です。現在、以下のメトリックをサポートしています:
- L2
- コサイン
- ドット エクスプローラーの類似検索はデフォルトでL2を使用する。テーブルに対して直接クエリを実行したり、ランスフォーマットを使用してデータセットを管理するカスタムユーティリティを構築することができます。利用可能な LanceDB テーブル操作の詳細については、ドキュメントを参照してください。
ダミー画像埋め込み = [i に対して i の 範囲(256)]
テーブル.検索(dummy_img_embedding).制限(5).to_pandas()
一般的なデータフォーマットへの相互変換
df = テーブル.to_pandas()
pa_table = テーブル.to_arrow()
埋め込みを使った作業
lancedbテーブルから生の埋め込みにアクセスし、解析することができます。画像埋め込みは vector
インポート numpy として np
埋め込み = テーブル.to_pandas()["ベクトル"].トーリスト()
埋め込み = np.配列(埋め込み)
散布図
埋め込みを分析する前段階の1つは、次元削減によって埋め込みを2次元空間にプロットすることです。例として
!ピップ インストール scikit-学ぶ --q
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
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'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()
4.類似性指数
埋め込みテーブルを利用した簡単な操作の例を示します。エクスプローラには similarity_index
操作
- これは、各データ点がデータセットの残りの部分とどの程度類似しているかを推定しようとするものである。
- よりも近い画像埋め込みがいくつあるかをカウントすることでこれを行う。
max_dist
を,生成された埋め込み空間内の現在の画像に適用する。top_k
同じような画像を一度に見ることができる。
与えられたデータセットに対して、モデル、 max_dist
& top_k
を渡すと、一度生成された類似度インデックスが再利用される。データセットが変更された場合、あるいは単に類似度インデックスを再生成する必要がある場合、次のように渡すことができます。 force=True
.
ベクトル検索やSQL検索と同様に、これにも直接プロットするためのutilが付属している。まずプロットを見てみよう。
.エキスパード.プロット_類似度指数(max_dist=0.2, top_k=0.01)
では、操作の出力を見てみよう。
インポート numpy として np
sim_idx = exp.類似性インデックス(max_dist=0.2, top_k=0.01, 力=偽)
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