İçeriğe geç

VOC Keşif Örneği

Ultralytics Explorer API not defterine hoş geldiniz! Bu not defteri, Ultralytics'i kullanarak anlamsal arama gücüyle veri kümelerinizi keşfetmeye başlamanıza yardımcı olacak çeşitli kaynakları keşfetmek için bir başlangıç noktası görevi görür. Vektör araması veya hatta SQL sorguları kullanarak belirli etiket türlerini incelemenize olanak tanıyan kullanıma hazır yardımcı programları kullanabilirsiniz.

Deneyin yolo explorer Explorer API tarafından desteklenmektedir

Sadece pip install ultralytics ve çalıştırın yolo explorer tarayıcınızın içinden veri kümelerinizde özel sorgular çalıştırmak ve semantik arama yapmak için terminalinizde!

Topluluk Notu ⚠️

İtibarıyla ultralytics>=8.3.10, Ultralytics explorer desteği kullanımdan kaldırılmıştır. Ama endişelenmeyin! Artık benzer ve hatta geliştirilmiş işlevlere şuradan erişebilirsiniz: Ultralytics HUB, iş akışınızı kolaylaştırmak için tasarlanmış sezgisel, kodsuz platformumuz. Ultralytics HUB ile, tek bir kod satırı yazmadan verilerinizi zahmetsizce keşfetmeye, görselleştirmeye ve yönetmeye devam edebilirsiniz. Kontrol ettiğinizden ve güçlü özelliklerinden yararlandığınızdan emin olun!🚀

Kurulum

Pip kurulumu ultralytics ve bağımlılıklar ve yazılım ve donanımı kontrol edin.

!uv pip install ultralytics[explorer] openai
yolo checks

Veri kümenizdeki benzer veri noktalarını ve bunların gömme uzayındaki mesafesini bulmak için vektör benzerliği aramasının gücünden yararlanın. Verilen veri kümesi-model çifti için basitçe bir gömme tablosu oluşturun. Bu yalnızca bir kez gereklidir ve otomatik olarak yeniden kullanılır.

exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

Gömme tablosu oluşturulduktan sonra, aşağıdaki yollardan herhangi biriyle semantik arama çalıştırabilirsiniz:

  • Veri kümesindeki belirli bir indekste / indeks listesinde - örneğin exp.get_similar(idx=[1,10], limit=10)
  • Veri kümesinde olmayan herhangi bir resimde / resim listesinde - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) Birden fazla girdi olması durumunda, bunların gömülmelerinin toplamı kullanılır.

Girişe en benzer olan ve sınırlandırılmış sayıda veri noktasını, gömme uzayındaki mesafeleriyle birlikte içeren bir pandas veri çerçevesi elde edersiniz. Bu veri kümesini daha fazla filtreleme işlemi yapmak için kullanabilirsiniz.

Benzerlik arama tablosu

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()

Ayrıca benzer örnekleri doğrudan kullanarak çizebilirsiniz plot_similar util

Benzerlik arama resmi 1

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

Benzerlik arama resmi 2

AI'ya Sor: Doğal Dil ile Arama veya Filtreleme

Explorer nesnesine görmek istediğiniz veri noktalarının türünü sorabilirsiniz ve o da bu verilere sahip bir veri çerçevesi döndürmeye çalışacaktır. LLM'ler tarafından desteklendiği için her zaman doğru sonuç vermeyebilir. Bu durumda, None döndürür.

AI'ya tablo sor

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)

Bu sonuçları çizmek için şunu kullanabilirsiniz: plot_query_result util Örnek:

plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)

AI'ya resim 1'i sor

# 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)

Veri Kümenizde SQL sorguları çalıştırın

Bazen veri kümenizdeki belirli bir girdi türünü incelemek isteyebilirsiniz. Bu amaçla Explorer, SQL sorguları çalıştırmanıza olanak tanır. Aşağıdaki biçimlerden birini kabul eder:

  • "WHERE" ile başlayan sorgular otomatik olarak tüm sütunları seçecektir. Bu, bir kısaltma sorgusu olarak düşünülebilir.
  • Ayrıca hangi sütunların seçileceğini belirtebileceğiniz tam sorgular da yazabilirsiniz.

Bu, model performansını ve belirli veri noktalarını araştırmak için kullanılabilir. Örneğin:

  • diyelim ki modeliniz insanlar ve köpeklerin olduğu görüntülerde zorlanıyor. En az 2 insan VE en az bir köpek içeren noktaları seçmek için şöyle bir sorgu yazabilirsiniz.

Belirli sonuç türlerine filtre uygulamak için SQL sorgusunu ve semantik aramayı birleştirebilirsiniz.

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)

SQL sorguları tablosu

table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)

Tıpkı benzerlik araması gibi, sql sorgularını doğrudan çizmek için de bir araç elde edersiniz. exp.plot_sql_query

SQL sorguları resim 1

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)

Gömme Tablosu ile Çalışmak (Gelişmiş)

Explorer üzerinde çalışır LanceDB tabloları dahili olarak kullanır. Bu tabloya doğrudan erişebilirsiniz, kullanarak Explorer.table nesnesi ve ham sorgular çalıştırın, ön ve son filtreleri aşağı itin vb.

table = exp.table
print(table.schema)

Ham sorguları çalıştırın¶

Vektör Araması, veritabanından en yakın vektörleri bulur. Bir öneri sistemi veya arama motorunda, aradığınız ürüne benzer ürünleri bulabilirsiniz. LLM ve diğer yapay zeka uygulamalarında, her veri noktası bazı modellerden oluşturulan gömülerle sunulabilir, bu da en alakalı özellikleri döndürür.

Yüksek boyutlu vektör uzayında bir arama, sorgu vektörünün K-En Yakın Komşularını (KNN) bulmaktır.

LanceDB'de Metrik, bir vektör çifti arasındaki mesafeyi tanımlama yoludur. Şu anda aşağıdaki metrikleri desteklemektedir:

  • L2
  • Kosinüs
  • Dot Explorer'ın benzerlik araması varsayılan olarak L2'yi kullanır. Tablolarda doğrudan sorgular çalıştırabilir veya veri kümelerini yönetmek için özel araçlar oluşturmak üzere lance formatını kullanabilirsiniz. Mevcut LanceDB tablo işlemlerine ilişkin daha fazla ayrıntı için belgelere bakın

Ham-sorgu-tablosu

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

Gömme İşlemleriyle Çalışma

Ham gömülmeye lancedb Tablosundan erişebilir ve analiz edebilirsiniz. Görüntü katıştırmaları sütunda saklanır vector

import numpy as np

embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)

Saçılım grafiği

Gömülmeleri analiz etmenin ön adımlarından biri, boyut indirgeme yoluyla bunları 2B uzayda çizmektir. Bir örnek deneyelim

Dağılım Grafiği Örneği

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

Benzerlik Endeksi

İşte gömme tablosu tarafından desteklenen bir işlemin basit bir örneği. Explorer ile birlikte gelir similarity_index işlem-

  • Her bir veri noktasının veri kümesinin geri kalanıyla ne kadar benzer olduğunu tahmin etmeye çalışır.
  • Bunu, oluşturulan gömme alanında mevcut görüntüye max_dist'ten daha yakın olan kaç tane görüntü gömmesinin olduğunu sayarak yapar ve aynı anda top_k benzer görüntüleri dikkate alır.

Belirli bir veri kümesi, model için, max_dist & top_k benzerlik indeksi oluşturulduktan sonra yeniden kullanılacaktır. Veri kümeniz değiştiyse veya sadece benzerlik indeksini yeniden oluşturmanız gerekiyorsa, şunu geçirebilirsiniz force=True. Vektör ve SQL aramasına benzer şekilde, bu da doğrudan çizmek için bir araçla birlikte gelir. Bir bakalım:

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)

Benzerlik Endeksi

önce grafikte

exp.plot_similarity_index(max_dist=0.2, top_k=0.01)

Şimdi işlemin çıktısına bakalım

sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)

sim_idx

30'dan fazla benzerlik sayısına sahip veri noktalarını görmek ve onlara benzer görüntüleri çizmek için bir sorgu oluşturalım.

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]

Bunun gibi bir şey görmelisiniz

benzerlik-indeksi-resmi

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


📅 10 ay önce oluşturuldu ✏️ 9 gün önce güncellendi

Yorumlar