İçeriğe geç

VOC Keşif Örneği

Ultralytics Explorer API not defterine hoş geldiniz! Bu not defteri, anlamsal aramanın gücünü kullanarak veri kümelerinizi keşfetmek için Ultralytics adresini kullanmaya 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ı ve hatta SQL sorguları kullanarak belirli etiket türlerini incelemenize olanak tanıyan kutudan çıkan yardımcı programları kullanabilirsiniz.

Deneyin yolo explorer Explorer API tarafından desteklenmektedir

Basitçe pip install ultralytics ve koş yolo explorer terminalinizde özel sorgular çalıştırmak ve veri kümelerinizde doğrudan tarayıcınızın içinde semantik arama yapmak için!

Topluluk Notu ⚠️

İtibariyle ultralytics>=8.3.10, Ultralytics explorer desteği kullanımdan kaldırılmıştır. Ama endişelenmeyin! Artık benzer ve hatta gelişmiş işlevselliğe şu yolla erişebilirsiniz Ultralytics HUBiş akışınızı kolaylaştırmak için tasarlanmış sezgisel kodsuz platformumuz. Ultralytics HUB ile tek bir satır kod yazmadan verilerinizi zahmetsizce keşfetmeye, görselleştirmeye ve yönetmeye devam edebilirsiniz. Mutlaka göz atın ve güçlü özelliklerinden yararlanın!🚀

Kurulum

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

%pip install ultralytics[explorer] openai
yolo checks

Veri kümenizdeki benzer veri noktalarını gömme uzayındaki uzaklıklarıyla birlikte bulmak için vektör benzerlik aramasının gücünden yararlanın. Verilen veri kümesi-model çifti için bir gömme tablosu oluşturmanız yeterlidir. Yalnızca bir kez gereklidir ve otomatik olarak yeniden kullanılır.

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

Yerleştirmeler tablosu oluşturulduktan sonra, anlamsal aramayı aşağıdaki yollardan herhangi biriyle çalıştırabilirsiniz:

  • Veri kümesindeki belirli bir dizin / dizin listesi üzerinde - exp.get_similar(idx=[1,10], limit=10)
  • Veri kümesinde olmayan herhangi bir görüntü/görüntü listesi üzerinde - 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.

Girdiye en çok benzeyen veri noktalarının sınır sayısı ile birlikte gömme uzayında uzaklıklarını içeren bir pandas veri çerçevesi elde edersiniz. Bu veri kümesini daha fazla filtreleme yapmak için kullanabilirsiniz

Benzerlik arama tablosu

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

Benzer örnekleri doğrudan çizmek için plot_similar kullanım

Benzerlik arama görüntüsü 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 görüntüsü 2

Ask AI: Doğal Dil ile arama yapın veya filtreleyin

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

AI masasına 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 plot_query_result kullanım Örneği:

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

AI görüntüsüne sor 1

# 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ümeniz üzerinde SQL sorguları çalıştırın

Bazen veri kümenizdeki belirli bir tür girdiyi araştırmak isteyebilirsiniz. Bunun için Explorer SQL sorguları çalıştırmanıza izin verir. Biçimlerden herhangi birini kabul eder:

  • "WHERE" ile başlayan sorgular otomatik olarak tüm sütunları seçecektir. Bu, kısaltılmış bir sorgu olarak düşünülebilir
  • 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 insan ve köpek içeren görüntüler üzerinde çalışıyor. En az 2 insan VE en az bir köpek olan noktaları seçmek için aşağıdaki gibi bir sorgu yazabilirsiniz.

Belirli sonuç türlerini filtrelemek için SQL sorgusu 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)

Benzerlik aramasında olduğu gibi, sql sorgularını doğrudan çizmek için de bir kullanım elde edersiniz exp.plot_sql_query

SQL sorguları görüntü 1

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

Yerleştirmeler Tablosu ile çalışma (İleri Düzey)

Explorer üzerinde çalışır LanceDB tabloları dahili olarak. Bu tabloya doğrudan erişmek için Explorer.table nesnesini kullanabilir ve ham sorgular çalıştırabilir, ön ve son filtreleri aşağı itebilir vb.

table = exp.table
print(table.schema)

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

Vektör Arama, veritabanından en yakın vektörleri bulur. Bir öneri sisteminde 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 üretilen gömüler tarafından sunulabilir, en alakalı özellikleri döndürür.

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

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

  • L2
  • Kosinüs
  • Dot Explorer'ın benzerlik araması varsayılan olarak L2 kullanır. Tablolar üzerinde doğrudan sorgular çalıştırabilir veya veri kümelerini yönetmek için özel yardımcı programlar oluşturmak üzere lance biçimini kullanabilirsiniz. Dokümanlarda mevcut LanceDB tablo işlemleri hakkında daha fazla ayrıntı

Raw-queries-table

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ömülerle Ç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)

Scatterplot

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

Scatterplot Ö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 embeddings tablosu tarafından desteklenen bir işlemin basit bir örneği. Explorer bir similarity_index operasyon-

  • Her bir veri noktasının veri kümesinin geri kalanıyla ne kadar benzer olduğunu tahmin etmeye çalışır.
  • Bunu, bir seferde en_k benzer görüntüyü göz önünde bulundurarak, oluşturulan gömme uzayında mevcut görüntüye max_dist'ten daha yakın kaç görüntü gömme olduğunu sayarak yapar.

Belirli bir veri kümesi için model, max_dist & top_k bir kez oluşturulan benzerlik indeksi yeniden kullanılacaktır. Veri kümeniz değiştiyse veya benzerlik indeksini yeniden oluşturmanız gerekiyorsa force=True. Vektör ve SQL aramasına benzer şekilde, bu da doğrudan çizmek için bir util ile birlikte gelir. 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 arsada

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

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

import numpy as np

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

Şuna benzer bir şey görmelisiniz

similarity-index-image

exp.plot_similar(idx=[7146, 14035])  # Using avg embeddings of 2 images
📅1 ay önce oluşturuldu ✏️ 27 gün önce güncellendi

Yorumlar