Ultralytics Explorer API

Lưu ý từ cộng đồng ⚠️

Kể từ phiên bản ultralytics>=8.3.12, Ultralytics Explorer đã bị loại bỏ. Để sử dụng Explorer, hãy cài đặt pip install ultralytics==8.3.11. Các tính năng khám phá tập dữ liệu tương tự (và mở rộng hơn) hiện có sẵn trong Ultralytics Platform.

Giới thiệu

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



Watch: Ultralytics Explorer API Overview

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ác thư viện này được tự động cài đặt khi bạn sử dụng Explorer. Để cài đặt thủ công các phụ thuộc này, hãy sử dụng lệnh sau:

pip install ultralytics[explorer]

Cách sử dụng

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo26n.pt")

# Create embeddings for your dataset
explorer.create_embeddings_table()

# Search for similar images to a given image/images
df = explorer.get_similar(img="path/to/image.jpg")

# Or search for similar images to a given index/indices
df = explorer.get_similar(idx=0)
Lưu ý

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

Trong trường hợp bạn muốn bắt buộc cập nhật bảng embeddings, bạn có thể truyền force=True vào phương thức create_embeddings_table.

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 trong phần Làm việc với Bảng Embeddings

1. Tìm kiếm Tương đồng

Tìm kiếm tương đồng là một kỹ thuật tìm các 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ó các embeddings tương tự nhau. Sau khi bảng embeddings đượ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 dưới đây:

  • Trên một chỉ mục hoặc danh sách chỉ mục 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 embeddings của chúng sẽ được sử dụng.

Bạn sẽ nhận được một pandas DataFrame với số lượng limit các điểm dữ liệu tương đồng nhất với đầu vào, cùng với khoảng cách của chúng trong không gian embedding. 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="yolo26n.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())

Vẽ biểu đồ các Hình ảnh Tương đồng

Bạn cũng có thể vẽ biểu đồ các hình ảnh tương đồng bằng phương thức plot_similar. Phương thức này nhận các đối số tương tự như get_similar và hiển thị các hình ảnh tương đồng trong một lưới.

Vẽ biểu đồ các Hình ảnh Tương đồng
from ultralytics import Explorer

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

plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()

2. Ask AI (Truy vấn bằng Ngôn ngữ Tự nhiên)

Tính năng này cho phép bạn lọc tập dữ liệu bằng ngôn ngữ tự nhiên mà không cần viết SQL. Trình tạo truy vấn hỗ trợ bởi AI sẽ chuyển đổi yêu cầu của bạn thành một truy vấn và trả về kết quả phù hợp. Ví dụ: bạn có thể yêu cầu: "cho tôi xem 100 hình ảnh có đúng một người và 2 con chó. Cũng có thể có các đối tượng khác" và nó sẽ tạo truy vấn và hiển thị cho bạn các kết quả đó. Lưu ý: Tính năng này sử dụng LLMs, vì vậy kết quả mang tính xác suất và có thể không chính xác.

Ask AI
from ultralytics.data.explorer import plot_query_result

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo26n.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. Truy vấn SQL

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 phương thức sql_query. Phương thức này nhận một truy vấn SQL làm đầu vào và trả về một pandas DataFrame với kết quả.

Truy vấn SQL
from ultralytics import Explorer

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

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

Vẽ biểu đồ Kết quả Truy vấn SQL

Bạn cũng có thể vẽ biểu đồ kết quả của một truy vấn SQL bằng phương thức plot_sql_query. Phương thức này nhận các đối số tương tự như sql_query và hiển thị kết quả trong một lưới.

Vẽ biểu đồ Kết quả Truy vấn SQL
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo26n.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 Bảng Embeddings

Bạn cũng có thể làm việc trực tiếp với bảng embeddings. Sau khi bảng embeddings được tạo, bạn có thể truy cập nó bằng Explorer.table

Mẹo

Explorer hoạt động trên các bảng LanceDB ở bên trong. Bạn có thể truy cập trực tiếp vào bảng này bằng đối tượng Explorer.table 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:

Lấy Embeddings 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="yolo26n.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 Vector Index

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

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

5. Ứng dụng của Embeddings

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

Chỉ mục Tương đồng

Explorer đi kèm với một thao tác similarity_index:

  • Nó cố gắng ước tính mỗi điểm dữ liệu tương đồng như thế nào so 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 xem có bao nhiêu hình ảnh embeddings nằm gần hơn khoảng cách max_dist so với hình ảnh hiện tại trong không gian embedding được tạo, xem xét từng top_k hình ảnh tương tự tại một thời điểm.

Nó trả về một pandas DataFrame 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 so với hình ảnh hiện tại
  • sim_im_files: Danh sách đường dẫn đến count hình ảnh tương tự
Mẹo

Đối với một tập dữ liệu, model, max_dist & top_k đã cho, chỉ mục tương đồng sau khi được tạo sẽ được tái sử dụng. 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ỉ mục tương đồng, bạn có thể truyền force=True.

Chỉ mục Tương đồng
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 đồng để xây dựng các điều kiện tùy chỉnh nhằm lọc tập dữ liệu. Ví dụ, bạn có thể lọc bỏ các hình ảnh không tương tự với bất kỳ hình ảnh nào khác trong tập dữ liệu bằng đoạn mã sau:

import numpy as np

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

Hình dung Không gian Embedding

Bạn cũng có thể hình dung không gian embedding bằng công cụ vẽ biểu đồ tùy chọn của mình. Ví dụ, dưới đây là một ví dụ đơn giản sử dụng Matplotlib:

import matplotlib.pyplot as plt
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()

Hãy bắt đầu tạo các báo cáo khám phá tập dữ liệu CV của riêng bạn bằng Explorer API. Để lấy cảm hứng, hãy xem Ví dụ Khám phá VOC.

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

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

Câu hỏi thường gặp (FAQ)

Ultralytics Explorer API được sử dụng để làm gì?

Ultralytics Explorer API được thiết kế để khám phá tập dữ liệu toàn diện. Nó cho phép người dùng lọc và tìm kiếm tập dữ liệu bằng cách sử dụng các truy vấn SQL, tìm kiếm tương đồng vector và tìm kiếm ngữ nghĩa. Python API mạnh mẽ này có thể xử lý các tập dữ liệu lớn, làm cho nó trở nên lý tưởng cho nhiều tác vụ computer vision sử dụng các model của Ultralytics.

Làm thế nào để cài đặt Ultralytics Explorer API?

Để cài đặt Ultralytics Explorer API cùng với các phụ thuộc của nó, hãy sử dụng lệnh sau:

pip install ultralytics[explorer]

Lệnh này sẽ tự động cài đặt tất cả các thư viện bên ngoài cần thiết cho chức năng của Explorer API. Để biết chi tiết thiết lập bổ sung, hãy tham khảo phần cài đặt trong tài liệu của chúng tôi.

Làm cách nào tôi có thể sử dụng Ultralytics Explorer API cho tìm kiếm tương đồng?

Bạn có thể sử dụng Ultralytics Explorer API để thực hiện các tìm kiếm tương đồng bằng cách tạo một bảng embeddings và truy vấn nó để tìm các hình ảnh tương tự. Đây là một ví dụ cơ bản:

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo26n.pt")
explorer.create_embeddings_table()

# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())

Để biết thêm chi tiết, vui lòng truy cập phần Tìm kiếm Tương đồng.

Lợi ích của việc sử dụng LanceDB với Ultralytics Explorer là gì?

LanceDB, được sử dụng bên dưới bởi Ultralytics Explorer, cung cấp các bảng embeddings có thể mở rộng trên ổ đĩa. Điều này đảm bảo rằng bạn có thể tạo và tái sử dụng các embeddings cho các tập dữ liệu lớn như COCO mà không sợ hết bộ nhớ. Các bảng này chỉ được tạo một lần và có thể được tái sử dụng, giúp tăng hiệu quả trong việc xử lý dữ liệu.

Tính năng Ask AI hoạt động như thế nào trong Ultralytics Explorer API?

Tính năng Ask AI cho phép người dùng lọc tập dữ liệu bằng các truy vấn ngôn ngữ tự nhiên. Tính năng này tận dụng LLMs để chuyển đổi các truy vấn này thành các truy vấn SQL ở phía sau. Đây là một ví dụ:

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo26n.pt")
explorer.create_embeddings_table()

# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())

Để biết thêm các ví dụ, hãy xem phần Ask AI.

Bình luận