YOLO Vision 2026:

Ultralytics Explorer API#

Ghi chú từ cộng đồng ⚠️

Kể từ phiên bản ultralytics>=8.3.12, Ultralytics Explorer đã bị gỡ 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 để khám phá các tập 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á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ố tính năng của nó. 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ần 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="yolo11n.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 chỉ được tạo một lần và tái sử dụng. Chúng sử dụng LanceDB bên dưới, có khả năng 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 bị cạn kiệ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 đối tượng bảng LanceDB để thực hiện phân tích nâng cao. Tìm hiểu thêm về điều này 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 kiếm các hình ảnh tương tự với một hình ảnh cho trước. 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. Khi bảng embeddings được xây dựng, bạn có thể chạy tìm kiếm ngữ nghĩa bằng bất kỳ cách nào sau đây:

  • Trên một chỉ mục hoặc danh sách các chỉ mục cho trước 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 nhận được một pandas DataFrame với số lượng (limit) điểm dữ liệu giố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="yolo11n.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 tự#

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

Vẽ biểu đồ các hình ảnh tương tự
from ultralytics import Explorer

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

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

2. Hỏi 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 của mình bằng ngôn ngữ tự nhiên mà không cần viết SQL. Trình tạo truy vấn được hỗ trợ bởi AI sẽ chuyển đổi câu lệnh của bạn thành một truy vấn và trả về các kết quả phù hợp. Ví dụ, bạn có thể hỏi: "hiển thị cho tôi 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 các LLM, 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="yolo11n.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 các kết quả.

Truy vấn SQL
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.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 truy vấn SQL bằng phương thức plot_sql_query. Phương thức này nhận các tham số giống như sql_query và vẽ biểu đồ kết quả theo dạng 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="yolo11n.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. 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 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="yolo11n.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 một chỉ mục vector chuyên dụng để truy vấn nhanh hơn. Việc này được thực hiện bằng cách sử dụng phương thức create_index trên bảng LanceDB.

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

5. Các ứng dụng 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 thao tác similarity_index:

  • Nó cố gắng ước tính mức độ tương đồng của từng đ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 xem có bao nhiêu embedding hình ảnh nằm gần hình ảnh hiện tại hơn max_dist trong không gian embedding đượ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 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 với hình ảnh hiện tại hơn max_dist
  • 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, 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 đơn giản là 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 ra các hình ảnh không tương đồng 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]

Trực quan hóa Không gian Embedding#

Bạn cũng có thể trực quan hóa 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()

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#

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 các tập dữ liệu bằ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 các tác vụ computer vision khác nhau sử dụng các model Ultralytics.

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

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

pip install ultralytics[explorer]

Thao tác 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 thêm chi tiết thiết lập, 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 để tìm kiếm độ tương đồng?#

Bạn có thể sử dụng Ultralytics Explorer API để thực hiện 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ự. Dưới đây là một ví dụ cơ bản:

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.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 trên ổ đĩa có khả năng mở rộng. Đ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 bị cạn kiệ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, nâng cao hiệu quả trong việc xử lý dữ liệu.

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

Tính năng Hỏi AI cho phép người dùng lọc cá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 các LLM để chuyển đổi các truy vấn này thành các truy vấn SQL ở đằng sau. Dưới đây là một ví dụ:

from ultralytics import Explorer

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

Để xem thêm các ví dụ, hãy kiểm tra phần Hỏi AI.

Bình luận