Bỏ để qua phần nội dung

Ultralytics Explorer API

Giới thiệu

Mở trong Colab API Explorer là một Python API để khám phá bộ dữ liệu của bạn. Nó hỗ trợ lọc và tìm kiếm tập dữ liệu của bạn bằng cách sử dụng các truy vấn SQL, tìm kiếm tương tự vectơ và tìm kiếm ngữ nghĩa.



Xem: Ultralytics Tổng quan về API Explorer

Cài đặt

Explorer phụ thuộc vào các thư viện bên ngoài cho một số chức năng của nó. Chúng được tự động cài đặt khi sử dụng. Để cài đặt thủ công các phần phụ thuộc này, hãy sử dụng lệnh sau:

pip install ultralytics[explorer]

Sử dụng

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)

Ghi

Bảng nhúng cho một cặp dữ liệu và cặp mô hình nhất định chỉ được tạo một lần và được sử dụng lại. Chúng sử dụng LanceDB dưới mui xe, có quy mô trên đĩa, vì vậy bạn có thể tạo và tái sử dụng nhúng cho các bộ dữ liệu lớn như COCO mà không hết bộ nhớ.

Trong trường hợp bạn muốn buộc cập nhật bảng nhúng, bạn có thể vượt qua force=True đến create_embeddings_table phương pháp.

Bạn có thể truy cập trực tiếp vào đối tượng bảng LanceDB để thực hiện phân tích nâng cao. Tìm hiểu thêm về nó trong phần Làm việc với Bảng Nhúng

Tìm kiếm tương tự là một kỹ thuật để tìm hình ảnh tương tự với một hình ảnh nhất định. Nó dựa trên ý tưởng rằng các hình ảnh tương tự sẽ có nhúng tương tự. Sau khi bảng nhúng được xây dựng, bạn có thể chạy tìm kiếm ngữ nghĩa theo bất kỳ cách nào sau đây:

  • Trên một chỉ mục hoặc danh sách các chỉ số nhất định trong tập dữ liệu: exp.get_similar(idx=[1,10], limit=10)
  • Trên bất kỳ hình ảnh hoặc danh sách hình ảnh nào không có trong tập dữ liệu: exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

Trong trường hợp có nhiều đầu vào, tổng hợp các nhúng của chúng được sử dụng.

Bạn nhận được một khung dữ liệu gấu trúc với limit Số lượng các điểm dữ liệu tương tự nhất với đầu vào, cùng với khoảng cách của chúng trong không gian nhúng. Bạn có thể sử dụng tập dữ liệu này để thực hiện lọc thêm

Tìm kiếm ngữ nghĩa

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

Vẽ hình ảnh tương tự

Bạn cũng có thể vẽ các hình ảnh tương tự bằng cách sử dụng plot_similar phương pháp. Phương pháp này có các đối số tương tự như get_similar và vẽ các hình ảnh tương tự trong một lưới.

Vẽ hình ảnh tương tự

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 (Truy vấn ngôn ngữ tự nhiên)

Điều này cho phép bạn viết cách bạn muốn lọc tập dữ liệu của mình bằng ngôn ngữ tự nhiên. Bạn không cần phải thành thạo trong việc viết các truy vấn SQL. Trình tạo truy vấn được hỗ trợ bởi AI của chúng tôi sẽ tự động thực hiện điều đó dưới mui xe. Ví dụ: - bạn có thể nói - "cho tôi xem 100 hình ảnh với chính xác một người và 2. Cũng có thể có các đối tượng khác" và nó sẽ tạo truy vấn nội bộ và hiển thị cho bạn những kết quả đó. Lưu ý: Điều này hoạt động bằng cách sử dụng LLM dưới mui xe để kết quả có xác suất và đôi khi có thể gặp sự cố

Hỏi AI

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 Truy vấn

Bạn có thể chạy các truy vấn SQL trên tập dữ liệu của mình bằng cách sử dụng sql_query phương pháp. Phương thức này lấy một truy vấn SQL làm đầu vào và trả về một khung dữ liệu gấu trúc với kết quả.

Truy vấn SQL

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

Vẽ kết quả truy vấn SQL

Bạn cũng có thể vẽ kết quả của truy vấn SQL bằng cách sử dụng plot_sql_query phương pháp. Phương pháp này có các đối số tương tự như sql_query và vẽ kết quả trong lưới.

Vẽ kết quả truy vấn SQL

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. Làm việc với Embeddings Table

Bạn cũng có thể làm việc trực tiếp với bảng nhúng. Khi bảng nhúng được tạo, bạn có thể truy cập nó bằng cách sử dụng Explorer.table

Explorer hoạt động trên LanceDB bảng nội bộ. Bạn có thể truy cập bảng này trực tiếp, bằng cách sử dụng Explorer.table Đối tượng và chạy các truy vấn thô, đẩy xuống các bộ lọc trước và sau, v.v.

from ultralytics import Explorer

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

Dưới đây là một số ví dụ về những gì bạn có thể làm với bảng:

Nhận nhúng thô

Ví dụ

from ultralytics import Explorer

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

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

Truy vấn nâng cao với bộ lọc trước và sau

Ví dụ

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)

Tạo chỉ mục vector

Khi sử dụng các tập dữ liệu lớn, bạn cũng có thể tạo chỉ mục vectơ chuyên dụng để truy vấn nhanh hơn. Điều này được thực hiện bằng cách sử dụng create_index phương thức trên bảng LanceDB.

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

Tìm thêm chi tiết về các chỉ số vectơ loại có sẵn và các tham số tại đây Trong tương lai, chúng tôi sẽ thêm hỗ trợ để tạo chỉ số vectơ trực tiếp từ API Explorer.

5. Nhúng ứng dụng

Bạn có thể sử dụng bảng nhúng để thực hiện nhiều phân tích thăm dò khác nhau. Dưới đây là một số ví dụ:

Chỉ số tương tự

Explorer đi kèm với một similarity_index hoạt động:

  • Nó cố gắng ước tính mức độ tương tự của mỗi điểm dữ liệu với phần còn lại của tập dữ liệu.
  • Nó thực hiện điều đó bằng cách đếm có bao nhiêu hình ảnh nhúng nằm gần hơn max_dist đến hình ảnh hiện tại trong không gian nhúng được tạo, xem xét top_k hình ảnh tương tự tại một thời điểm.

Nó trả về một khung dữ liệu gấu trúc với các cột sau:

  • idx: Chỉ mục của hình ảnh trong tập dữ liệu
  • im_file: Đường dẫn đến tệp hình ảnh
  • count: Số lượng hình ảnh trong tập dữ liệu gần hơn max_dist đến hình ảnh hiện tại
  • sim_im_files: Danh sách các đường dẫn đến count Hình ảnh tương tự

Mẹo

Đối với một tập dữ liệu, mô hình nhất định, max_dist & top_k Chỉ số tương tự sau khi được tạo sẽ được sử dụng lại. Trong trường hợp, tập dữ liệu của bạn đã thay đổi hoặc bạn chỉ cần tạo lại chỉ số tương tự, bạn có thể vượt qua force=True.

Chỉ số tương tự

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

Bạn có thể sử dụng chỉ mục tương tự để xây dựng các điều kiện tùy chỉnh nhằm lọc ra tập dữ liệu. Ví dụ: bạn có thể lọc ra hình ảnh không giống với bất kỳ hình ảnh nào khác trong tập dữ liệu bằng cách sử dụng mã sau:

import numpy as np

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

Trực quan hóa không gian nhúng

Bạn cũng có thể hình dung không gian nhúng bằng công cụ vẽ mà bạn chọn. Ví dụ, đây là một ví dụ đơn giản sử dụng matplotlib:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
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 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()

Bắt đầu tạo báo cáo khám phá tập dữ liệu CV của riêng bạn bằng API Explorer. Để có cảm hứng, hãy xem

Ứng dụng được xây dựng bằng cách sử dụng Ultralytics Explorer

Hãy thử Bản demo GUI của chúng tôi dựa trên API Explorer

Đến sớm

  • [ ] Hợp nhất các nhãn cụ thể từ tập dữ liệu. Ví dụ - Nhập tất cả person nhãn từ COCO và car nhãn từ Cityscapes
  • [ ] Xóa hình ảnh có chỉ số tương tự cao hơn ngưỡng đã cho
  • [ ] Tự động duy trì các bộ dữ liệu mới sau khi hợp nhất / xóa các mục nhập
  • [ ] Trực quan hóa tập dữ liệu nâng cao


Created 2024-01-07, Updated 2024-06-02
Authors: glenn-jocher (10), 0xSynapse (1), RizwanMunawar (2), AyushExel (2)

Ý kiến