Ultralytics Explorer API
커뮤니티 참고 ⚠️
다음 시점부터 ultralytics>=8.3.10
, Ultralytics Explorer 지원이 중단되었습니다. 하지만 걱정하지 마세요! 이제 다음을 통해 유사하고 향상된 기능에 액세스할 수 있습니다. Ultralytics HUB워크플로우를 간소화하도록 설계된 직관적인 노코드 플랫폼인 Ultralytics HUB를 사용해 보세요. Ultralytics HUB를 통해 단 한 줄의 코드도 작성하지 않고도 데이터를 손쉽게 탐색, 시각화 및 관리할 수 있습니다. 지금 바로 확인하고 강력한 기능을 활용해 보세요! 🚀
소개
Explorer API는 데이터 세트를 탐색하기 위한 Python API입니다. SQL 쿼리, 벡터 유사성 검색 및 시맨틱 검색을 사용하여 데이터 세트를 필터링하고 검색하는 기능을 지원합니다.
참고: Ultralytics Explorer API 개요
설치
Explorer는 일부 기능에 대해 외부 라이브러리에 의존합니다. 이러한 라이브러리는 사용 시 자동으로 설치됩니다. 이러한 종속성을 수동으로 설치하려면 다음 명령을 사용하십시오.
pip install ultralytics[explorer]
사용법
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
# Create embeddings for your dataset
explorer.create_embeddings_table()
# Search for similar images to a given image/images
dataframe = explorer.get_similar(img="path/to/image.jpg")
# Or search for similar images to a given index/indices
dataframe = explorer.get_similar(idx=0)
참고
주어진 데이터 세트 및 모델 쌍에 대한 Embeddings 테이블은 한 번만 생성되어 재사용됩니다. 이것들은 내부적으로 LanceDB를 사용하며, 디스크에서 확장되므로 메모리 부족 없이 COCO와 같은 대규모 데이터 세트에 대한 임베딩을 생성하고 재사용할 수 있습니다.
임베딩 테이블을 강제로 업데이트하려면 다음을 전달하면 됩니다. force=True
에서 create_embeddings_table
메서드.
LanceDB 테이블 객체에 직접 액세스하여 고급 분석을 수행할 수 있습니다. 자세한 내용은 임베딩 테이블 작업 섹션에서 확인하세요.
1. 유사성 검색
유사성 검색은 주어진 이미지와 유사한 이미지를 찾는 기술입니다. 유사한 이미지는 유사한 임베딩을 가질 것이라는 아이디어를 기반으로 합니다. 임베딩 테이블이 구축되면 다음 방법 중 하나로 시맨틱 검색을 실행할 수 있습니다.
- 데이터 세트의 주어진 인덱스 또는 인덱스 목록에서:
exp.get_similar(idx=[1,10], limit=10)
- 데이터 세트에 없는 이미지 또는 이미지 목록에서:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
여러 입력이 있는 경우, 해당 임베딩의 집합이 사용됩니다.
다음과 같은 pandas 데이터프레임을 얻을 수 있습니다. limit
입력과 가장 유사한 데이터 포인트의 수와 임베딩 공간에서의 거리입니다. 이 데이터 세트를 사용하여 추가 필터링을 수행할 수 있습니다.
시맨틱 검색
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(
img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
limit=10,
)
print(similar.head())
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(idx=1, limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(idx=[1, 10], limit=10)
print(similar.head())
유사한 이미지 플로팅
유사한 이미지를 사용하여 플롯할 수도 있습니다. plot_similar
메서드입니다. 이 메서드는 다음과 동일한 인수를 사용합니다. get_similar
유사한 이미지를 그리드에 표시합니다.
유사한 이미지 플로팅
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(idx=1, limit=10)
plt.show()
2. AI에게 질문하기 (자연어 질의)
이를 통해 자연어를 사용하여 데이터 세트를 필터링하는 방법을 작성할 수 있습니다. SQL 쿼리를 작성하는 데 능숙할 필요가 없습니다. AI 기반 쿼리 생성기가 내부적으로 자동으로 수행합니다. 예를 들어 "정확히 1명의 사람과 2마리의 개가 있는 이미지 100개를 보여주세요. 다른 객체도 있을 수 있습니다."라고 말하면 내부적으로 쿼리를 생성하고 해당 결과를 보여줍니다. 참고: 이는 내부적으로 LLM을 사용하여 작동하므로 결과는 확률적이며 때로는 잘못될 수도 있습니다.
AI에게 질문하기
from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())
# plot the results
plt = plot_query_result(df)
plt.show()
3. SQL 쿼리
다음을 사용하여 데이터세트에 대해 SQL 쿼리를 실행할 수 있습니다. sql_query
메서드입니다. 이 메서드는 SQL 쿼리를 입력으로 받아 결과를 포함하는 pandas 데이터프레임을 반환합니다.
SQL 쿼리
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())
SQL 쿼리 결과 플로팅
SQL 쿼리 결과를 사용하여 플롯할 수도 있습니다. plot_sql_query
메서드입니다. 이 메서드는 다음과 동일한 인수를 사용합니다. sql_query
결과를 그리드에 표시합니다.
SQL 쿼리 결과 플로팅
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")
4. 임베딩 테이블 작업
임베딩 테이블을 직접 사용할 수도 있습니다. 임베딩 테이블이 생성되면 다음을 사용하여 액세스할 수 있습니다. Explorer.table
팁
Explorer는 다음에서 작동합니다. LanceDB 테이블을 내부적으로 사용합니다. 이 테이블에는 다음을 사용하여 직접 액세스할 수 있습니다. Explorer.table
객체 및 원시 쿼리 실행, 사전 및 사후 필터 푸시다운 등을 수행합니다.
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
다음은 테이블로 할 수 있는 작업의 몇 가지 예입니다.
원시 임베딩 가져오기
예시
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
embeddings = table.to_pandas()["vector"]
print(embeddings)
사전 및 사후 필터를 사용한 고급 쿼리
예시
from ultralytics import Explorer
exp = Explorer(model="yolo11n.pt")
exp.create_embeddings_table()
table = exp.table
# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)
벡터 인덱스 생성
대규모 데이터 세트를 사용할 때는 더 빠른 쿼리를 위해 전용 벡터 인덱스를 만들 수도 있습니다. 이는 다음을 사용하여 수행됩니다. create_index
LanceDB 테이블의 메서드입니다.
table.create_index(num_partitions=..., num_sub_vectors=...)
LanceDB 인덱싱 문서에서 사용 가능한 벡터 인덱스 유형 및 구성 파라미터에 대한 자세한 내용을 확인하십시오. 앞으로 Explorer API를 통해 직접 벡터 인덱스를 생성할 수 있도록 지원할 계획입니다.
5. 임베딩 애플리케이션
임베딩 테이블을 사용하여 다양한 탐색적 분석을 수행할 수 있습니다. 몇 가지 예는 다음과 같습니다.
유사성 지수
Explorer에는 다음이 함께 제공됩니다. similarity_index
작업:
- 각 데이터 포인트가 데이터 세트의 나머지 부분과 얼마나 유사한지 추정하려고 시도합니다.
- 생성된 임베딩 공간에서 현재 이미지에 max_dist보다 더 가까이 있는 이미지 임베딩의 수를 계산하여 이를 수행하며, 한 번에 top_k 유사 이미지를 고려합니다.
max_dist
생성된 임베딩 공간에서 현재 이미지에 대해 고려할 때,top_k
한 번에 유사한 이미지.
다음 열이 있는 pandas 데이터프레임을 반환합니다.
idx
: 데이터 세트 내 이미지의 인덱스im_file
: 이미지 파일 경로count
: 데이터 세트에서 보다 가까운 이미지 수max_dist
현재 이미지에 대해sim_im_files
: 다음의 경로 목록count
유사 이미지
팁
특정 데이터 세트, 모델의 경우, max_dist
& top_k
일단 생성된 유사성 지수는 재사용됩니다. 데이터 세트가 변경되었거나 유사성 지수를 다시 생성해야 하는 경우 다음을 전달할 수 있습니다. force=True
.
유사성 지수
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
sim_idx = exp.similarity_index()
유사성 지수를 사용하여 사용자 지정 조건을 만들어 데이터 세트를 필터링할 수 있습니다. 예를 들어 다음 코드를 사용하여 데이터 세트의 다른 이미지와 유사하지 않은 이미지를 필터링할 수 있습니다.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
임베딩 공간 시각화
원하는 플로팅 도구를 사용하여 임베딩 공간을 시각화할 수도 있습니다. 다음은 matplotlib을 사용한 간단한 예제입니다.
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 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 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 API를 사용하여 직접 CV 데이터 세트 탐색 보고서를 만들어 보세요. 영감을 얻으려면 VOC 탐색 예제를 확인하세요.
Ultralytics Explorer를 사용하여 빌드된 앱
Explorer API를 기반으로 하는 GUI 데모를 사용해 보세요.
출시 예정
- [ ] 데이터 세트에서 특정 레이블을 병합합니다. 예 - 모두 가져오기
person
COCO의 라벨 및car
Cityscapes의 라벨 - [ ] 주어진 임계값보다 유사성 지수가 높은 이미지를 제거합니다.
- [ ] 항목 병합/제거 후 새 데이터 세트를 자동으로 유지합니다.
- [ ] 고급 데이터 세트 시각화
FAQ
Ultralytics Explorer API는 어디에 사용됩니까?
Ultralytics Explorer API는 포괄적인 데이터 세트 탐색을 위해 설계되었습니다. 사용자는 SQL 쿼리, 벡터 유사성 검색 및 시맨틱 검색을 사용하여 데이터 세트를 필터링하고 검색할 수 있습니다. 이 강력한 python API는 대규모 데이터 세트를 처리할 수 있어 Ultralytics 모델을 사용하는 다양한 컴퓨터 비전 작업에 이상적입니다.
Ultralytics Explorer API는 어떻게 설치합니까?
Ultralytics Explorer API와 해당 종속성을 설치하려면 다음 명령을 사용하십시오.
pip install ultralytics[explorer]
이렇게 하면 Explorer API 기능에 필요한 모든 외부 라이브러리가 자동으로 설치됩니다. 추가 설정에 대한 자세한 내용은 설명서의 설치 섹션을 참조하세요.
유사성 검색을 위해 Ultralytics Explorer API를 어떻게 사용할 수 있습니까?
Ultralytics Explorer API를 사용하여 임베딩 테이블을 만들고 유사한 이미지를 쿼리하여 유사성 검색을 수행할 수 있습니다. 다음은 기본적인 예입니다.
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()
# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())
자세한 내용은 유사성 검색 섹션을 참조하세요.
Ultralytics Explorer에서 LanceDB를 사용할 때의 이점은 무엇인가요?
Ultralytics Explorer에서 내부적으로 사용되는 LanceDB는 확장 가능한 온디스크 임베딩 테이블을 제공합니다. 이를 통해 메모리 부족 없이 COCO와 같은 대규모 데이터 세트에 대한 임베딩을 생성하고 재사용할 수 있습니다. 이러한 테이블은 한 번만 생성되며 재사용이 가능하여 데이터 처리 효율성을 향상시킵니다.
Ultralytics Explorer API에서 Ask AI 기능은 어떻게 작동합니까?
Ask AI 기능을 통해 사용자는 자연어 쿼리를 사용하여 데이터 세트를 필터링할 수 있습니다. 이 기능은 LLM을 활용하여 이러한 쿼리를 백그라운드에서 SQL 쿼리로 변환합니다. 다음은 예입니다.
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()
# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())
더 많은 예제는 AI에게 물어보세요 섹션에서 확인하세요.