İçeriğe geç

Ultralytics Explorer API

Giriş

Colab'da Aç Explorer API, veri kümelerinizi keşfetmek için bir Python API'sidir. SQL sorguları, vektör benzerlik araması ve semantik arama kullanarak veri kümenizi filtrelemeyi ve aramayı destekler.



İzle: Ultralytics Explorer API'ye Genel Bakış

Kurulum

Explorer, bazı işlevleri için harici kütüphanelere bağlıdır. Bunlar kullanım sırasında otomatik olarak yüklenir. Bu bağımlılıkları manuel olarak yüklemek için aşağıdaki komutu kullanın:

pip install ultralytics[explorer]

Kullanım

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data='coco128.yaml', model='yolov8n.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)

Not

Belirli bir veri kümesi ve model çifti için gömme tablosu yalnızca bir kez oluşturulur ve yeniden kullanılır. Bunlar, disk üzerinde ölçeklenen LanceDB 'yi kullanır, böylece COCO gibi büyük veri kümeleri için bellek tükenmeden katıştırmalar oluşturabilir ve yeniden kullanabilirsiniz.

Katıştırmalar tablosunu güncellemeye zorlamak isterseniz force=True için create_embeddings_table yöntem.

Gelişmiş analiz gerçekleştirmek için LanceDB tablo nesnesine doğrudan erişebilirsiniz. Embeddings Tablosu ile Çalışma bölümünde bu konuda daha fazla bilgi edinin

Benzerlik araması, verilen bir görüntüye benzer görüntüleri bulmak için kullanılan bir tekniktir. Benzer görüntülerin benzer gömülmelere sahip olacağı fikrine dayanır. Gömme tablosu oluşturulduktan sonra, anlamsal aramayı aşağıdaki yollardan herhangi biriyle çalıştırabilirsiniz:

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

Semantik Arama

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.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='yolov8n.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())

Benzer Görüntüleri Çizme

Ayrıca benzer görüntüleri plot_similar yöntemi. Bu yöntem, aşağıdaki gibi aynı argümanları alır get_similar ve benzer görüntüleri bir ızgarada çizer.

Benzer Görüntüleri Çizme

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.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='yolov8n.pt')
exp.create_embeddings_table()

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

2. Ask AI (Doğal Dil Sorgulama)

Bu, doğal dil kullanarak veri kümenizi nasıl filtrelemek istediğinizi yazmanıza olanak tanır. SQL sorguları yazma konusunda yetkin olmanız gerekmez. Yapay zeka destekli sorgu oluşturucumuz bunu kaputun altında otomatik olarak yapacaktır. Örneğin - "bana tam olarak bir kişi ve 2 köpek içeren 100 resim göster" diyebilirsiniz. Başka nesneler de olabilir" dediğinizde, sorguyu dahili olarak oluşturacak ve size bu sonuçları gösterecektir. Not: Bu, kaputun altında LLM'leri kullanarak çalışır, bu nedenle sonuçlar olasılıksaldır ve bazen yanlış şeyler yapabilir

Yapay Zekaya Sor

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


# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.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 Sorgulama

Veri kümeniz üzerinde SQL sorguları çalıştırabilirsiniz. sql_query yöntemini kullanır. Bu yöntem girdi olarak bir SQL sorgusu alır ve sonuçları içeren bir pandas veri çerçevesi döndürür.

SQL Sorgusu

from ultralytics import Explorer

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

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

SQL Sorgu Sonuçlarını Çizme

Ayrıca bir SQL sorgusunun sonuçlarını plot_sql_query yöntemi. Bu yöntem, aşağıdaki gibi aynı argümanları alır sql_query ve sonuçları bir ızgarada çizer.

SQL Sorgu Sonuçlarını Çizme

from ultralytics import Explorer

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

# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")

4. Gömüler Tablosu ile Çalışma

Gömüler tablosu ile doğrudan da çalışabilirsiniz. Katıştırmalar tablosu oluşturulduktan sonra, bu tabloya Explorer.table

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.

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

Tablo ile neler yapabileceğinize dair bazı örnekler aşağıda verilmiştir:

Ham Katıştırmaları alın

Örnek

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

embeddings = table.to_pandas()["vector"]
print(embeddings)

Ön ve son filtrelerle Gelişmiş Sorgulama

Örnek

from ultralytics import Explorer

exp = Explorer(model="yolov8n.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)

Vektör Dizini Oluşturma

Büyük veri kümeleri kullanırken, daha hızlı sorgulama için özel bir vektör dizini de oluşturabilirsiniz. Bu işlem şu şekilde yapılır create_index yöntemini LanceDB tablosunda kullanabilirsiniz.

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

Mevcut vektör indeksleri ve parametreleri hakkında daha fazla bilgiyi burada bulabilirsiniz Gelecekte, doğrudan Explorer API'den vektör indeksleri oluşturma desteği ekleyeceğiz.

5. Gömme Uygulamaları

Katıştırmalar tablosunu çeşitli keşif analizleri gerçekleştirmek için kullanabilirsiniz. İşte bazı örnekler:

Benzerlik Endeksi

Explorer ile birlikte gelir 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üye top_k bir seferde benzer görüntüler.

Aşağıdaki sütunlara sahip bir pandas veri çerçevesi döndürür:

  • idx: Veri kümesindeki görüntünün indeksi
  • im_file: Görüntü dosyasının yolu
  • count: Veri kümesindeki aşağıdaki değerlerden daha yakın olan görüntülerin sayısı max_dist geçerli görüntüye
  • sim_im_files: Yolların listesi count benzer görüntüler

İpucu

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.

Benzerlik Endeksi

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

Veri kümesini filtrelemek üzere özel koşullar oluşturmak için benzerlik indeksini kullanabilirsiniz. Örneğin, aşağıdaki kodu kullanarak veri kümesindeki başka herhangi bir görüntüye benzemeyen görüntüleri filtreleyebilirsiniz:

import numpy as np

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

Gömme Alanını Görselleştirin

Ayrıca, seçtiğiniz çizim aracını kullanarak gömme alanını görselleştirebilirsiniz. Örneğin burada matplotlib kullanarak basit bir örnek verilmiştir:

import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

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

Explorer API'sini kullanarak kendi CV veri seti keşif raporlarınızı oluşturmaya başlayın. İlham almak için

Ultralytics Explorer Kullanılarak Oluşturulan Uygulamalar

Explorer API tabanlı GUI Demomuzu deneyin

Çok Yakında

  • [ ] Veri kümelerinden belirli etiketleri birleştirin. Örnek - Tümünü içe aktar person COCO'dan etiketler ve car Şehir Manzaraları etiketleri
  • [ ] Verilen eşikten daha yüksek benzerlik indeksine sahip görüntüleri kaldırın
  • [ ] Girişleri birleştirdikten/kaldırdıktan sonra yeni veri kümelerini otomatik olarak kalıcı hale getirme
  • [ ] Gelişmiş Veri Kümesi Görselleştirmeleri


Oluşturma 2024-01-07, Güncelleme 2024-04-27
Yazarlar: glenn-jocher (8), 0xSynapse (1), RizwanMunawar (2), AyushExel (2)

Yorumlar