Link to this sectionVí dụ Khám phá VOC#
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Chào mừng bạn đến với notebook Ultralytics Explorer API. Notebook này giới thiệu các tài nguyên có sẵn để khám phá tập dữ liệu thông qua tìm kiếm ngữ nghĩa, tìm kiếm vector và truy vấn SQL.
Hãy thử yolo explorer (được hỗ trợ bởi Explorer API)
Cài đặt ultralytics và chạy yolo explorer trong terminal của bạn để thực hiện các truy vấn tùy chỉnh và tìm kiếm ngữ nghĩa trong trình duyệt.
Kể từ 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 sectionThiết lập#
Cài đặt ultralytics và các dependencies cần thiết, sau đó kiểm tra phần mềm và phần cứng.
!uv pip install ultralytics[explorer] openai
yolo checksLink to this sectionTì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 tập dữ liệu của bạn cùng với khoảng cách của chúng trong không gian nhúng (embedding space). Chỉ cần tạo một bảng nhúng cho cặp tập dữ liệu-model nhất định. Thao tác này chỉ cần thực hiện một lần và sẽ được tái sử dụng tự động.
exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()Khi bảng nhúng đã đượ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/danh sách các chỉ mục nhất định trong tập dữ liệu, ví dụ:
exp.get_similar(idx=[1, 10], limit=10) - Trên bất kỳ hình ảnh/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 nhúng của chúng sẽ được sử dụng.
Bạn sẽ nhận được một pandas DataFrame với số lượng giới hạn 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 nhúng. Bạn có thể sử dụng tập dữ liệu này để thực hiện lọc nâng cao hơn.

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()Bạn cũng có thể trực tiếp vẽ đồ thị các mẫu tương tự bằng cách sử dụng tiện ích 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
Link to this sectionHỏi AI: Tìm kiếm hoặc Lọc bằng Ngôn ngữ Tự nhiên#
Bạn có thể đưa ra gợi ý cho đối tượng Explorer về loại điểm dữ liệu bạn muốn xem, và nó sẽ cố gắng trả về một DataFrame chứa các kết quả đó. Vì được hỗ trợ bởi các LLM, nó không phải lúc nào cũng chính xác. Trong trường hợp đó, nó sẽ trả về None.

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)Để vẽ đồ thị các kết quả này, bạn có thể sử dụng tiện ích 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)Link to this sectionChạy các Truy vấn SQL trên Tập dữ liệu của bạn#
Đôi khi bạn có thể muốn điều tra các mục cụ thể trong tập dữ liệu của mình. Với mục đích này, Explorer cho phép bạn thực hiện các truy vấn SQL. Nó 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 cột. Đây có thể được coi là một truy vấn viết tắt.
- Bạn cũng có thể viết các truy vấn đầy đủ, nơi bạn có thể chỉ định cột nào cần chọn.
Điều này có thể được sử dụng để điều tra hiệu suất 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 trên các hình ảnh có con 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 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)Giống như tìm kiếm tương đồng, bạn cũng có một tiện ích để vẽ trực tiếp các truy vấn SQL bằng cách sử dụng exp.plot_sql_query

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)Link to this sectionLàm việc với bảng nhúng (Nâng cao)#
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, v.v.
table = exp.table
print(table.schema)Link to this sectionChạy các truy vấn thô#
Tìm kiếm Vector tìm các vector gần nhất từ cơ sở dữ liệu. Trong hệ thống đề xuất hoặc công cụ tìm kiếm, bạn có thể tìm thấy các sản phẩm tương tự từ sản phẩm bạn đã tìm kiếm. Trong các ứng dụng LLM và AI khác, mỗi điểm dữ liệu có thể được trình bày bởi các nhúng được tạo ra từ một số model, nó trả về các đặc trưng liên quan nhất.
Tìm kiếm trong không gian vector nhiều chiều là tìm K-Nearest-Neighbors (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, nó hỗ trợ các metric sau:
- L2
- Cosine
- Dot: 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ên bảng trực tiếp, 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ông tin chi tiết hơn về các thao tác bảng LanceDB có sẵn trong docs

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()Link to this sectionChuyển đổi sang các định dạng dữ liệu phổ biến#
df = table.to_pandas()
pa_table = table.to_arrow()Link to this sectionLàm việc với Nhúng (Embeddings)#
Bạn có thể truy cập nhúng thô từ bảng lancedb và phân tích nó. Các nhúng hình ảnh được lưu trữ trong cột vector
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)Link to this sectionBiểu đồ phân tán (Scatterplot)#
Một trong những bước sơ bộ trong việc phân tích các nhúng là vẽ chúng trong không gian 2D thông qua giảm chiều dữ liệ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()Link to this sectionChỉ số Tương đồng (Similarity Index)#
Đây là một ví dụ đơn giản về một thao tác được hỗ trợ bởi bảng nhú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 tự như thế nào 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 số lượng nhúng hình ảnh 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 nhúng được tạo ra, xét đến top_k hình ảnh tương tự tại một thời điểm.
Đối với một tập dữ liệu, model, max_dist và top_k nhất định, chỉ số tương đồng khi được tạo ra 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ỉ số tương đồng, bạn có thể truyền force=True. Tương tự như tìm kiếm vector và SQL, tính năng này cũng đi kèm với một tiện ích để vẽ trực tiếp.
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)
Hãy xem biểu đồ trước
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)Bây giờ hãy xem kết quả 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à vẽ các hình ảnh 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ư thế này

exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images