Link to this sectionVOC 탐색 예제#
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
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 checksLink 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으로 얻을 수 있습니다. 이 데이터셋을 사용하여 추가 필터링을 수행할 수 있습니다.

# 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을 반환합니다.

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)
# 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)
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)유사도 검색과 마찬가지로 exp.plot_sql_query를 사용하여 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 테이블 작업 내용은 문서를 참조하십시오.

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 공간에 플로팅하는 것입니다. 예시를 살펴보겠습니다.

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_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