Bỏ qua nội dung

Ví dụ về thăm dò VOC

Chào mừng đến với Ultralytics Sổ tay API Explorer! Sổ tay này đóng vai trò là điểm khởi đầu để khám phá các tài nguyên khác nhau có sẵn để giúp bạn bắt đầu sử dụng Ultralytics để khám phá các tập dữ liệu của bạn bằng sức mạnh của tìm kiếm ngữ nghĩa. Bạn có thể sử dụng các tiện ích ngay lập tức cho phép bạn kiểm tra các loại nhãn cụ thể bằng cách sử dụng tìm kiếm vectơ hoặc thậm chí truy vấn SQL.

Thử yolo explorer được hỗ trợ bởi Explorer API

Đơn giản pip install ultralytics và chạy yolo explorer trong thiết bị đầu cuối của bạn để chạy các truy vấn tùy chỉnh và tìm kiếm ngữ nghĩa trên các tập dữ liệu ngay bên trong trình duyệt của bạn!

Ghi chú cộng đồng ⚠️

Tính đến ultralytics>=8.3.10, Ultralytics hỗ trợ explorer đã bị loại bỏ. Nhưng đừng lo lắng! Bây giờ bạn có thể truy cập chức năng tương tự và thậm chí được cải tiến thông qua Ultralytics TRUNG TÂM, nền tảng trực quan không cần mã của chúng tôi được thiết kế để hợp lý hóa quy trình làm việc của bạn. Với Ultralytics HUB, bạn có thể tiếp tục khám phá, trực quan hóa và quản lý dữ liệu của mình một cách dễ dàng, tất cả mà không cần viết một dòng mã nào. Hãy chắc chắn kiểm tra và tận dụng các tính năng mạnh mẽ của nó!🚀

Cài đặt

Cài đặt Pip ultralyticssự phụ thuộc và kiểm tra phần mềm và phần cứng.

%pip install ultralytics[explorer] openai
yolo checks

Sử dụng sức mạnh của tìm kiếm tương tự 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. Chỉ cần tạo một bảng nhúng cho cặp mô hình tập dữ liệu đã cho. Chỉ cần một lần và được sử dụng lại tự động.

exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

Sau 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 như - 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 nhận được một khung dữ liệu pandas với số lượng giới hạn các điểm dữ liệu giố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 thêm

Bảng tìm kiếm tương đồng

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()

Bạn cũng có thể sử dụng biểu đồ các mẫu tương tự trực tiếp bằng cách sử dụng plot_similar sử dụng

Tìm kiếm tương tự hình ảnh 1

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

Tìm kiếm tương tự hình ảnh 2

Hỏi AI: Tìm kiếm hoặc lọc bằng Ngôn ngữ tự nhiên

Bạn có thể nhắc đối tượng Explorer với loại điểm dữ liệu bạn muốn xem và nó sẽ cố gắng trả về một khung dữ liệu với những điểm đó. Vì nó được hỗ trợ bởi LLM, nên nó không phải lúc nào cũng trả về đúng. Trong trường hợp đó, nó sẽ trả về None.

Hỏi ai bảng

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)

để vẽ biểu đồ các kết quả này bạn có thể sử dụng plot_query_result Ví dụ:

plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)

Hỏi ai hình ảnh 1

# 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 Bộ dữ liệu của bạn

Đôi khi bạn có thể muốn điều tra một loại mục nhập nhất định trong tập dữ liệu của mình. Đối với điều 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. Điều nà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 đủ trong đó bạn có thể chỉ định các cột nào để chọn

Điều này có thể được sử dụng để điều tra hiệu suất mô hình và các điểm dữ liệu cụ thể. Ví dụ:

  • giả sử mô hình của bạn gặp khó khăn khi xử lý hình ảnh có người và chó. Bạn có thể viết truy vấn như thế này để 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 truy vấn SQL

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 tự, bạn cũng có một tiện ích để trực tiếp vẽ các truy vấn sql bằng cách sử dụng exp.plot_sql_query

Truy vấn SQL hình ảnh 1

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)

Làm việc với nhúng Bảng (Nâng cao)

Explorer hoạt động trên LanceDB bảng nội bộ. Bạn có thể truy cập trực tiếp vào bảng này bằng cách sử dụng Explorer.table đối tượng và chạy truy vấn thô, đẩy xuống bộ lọc trước và sau, v.v.

table = exp.table
print(table.schema)

Chạy truy vấn thô¶

Vector Search 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 LLM và các ứng dụng AI khác, mỗi điểm dữ liệu có thể được trình bày bằng các nhúng được tạo từ một số mô hình, nó trả về các tính năng có liên quan nhất.

Tìm kiếm trong không gian vectơ có chiều cao là tìm K-Gần-Gần-Nhất (KNN) của vectơ truy vấn.

Metric Trong LanceDB, Metric là cách mô tả khoảng cách giữa một cặp vectơ. Hiện tại, nó hỗ trợ các số liệu sau:

  • L2
  • Cô sin
  • Tìm kiếm tương tự của Dot Explorer sử dụng L2 theo mặc định. Bạn có thể chạy truy vấn trực tiếp trên các bảng hoặc sử dụng định dạng lance để xây dựng các tiện ích tùy chỉnh để quản lý các tập dữ liệu. Chi tiết hơn về các hoạt động bảng LanceDB có sẵn trong tài liệu

Bảng truy vấn thô

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
df = table.to_pandas()
pa_table = table.to_arrow()

Làm việc với nhúng

Bạn có thể truy cập nhúng thô từ Bảng Lancedb và phân tích nó. 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)

Biểu đồ phân tán

Một trong những bước sơ bộ trong việc phân tích nhúng là bằng cách vẽ chúng trong không gian 2D thông qua việc giảm chiều. Hãy thử một ví dụ

Ví dụ về biểu đồ phân tán

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

Đây là một ví dụ đơn giản về một hoạt động được hỗ trợ bởi bảng nhúng. Explorer đi kèm với similarity_index hoạt động-

  • Phương pháp này cố gắng ước tính mức độ giống nhau 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 điều đó bằng cách đếm có bao nhiêu hình ảnh nhúng nằm gần hơn max_dist so với hình ảnh hiện tại trong không gian nhúng được tạo ra, đồng thời xem xét 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, mô hình nhất định, max_dist & top_k chỉ số tương đồng sau khi tạo sẽ được sử dụng lại. 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 vectơ và SQL, điều này cũng đi kèm với một tiện ích để trực tiếp vẽ đồ thị. Hãy cùng xem

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)

Chỉ số tương đồng

tại cốt truyện đầu tiên

exp.plot_similarity_index(max_dist=0.2, top_k=0.01)

Bây giờ chúng ta hãy xem kết quả của hoạt động

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ố điểm tương đồng lớn hơn 30 và vẽ các hình ảnh tương tự như 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 một cái gì đó như thế này

chỉ số tương đồng hình ảnh

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


📅 Được tạo cách đây 4 tháng ✏️ Đã cập nhật cách đây 1 tháng

Bình luận