Meet YOLO26: next-gen vision AI.

Link to this sectionVí dụ Khám phá VOC#

Ultralytics YOLO banner

中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية


Ultralytics CI Ultralytics Downloads Ultralytics Discord Ultralytics Forums Ultralytics Reddit
Run Ultralytics on Gradient Open Ultralytics In Colab Open Ultralytics In Kaggle Open Ultralytics In Binder

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.

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

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 checks

Link 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.

Kết quả tìm kiếm tương đồng của Ultralytics Explorer

# 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

Hình ảnh tương tự được tìm thấy bằng tìm kiếm vector

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

Trực quan hóa tìm kiếm tương đồng với nhúng

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.

Kết quả truy vấn bằng ngôn ngữ tự nhiên Ask AI của Ultralytics Explorer

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)

Kết quả truy vấn Ask AI hiển thị các hình ảnh khớp

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

Bảng kết quả truy vấn SQL của Explorer

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

Trực quan hóa hình ảnh khớp với truy vấn SQL

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

Bảng kết quả truy vấn SQL thô của Explorer

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ụ

Trực quan hóa biểu đồ phân tán nhúng của Explorer

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

Phân tích chỉ số tương đồng tập dữ liệu

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_idx

Hã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

Trực quan hóa chỉ số tương đồng cho phân tích tập dữ liệu

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

Bình luận