VOC Keşif Örneği¶
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
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ı olarak hizmet vermektedir. Vektör araması ve hatta SQL sorguları kullanarak belirli etiket türlerini incelemenize olanak tanıyan kutudan çıkan yardımcı programları kullanabilirsiniz.
Bu not defterindeki kaynakların Ultralytics adresinden en iyi şekilde yararlanmanıza yardımcı olacağını umuyoruz. Lütfen ayrıntılar için Explorer Docs 'a göz atın, destek için GitHub 'da bir sorun oluşturun ve sorularınız ve tartışmalarınız için Discord topluluğumuza katılın!
Deneyin yolo explorer
Exlorer 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!
Setup¶
Pip kurulumu ultralytics
ve bağımlılıklar ve yazılım ve donanımı kontrol edin.
%pip install ultralytics[explorer] openai
import ultralytics
ultralytics.checks()
gelen ultralytics İthalat Kaşif
Benzerlik araması¶
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 = Kaşif("VOC.yaml", model="yolov8n.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.
ile bir pandas veri çerçevesi elde edersiniz. limit
Girişe en çok benzeyen veri noktalarının sayısı ve bunların gömme uzayındaki mesafeleri. Bu veri kümesini daha fazla filtreleme yapmak için kullanabilirsiniz
benzer = exp.get_similar(idx=1, limit=10)
benzer.Kafa()
Benzer örnekleri doğrudan çizmek için plot_similar
kullanım
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. Yapay Zekaya Sor: Doğal Dil ile ara veya filtrele¶
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.
df = exp.ask_ai("bana en az 2 kişi ile 10'dan fazla nesne içeren resimler göster")
df.Kafa(5)
Bu sonuçları çizmek için plot_query_result
kullanım
Örnek:
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. 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ısa el sorgusu 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
masa = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LİMİT 10")
masa
Benzerlik aramasında olduğu gibi, sql sorgularını doğrudan çizmek için de bir kullanım elde edersiniz exp.plot_sql_query
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LİMİT 10", etiketler=Doğru)
masa = exp.Masa
masa.Şema
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
- Nokta 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ı
dummy_img_embedding = [i için i içinde aralık(256)]
masa.arama(dummy_img_embedding).limit(5).to_pandas()
Popüler veri formatlarına dönüştürme¶
df = masa.to_pandas()
pa_table = masa.to_arrow()
Embeddings ile çalışın¶
Ham gömülmeye lancedb Tablosundan erişebilir ve analiz edebilirsiniz. Görüntü katıştırmaları sütunda saklanır vector
İthalat numpy olarak np
katıştırmalar = masa.to_pandas()["vektör"].tolist()
katıştırmalar = np.dizi(katıştırmalar)
Scatterplot¶
Gömülmeleri analiz etmenin ön adımlarından biri, boyut indirgeme yoluyla bunları 2B uzayda çizmektir. Bir örnek deneyelim
!pip yükleyin scikit-öğrenmek --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. 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, kaç tane görüntü katıştırmasının aşağıdaki değerlerden daha yakın olduğunu sayarak yapar
max_dist
göz önünde bulundurularak, oluşturulan gömme uzayında mevcut görüntüyetop_k
bir seferde benzer görüntüler.
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. Önce grafiğe bakalım
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
Şimdi işlemin çıktısına bakalım
İthalat numpy olarak np
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, kuvvet=Yanlış)
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
exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images