Ultralytics YOLO27:

Ultralytics Explorer API#

Ghi chú cộng đồng ⚠️

Kể từ 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á dataset tương tự (và mở rộng hơn) hiện có trên Ultralytics Platform.

Giới thiệu#

Explorer API là một Python API dùng để khám phá các tập dữ liệu của bạn. API này 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 véc-tơ 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 sẽ được tự động cài đặt khi bạn sử dụng Explorer. Để cài đặt thủ công các dependency 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 dataset và model cụ thể chỉ được tạo một lần và được tái sử dụng. Các bảng này 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 embeddings cho các dataset lớn như COCO mà không hết bộ nhớ.

Nếu muốn buộc cập nhật bảng embeddings, bạn có thể truyền force=True vào method 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ề nội dung 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à kỹ thuật tìm các hình ảnh tương tự với một hình ảnh cho trước. Kỹ thuật này dựa trên ý tưởng rằng các hình ảnh tương tự sẽ có embeddings tương tự. Sau khi bảng embeddings được xây dựng, bạn có thể thực hiện tìm kiếm ngữ nghĩa theo bất kỳ cách nào sau đây:

  • Trên một index hoặc danh sách các index cụ thể trong dataset: 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 thuộc dataset: exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

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

Bạn nhận được một pandas DataFrame với limit đ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 embedding. Bạn có thể sử dụng dataset này để tiếp tục lọc.

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ẽ các hình ảnh tương tự#

Bạn cũng có thể vẽ các hình ảnh tương tự bằng method plot_similar. Method này nhận các đối số giống như get_similar và vẽ các hình ảnh tương tự trong một lưới.

Vẽ 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 ngôn ngữ tự nhiên)#

Tính năng này cho phép bạn lọc dataset bằng ngôn ngữ tự nhiên mà không cần viết SQL. Trình tạo truy vấn sử dụng AI sẽ chuyển prompt 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ể yêu cầu: "hiển thị cho tôi 100 hình ảnh có chính xác một người và 2 con chó. Có thể có cả các đối tượng khác" và hệ thống sẽ tạo truy vấn rồi hiển thị các kết quả đó. Lưu ý: Tính năng này sử dụng LLM, vì vậy kết quả mang tính xác suất và có thể không chính xác.

Hỏi 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 dataset bằng method sql_query. Method này nhận một truy vấn SQL làm đầu vào và trả về pandas DataFrame chứa 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ẽ kết quả truy vấn SQL#

Bạn cũng có thể vẽ kết quả của một truy vấn SQL bằng method plot_sql_query. Method này nhận các đối số giống như sql_query và vẽ kết quả trong một lưới.

Vẽ 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. Sau khi bảng embeddings được tạo, bạn có thể truy cập bảng bằng Explorer.table

Mẹo

Bên trong, Explorer hoạt động trên các bảng LanceDB. Bạn có thể truy cập trực tiếp bảng này bằng object Explorer.table và chạy các truy vấn raw, đẩy các bộ lọc trước và sau xuống tầng dữ liệu, 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ể thực hiện 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 các 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 Vector Index#

Khi sử dụng các dataset lớn, bạn cũng có thể tạo một vector index chuyên dụng để truy vấn nhanh hơn. Thao tác này được thực hiện bằng method 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 loại phân tích khám phá. Dưới đây là một số ví dụ:

Chỉ số tương đồng#

Explorer cung cấp một operation similarity_index:

  • Thao tác này 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 dataset.
  • Operation thực hiện việc này bằng cách đếm số embeddings hình ảnh nằm gần hơn max_dist so với hình ảnh hiện tại trong không gian embedding đã tạo, đồng thời xem xét top_k hình ảnh tương tự mỗi lần.

Operation trả về một pandas DataFrame với các cột sau:

  • idx: Index của hình ảnh trong dataset
  • im_file: Đường dẫn đến tệp hình ảnh
  • count: Số hình ảnh trong dataset 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 dataset, model, max_dist & top_k, similarity index sau khi được tạo sẽ được tái sử dụng. Nếu dataset của bạn đã thay đổi hoặc bạn chỉ cần tạo lại similarity index, bạn có thể truyền force=True.

Chỉ số 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 similarity index để xây dựng các điều kiện tùy chỉnh nhằm lọc dataset. Ví dụ, bạn có thể lọc bỏ những hình ảnh không tương tự bất kỳ hình ảnh nào khác trong dataset bằng đoạn code 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ẽ tùy chọn. 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á dataset CV của riêng bạn bằng Explorer API. Để tham khảo ý tưởng, hãy xem Ví dụ khám phá VOC.

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

Dùng thử Demo GUI dựa trên Explorer API của chúng tôi

FAQ#

  • Ultralytics Explorer API được thiết kế để khám phá dataset toàn diện. API cho phép người dùng lọc và tìm kiếm dataset bằng truy vấn SQL, tìm kiếm độ tương đồng vector và tìm kiếm ngữ nghĩa. API Python mạnh mẽ này có thể xử lý các dataset lớn, rất phù hợp cho nhiều tác vụ thị giác máy tính sử dụng các model Ultralytics.

  • Để cài đặt Ultralytics Explorer API cùng các dependency của API, hãy sử dụng command sau:

    pip install ultralytics[explorer]

    Thao tác này sẽ tự động cài đặt tất 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 về 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.

  • 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 bảng để 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.

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

  • Tính năng Hỏi AI cho phép người dùng lọc dataset bằng các truy vấn ngôn ngữ tự nhiên. Tính năng này sử dụng LLM để chuyển các truy vấn đó thành truy vấn SQL ở phía 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 ví dụ, hãy tham khảo phần Hỏi AI.

Bình luận