Meet YOLO26: next-gen vision AI.

Link to this sectionVOC 탐색 예제#

Ultralytics YOLO 배너

中文 | 한국어 | 日本語 | Русский | 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

Ultralytics Explorer API 노트북에 오신 것을 환영합니다. 이 노트북은 시맨틱 검색, 벡터 검색, SQL 쿼리를 사용하여 데이터셋을 탐색하는 데 사용할 수 있는 리소스를 소개합니다.

yolo explorer를 사용해 보세요 (Explorer API 기반)

ultralytics를 설치하고 터미널에서 yolo explorer를 실행하여 브라우저에서 사용자 지정 쿼리와 시맨틱 검색을 수행하십시오.

커뮤니티 참고 사항 ⚠️

ultralytics>=8.3.12 버전부터 Ultralytics Explorer가 제거되었습니다. Explorer를 사용하려면 pip install ultralytics==8.3.11을 설치하십시오. 유사한(그리고 확장된) 데이터셋 탐색 기능은 Ultralytics Platform에서 이용할 수 있습니다.

Link to this section설정#

ultralytics 및 필수 종속성을 설치한 다음 소프트웨어와 하드웨어를 확인하십시오.

!uv pip install ultralytics[explorer] openai
yolo checks

Link to this section유사도 검색#

벡터 유사도 검색 기능을 활용하여 데이터셋에서 유사한 데이터 포인트를 임베딩 공간 내 거리와 함께 찾을 수 있습니다. 지정된 데이터셋-모델 쌍에 대해 임베딩 테이블을 생성하기만 하면 됩니다. 이는 한 번만 수행하면 되며 자동으로 재사용됩니다.

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 DataFrame으로 얻을 수 있습니다. 이 데이터셋을 사용하여 추가 필터링을 수행할 수 있습니다.

Ultralytics Explorer 유사도 검색 결과

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

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 sectionAI에게 질문하기: 자연어로 검색 또는 필터링#

Explorer 객체에 보고 싶은 데이터 포인트 유형을 프롬프트로 입력하면 해당 결과가 포함된 DataFrame을 반환하려고 시도합니다. LLM을 기반으로 하므로 항상 정확하지는 않을 수 있습니다. 이 경우 None을 반환합니다.

Ultralytics Explorer AI 자연어 쿼리 결과

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

이 결과를 시각화하려면 plot_query_result 유틸리티를 사용할 수 있습니다. 예시:

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

일치하는 이미지를 보여주는 AI 쿼리 결과

# 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 section데이터셋에서 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)

Explorer SQL 쿼리 결과 테이블

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

유사도 검색과 마찬가지로 exp.plot_sql_query를 사용하여 SQL 쿼리 결과를 직접 시각화하는 유틸리티도 제공됩니다.

SQL 쿼리 일치 이미지 시각화

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

Link to this section임베딩 테이블 작업 (고급)#

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

table = exp.table
print(table.schema)

Link to this section원시 쿼리 실행#

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

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

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

  • L2
  • Cosine
  • Dot. Explorer의 유사도 검색은 기본적으로 L2를 사용합니다. 테이블에서 직접 쿼리를 실행하거나, lance 형식을 사용하여 데이터셋을 관리하기 위한 사용자 지정 유틸리티를 구축할 수 있습니다. 자세한 LanceDB 테이블 작업 내용은 문서를 참조하십시오.

Explorer 원시 SQL 쿼리 결과 테이블

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

Link to this section인기 데이터 형식과의 상호 변환#

df = table.to_pandas()
pa_table = table.to_arrow()

Link to this section임베딩 작업#

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

import numpy as np

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

Link to this section산점도(Scatterplot)#

임베딩 분석의 기초 단계 중 하나는 차원 축소를 통해 2D 공간에 플로팅하는 것입니다. 예시를 살펴보겠습니다.

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 section유사도 인덱스#

다음은 임베딩 테이블을 활용한 작업의 간단한 예시입니다. Explorer에는 similarity_index 작업이 포함되어 있습니다.

  • 이 작업은 각 데이터 포인트가 나머지 데이터셋과 얼마나 유사한지 추정하려고 시도합니다.
  • 생성된 임베딩 공간에서 현재 이미지보다 max_dist 내에 있는 이미지 임베딩이 몇 개인지를 한 번에 top_k 개의 유사한 이미지를 고려하여 계산합니다.

지정된 데이터셋, 모델, max_disttop_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

댓글