Ví dụ khám phá VOC#
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.
Ví dụ này hướng dẫn cách sử dụng Explorer API trên tập dữ liệu VOC: xây dựng bảng embeddings, thực hiện tìm kiếm ngữ nghĩa và SQL, đồng thời đặt câu hỏi bằng ngôn ngữ tự nhiên. Các bước tương tự cung cấp năng lượng cho GUI yolo explorer.
Thiết lập#
Cài đặt bản phát hành ultralytics được ghim kèm với các tiện ích bổ sung của Explorer, sau đó kiểm tra phần mềm và phần cứng.
pip install "ultralytics[explorer]==8.3.11" openai
yolo checksTìm kiếm tương đồng#
Tận dụng sức mạnh của tìm kiếm tương đồng vector để tìm các điểm dữ liệu tương tự trong dataset cùng với khoảng cách của chúng trong không gian embedding. Chỉ cần tạo một bảng embedding cho cặp dataset-model tương ứng. Việc này chỉ cần thực hiện một lần và sẽ được tự động tái sử dụng.
from ultralytics import Explorer
exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()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 index/danh sách index cụ thể trong dataset, ví dụ:
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, ví dụ:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10). Trong trường hợp có nhiều đầu vào, tập hợp các embeddings của chúng sẽ được sử dụng.
Bạn nhận được một pandas DataFrame chứa số lượng điểm dữ liệu tương tự nhất với input theo giới hạn đã chỉ định, 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 để thực hiện các bước filtering tiếp theo.

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()Bạn cũng có thể trực tiếp plot các sample tương tự bằng util plot_similar

exp.plot_similar(idx=6500, limit=20)
exp.plot_similar(idx=[100, 101], limit=10) # Can also pass list of idxs or imgs
exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10, labels=False) # Can also pass external images
Hỏi AI: Tìm kiếm hoặc filtering bằng ngôn ngữ tự nhiên#
Bạn có thể prompt object Explorer bằng loại điểm dữ liệu muốn xem, và object này sẽ cố gắng trả về một DataFrame chứa các kết quả đó. Vì được cung cấp bởi LLMs, kết quả không phải lúc nào cũng chính xác. Trong trường hợp đó, object sẽ trả về None.

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)Để plot các kết quả này, bạn có thể sử dụng utility plot_query_result. Ví dụ:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# plot
from PIL import Image
from ultralytics.data.explorer import plot_query_result
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)Chạy truy vấn SQL trên dataset của bạn#
Đôi khi bạn có thể muốn kiểm tra một số entry nhất định trong dataset. Để thực hiện việc này, Explorer cho phép bạn chạy các truy vấn SQL. Explorer chấp nhận một trong các định dạng sau:
- Các truy vấn bắt đầu bằng "WHERE" sẽ tự động chọn tất cả các column. Có thể xem đây là dạng viết tắt của truy vấn.
- Bạn cũng có thể viết các truy vấn đầy đủ, trong đó chỉ định những column cần chọn.
Bạn có thể sử dụng cách này để kiểm tra hiệu năng của model và các điểm dữ liệu cụ thể. Ví dụ:
- Giả sử model của bạn gặp khó khăn với các image có người và chó. Bạn có thể viết một truy vấn như sau để chọn các điểm có ít nhất 2 người VÀ ít nhất một con chó.
Bạn có thể kết hợp truy vấn SQL và tìm kiếm ngữ nghĩa để lọc xuống các loại kết quả cụ thể
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)Tương tự như tìm kiếm tương đồng, bạn cũng nhận được một util để trực tiếp plot các truy vấn SQL bằng exp.plot_sql_query

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)Làm việc với bảng embedding (Nâng cao)#
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.
table = exp.table
print(table.schema)Chạy các truy vấn thô#
Tìm kiếm vector tìm các vector gần nhất từ database. Trong hệ thống recommendation hoặc search engine, bạn có thể tìm các sản phẩm tương tự với sản phẩm đã tìm kiếm. Trong LLM và các ứng dụng AI khác, mỗi điểm dữ liệu có thể được biểu diễn bằng các embedding do một số model tạo ra, từ đó trả về các feature phù hợp nhất.
Tìm kiếm trong không gian vector nhiều chiều là việc tìm K láng giềng gần nhất (KNN) của vector truy vấn.
Metric Trong LanceDB, Metric là cách mô tả khoảng cách giữa một cặp vector. Hiện tại, LanceDB hỗ trợ các metric sau:
- L2
- Cosine
- Tích vô hướng
Tìm kiếm độ tương đồng của Explorer sử dụng L2 theo mặc định. Bạn có thể chạy các truy vấn trực tiếp trên bảng hoặc sử dụng định dạng lance để xây dựng các tiện ích tùy chỉnh nhằm quản lý tập dữ liệu. Thêm chi tiết về các thao tác bảng LanceDB có trong tài liệu LanceDB.

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()Chuyển đổi qua lại giữa các định dạng dữ liệu phổ biến#
df = table.to_pandas()
pa_table = table.to_arrow()Làm việc với embedding#
Bạn có thể truy cập embedding raw từ bảng lancedb và phân tích embedding đó. Các image embedding được lưu trong column vector
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)Biểu đồ phân tán#
Một trong những bước sơ bộ khi phân tích embedding là plot chúng trong không gian 2D thông qua giảm chiều. Hãy thử một ví dụ

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA # pip install scikit-learn
# 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's 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()Chỉ số tương đồng#
Dưới đây là một ví dụ đơn giản về thao tác được cung cấp bởi bảng embedding. Explorer đi kèm thao tác 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.
- Thao tác thực hiện việc này bằng cách đếm số lượng image embedding nằm gần image hiện tại hơn max_dist trong không gian embedding được tạo ra, đồng thời xét top_k image tương tự mỗi lần.
Đối với một dataset, model, max_dist & top_k, chỉ số tương đồng 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ỉ đơn giản cần tạo lại chỉ số tương đồng, bạn có thể truyền force=True. Tương tự như tìm kiếm vector và SQL, thao tác này cũng đi kèm một util để trực tiếp plot chỉ số.
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01)
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
Trước tiên, hãy xem biểu đồ
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)Bây giờ, hãy xem output của thao tác
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)
sim_idxHãy tạo một truy vấn để xem những điểm dữ liệu nào có số lượng tương đồng lớn hơn 30 và plot các image tương tự với chúng.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]Bạn sẽ thấy kết quả tương tự như sau

exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 imagesFAQ#
Explorer đã bị xóa khỏi gói
ultralyticstrong phiên bản 8.3.12. Để chạy các ví dụ trên trang này, hãy cài đặt bản phát hành cuối cùng bao gồm tiện ích này bằngpip install "ultralytics[explorer]==8.3.11". Tính năng khám phá tập dữ liệu tương đương và mở rộng được tích hợp sẵn trong Ultralytics Platform.Sau khi xây dựng bảng embeddings một lần với
create_embeddings_table(), bạn có thể tìm các hình ảnh có vẻ ngoài tương tự theo chỉ mục hoặc theo hình ảnh bên ngoài, lọc tập dữ liệu bằng các mệnh đề SQLWHERE, đặt câu hỏi bằng ngôn ngữ tự nhiên vớiask_ai()và tính toán chỉ mục độ tương đồng để phát hiện các hình ảnh gần như trùng lặp.Explorer lưu giữ các embeddings trong bảng LanceDB trên đĩa, do đó bảng này được tạo một lần cho mỗi cặp tập dữ liệu và model và được sử dụng lại qua các phiên. Truy cập bảng này trực tiếp thông qua
exp.tableđể thực hiện các truy vấn vector thô, bộ lọc trước và sau, cũng như xuất dữ liệu sang pandas hoặc Arrow.