Meet YOLO26: next-gen vision AI.

Link to this sectionUltralytics Explorer API#

Lưu ý cho cộng đồng ⚠️

Kể từ bản ultralytics>=8.3.12, Ultralytics Explorer đã bị xóa 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 trên Ultralytics Platform.

Link to this sectionGiới thiệu#

Open In Colab Explorer API là một Python API giúp 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 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

Link to this sectionCài đặt#

Explorer phụ thuộc vào một số 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 phụ thuộc này, hãy sử dụng lệnh sau:

pip install ultralytics[explorer]

Link to this sectionCá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 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 cứng, vì vậy bạn có thể tạo và tái sử dụng các embedding cho các tập dữ liệu lớn như COCO mà không bị tràn bộ nhớ.

Trong trường hợp bạn muốn buộc cập nhật bảng embedding, 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 trong phần Làm việc với Bảng Embeddings

Link to this sectionTì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. Phương pháp này dựa trên ý tưởng rằng các hình ảnh tương tự sẽ có các embedding tương tự. Sau khi bảng embedding đượ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ỉ 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, giá trị tổng hợp các embedding 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 sâu hơn.

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

Link to this sectionVẽ 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 cách sử dụng phương thức plot_similar. Phương thức này nhận các tham số tương tự như get_similar và vẽ các hình ảnh tương tự dưới 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()

Link to this sectionHỏ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 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 câu lệnh của bạn thành truy vấn và trả về kết quả khớp. Ví dụ: bạn có thể hỏi: "show me 100 images with exactly one person and 2 dogs. There can be other objects too" (hiển thị cho tôi 100 hình ảnh có đúng một người và 2 con chó. Có thể có các đối tượng khác) và nó sẽ tạo truy vấn rồi hiển thị kết quả cho bạn. Lưu ý: Tính năng này sử dụng LLM, do đó 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()

Link to this sectionTruy 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 chứa 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())

Link to this sectionVẽ 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ố tương tự như sql_query và vẽ kết quả trên 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="yolo11n.pt")
exp.create_embeddings_table()

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

Link to this sectionLà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 bảng này bằng đối tượng Explorer.table và chạy các truy vấn thô, đẩy các bộ lọc trước và sau xử lý (pre-filter/post-filter), 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 này:

Link to this sectionLấ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)

Link to this sectionTruy vấn nâng cao với bộ lọc trước và sau xử lý#

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)

Link to this sectionTạ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. Điều 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=...)

Link to this sectionCác ứ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ụ:

Link to this sectionChỉ 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ứ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 việc này 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 khoảng cách max_dist trong không gian embedding đã tạo, trong khi 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 khoảng cách max_dist
  • sim_im_files: Danh sách các đường dẫn đến các hình ảnh tương tự count
Mẹo

Đối với một tập dữ liệu, model, max_dist & top_k nhất định, 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 ra những 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 cách sử dụng đoạn mã sau:

import numpy as np

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

Link to this sectionTrự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 đồ mà bạn 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á 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.

Link to this sectionCác ứng dụng được xây dựng bằng Ultralytics Explorer#

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

Link to this sectionFAQ#

Link to this sectionUltralytics Explorer API được 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á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ụ thị giác máy tính sử dụng các model Ultralytics.

Link to this sectionLà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.

Link to this sectionLàm thế nào để 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 tìm kiếm tương đồng bằng cách tạo một bảng embeddings và truy vấn các hình ảnh tương tự. Dưới đây là 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.

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

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 trên đĩa cứng. Điều này đảm bảo rằng bạn có thể tạo và tái sử dụng các embedding cho các tập dữ liệu lớn như COCO mà không bị tràn 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 nâng cao hiệu quả trong xử lý dữ liệu.

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

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 truy vấn ngôn ngữ tự nhiên. Tính năng này tận dụng LLM để chuyển đổi các truy vấn này thành các truy vấn SQL ở phía sau. Dưới đây là 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())

Để biết thêm ví dụ, hãy xem phần Hỏi AI.

Bình luận