콘텐츠로 건너뛰기

VOC 탐색 예제

Ultralytics Explorer API 노트북에 오신 것을 환영합니다! 이 노트북은 Ultralytics를 사용하여 시맨틱 검색 기능을 통해 데이터 세트를 탐색하는 데 도움이 되는 다양한 리소스를 탐색하기 위한 시작점 역할을 합니다. 벡터 검색 또는 SQL 쿼리를 사용하여 특정 유형의 레이블을 검사할 수 있는 즉시 사용 가능한 유틸리티를 사용할 수 있습니다.

시도 yolo explorer Explorer API로 구동

간단히 pip install ultralytics 실행합니다. yolo explorer 터미널에서 사용자 정의 쿼리를 실행하고 브라우저 내에서 데이터 세트에 대한 시맨틱 검색을 수행합니다!

커뮤니티 참고 ⚠️

다음 시점부터 ultralytics>=8.3.10, Ultralytics Explorer 지원이 중단되었습니다. 하지만 걱정하지 마세요! 이제 다음을 통해 유사하고 향상된 기능에 액세스할 수 있습니다. Ultralytics HUB워크플로우를 간소화하도록 설계된 직관적인 노코드 플랫폼인 Ultralytics HUB를 사용해 보세요. Ultralytics HUB를 통해 단 한 줄의 코드도 작성하지 않고도 데이터를 손쉽게 탐색, 시각화 및 관리할 수 있습니다. 지금 바로 확인하고 강력한 기능을 활용해 보세요! 🚀

설치

Pip 설치 ultralytics종속성 소프트웨어 및 하드웨어를 확인합니다.

!uv pip install ultralytics[explorer] openai
yolo checks

벡터 유사성 검색의 강력한 기능을 활용하여 임베딩 공간에서 해당 거리와 함께 데이터 세트에서 유사한 데이터 포인트를 찾으십시오. 주어진 데이터 세트-모델 쌍에 대한 임베딩 테이블을 간단히 만드십시오. 한 번만 필요하며 자동으로 재사용됩니다.

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

임베딩 테이블이 구축되면 다음과 같은 방법으로 시맨틱 검색을 실행할 수 있습니다.

  • 데이터 세트의 주어진 인덱스 / 인덱스 목록에서 - 예: exp.get_similar(idx=[1,10], limit=10)
  • 데이터 세트에 없는 이미지 / 이미지 목록에서 - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) 여러 입력의 경우 임베딩의 집계가 사용됩니다.

입력과 가장 유사한 데이터 포인트의 제한된 수와 임베딩 공간에서의 거리를 포함하는 pandas 데이터프레임을 얻을 수 있습니다. 이 데이터 세트를 사용하여 추가 필터링을 수행할 수 있습니다.

유사성 검색 테이블

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

다음을 사용하여 유사한 샘플을 직접 플롯할 수도 있습니다. plot_similar util

유사성 검색 이미지 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

유사성 검색 이미지 2

AI에 질문하기: 자연어로 검색 또는 필터링

원하는 데이터 포인트 종류로 Explorer 객체에 프롬프트를 표시하면 해당 데이터프레임을 반환하려고 시도합니다. LLM으로 구동되므로 항상 올바르게 작동하지는 않습니다. 이 경우 None을 반환합니다.

AI 테이블에 질문하기

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

이러한 결과를 플로팅하기 위해 다음을 사용할 수 있습니다. plot_query_result util 예시:

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

AI 이미지 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)

데이터 세트에 대해 SQL 쿼리 실행

데이터 세트에서 특정 유형의 항목을 조사해야 할 수 있습니다. 이를 위해 Explorer를 사용하면 SQL 쿼리를 실행할 수 있습니다. 다음 형식 중 하나를 사용할 수 있습니다.

  • "WHERE"로 시작하는 쿼리는 자동으로 모든 열을 선택합니다. 이는 단축 쿼리로 생각할 수 있습니다.
  • 선택할 열을 지정할 수 있는 전체 쿼리를 작성할 수도 있습니다.

이는 모델 성능 및 특정 데이터 포인트를 조사하는 데 사용할 수 있습니다. 예를 들어:

  • 모델이 사람과 개가 있는 이미지에서 어려움을 겪는다고 가정해 보겠습니다. 2명 이상의 사람과 최소 1마리의 개가 있는 포인트를 선택하기 위해 이와 같은 쿼리를 작성할 수 있습니다.

SQL 쿼리 및 시맨틱 검색을 결합하여 특정 유형의 결과로 필터링할 수 있습니다.

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)

SQL 쿼리 테이블

table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)

유사성 검색과 마찬가지로, sql 쿼리를 직접 플롯하는 유틸리티도 제공됩니다. exp.plot_sql_query

SQL 쿼리 이미지 1

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

Embeddings 테이블 작업 (고급)

Explorer는 다음에서 작동합니다. LanceDB 테이블을 내부적으로 사용합니다. 이 테이블에는 다음을 사용하여 직접 액세스할 수 있습니다. Explorer.table 객체 및 원시 쿼리 실행, 사전 및 사후 필터 푸시다운 등을 수행합니다.

table = exp.table
print(table.schema)

원시 쿼리 실행¶

벡터 검색은 데이터베이스에서 가장 가까운 벡터를 찾습니다. 추천 시스템 또는 검색 엔진에서 검색한 제품과 유사한 제품을 찾을 수 있습니다. LLM 및 기타 AI 애플리케이션에서는 각 데이터 포인트를 일부 모델에서 생성된 임베딩으로 표시할 수 있으며, 가장 관련성이 높은 특징을 반환합니다.

고차원 벡터 공간에서의 검색은 쿼리 벡터의 K-최근접 이웃(KNN)을 찾는 것입니다.

LanceDB에서 메트릭은 벡터 쌍 간의 거리를 설명하는 방법입니다. 현재 다음 메트릭을 지원합니다.

  • L2
  • Cosine
  • Dot Explorer의 유사성 검색은 기본적으로 L2를 사용합니다. 테이블에서 직접 쿼리를 실행하거나 lance 형식을 사용하여 데이터세트 관리를 위한 사용자 정의 유틸리티를 구축할 수 있습니다. 사용 가능한 LanceDB 테이블 작업에 대한 자세한 내용은 문서에서 확인할 수 있습니다.

Raw-queries-table

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

Embeddings 작업

lancedb 테이블에서 원시 임베딩에 접근하여 분석할 수 있습니다. 이미지 임베딩은 열에 저장됩니다. vector

import numpy as np

embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)

산점도

임베딩 분석의 예비 단계 중 하나는 차원 축소를 통해 2D 공간에 플롯하는 것입니다. 예를 들어 보겠습니다.

산점도 예시

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

유사성 지수

다음은 임베딩 테이블에서 제공하는 작업의 간단한 예입니다. Explorer에는 다음이 함께 제공됩니다. similarity_index 작업-

  • 각 데이터 포인트가 데이터 세트의 나머지 부분과 얼마나 유사한지 추정하려고 시도합니다.
  • 생성된 임베딩 공간에서 현재 이미지에 max_dist보다 더 가까이 있는 이미지 임베딩의 수를 계산하여 이를 수행하며, 한 번에 top_k 유사 이미지를 고려합니다.

특정 데이터 세트, 모델의 경우, max_dist & top_k 일단 생성된 유사성 지수는 재사용됩니다. 데이터 세트가 변경되었거나 유사성 지수를 다시 생성해야 하는 경우 다음을 전달할 수 있습니다. force=True. 벡터 및 SQL 검색과 유사하게, 이 또한 직접 플롯하기 위한 유틸리티와 함께 제공됩니다. 살펴보겠습니다.

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)

유사성 지수

먼저 플롯에서

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

이제 작업 결과를 살펴보겠습니다.

sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)

sim_idx

유사성 횟수가 30이 넘는 데이터 포인트를 확인하고 해당 데이터 포인트와 유사한 이미지를 플롯하는 쿼리를 만들어 보겠습니다.

import numpy as np

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

다음과 같은 내용이 표시됩니다.

유사성-인덱스-이미지

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


📅 8개월 전에 생성됨 ✏️ 13일 전에 업데이트됨

댓글