Ultralytics 탐색기 API
커뮤니티 노트 ⚠️
기준 ultralytics>=8.3.10
, Ultralytics 탐색기 지원은 더 이상 사용되지 않습니다. 하지만 걱정하지 마세요! 이제 다음을 통해 유사하거나 더욱 향상된 기능에 액세스할 수 있습니다. Ultralytics HUB는 워크플로우를 간소화하도록 설계된 직관적인 노코드 플랫폼입니다. Ultralytics HUB를 사용하면 코드 한 줄 작성하지 않고도 데이터를 손쉽게 탐색, 시각화, 관리할 수 있습니다. 꼭 확인하시고 강력한 기능을 활용해 보세요!
소개
Explorer API는 데이터 세트를 탐색하기 위한 Python API입니다. SQL 쿼리, 벡터 유사성 검색, 시맨틱 검색을 사용하여 데이터 집합을 필터링하고 검색할 수 있습니다.
Watch: Ultralytics Explorer API 개요
설치
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)
참고
주어진 데이터 세트와 모델 쌍에 대한 임베딩 테이블은 한 번만 생성되어 재사용됩니다. 여기에는 온디스크로 확장되는 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)
여러 개의 입력이 있는 경우 임베딩된 항목의 합산값이 사용됩니다.
판다 데이터 프레임이 포함된 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
를 클릭하고 유사한 이미지를 그리드에 표시합니다.
유사한 이미지 플로팅
2. AI에게 질문(자연어 쿼리)
이를 통해 자연어를 사용하여 데이터 집합을 필터링하는 방법을 작성할 수 있습니다. SQL 쿼리 작성에 능숙할 필요는 없습니다. AI 기반 쿼리 생성기가 자동으로 처리해 줍니다. 예를 들어, "사람과 개가 정확히 한 마리씩 있는 이미지 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 쿼리를 입력으로 받아 결과와 함께 판다스 데이터 프레임을 반환합니다.
SQL 쿼리
SQL 쿼리 결과 플로팅
또한 다음을 사용하여 SQL 쿼리 결과를 플로팅할 수도 있습니다. plot_sql_query
메서드를 사용합니다. 이 메서드는 다음과 동일한 인수를 사용합니다. sql_query
를 클릭하고 결과를 그리드에 표시합니다.
SQL 쿼리 결과 플로팅
4. 임베딩 테이블로 작업하기
임베딩 테이블로 직접 작업할 수도 있습니다. 임베딩 테이블이 생성되면 임베딩 테이블에 액세스할 수 있습니다. Explorer.table
팁
탐색기는 다음에서 작동합니다. LanceDB 테이블을 내부적으로 사용합니다. 다음을 사용하여 이 테이블에 직접 액세스할 수 있습니다. Explorer.table
객체를 사용하여 원시 쿼리를 실행하고, 사전 및 사후 필터를 푸시 다운하는 등의 작업을 수행합니다.
다음은 표로 할 수 있는 몇 가지 예시입니다:
원시 임베딩 가져오기
예
사전 및 사후 필터를 사용한 고급 쿼리 기능
예
벡터 인덱스 생성
대규모 데이터 집합을 사용하는 경우 더 빠른 쿼리를 위해 전용 벡터 인덱스를 만들 수도 있습니다. 이 작업은 create_index
메서드를 사용합니다.
사용 가능한 벡터 인덱스 유형 및 매개변수에 대한 자세한 내용은 여기에서 확인하세요. 향후에는 탐색기 API에서 직접 벡터 인덱스를 생성할 수 있는 기능을 추가할 예정입니다.
5. 임베딩 애플리케이션
임베딩 테이블을 사용하여 다양한 탐색 분석을 수행할 수 있습니다. 다음은 몇 가지 예입니다:
유사성 지수
Explorer는 다음과 같이 제공됩니다. similarity_index
작동합니다:
- 각 데이터 포인트가 나머지 데이터 세트와 얼마나 유사한지 추정합니다.
- 얼마나 많은 이미지 임베딩이 다음보다 가까운 곳에 있는지 계산하여 이를 수행합니다.
max_dist
를 생성된 임베딩 공간의 현재 이미지에 추가합니다.top_k
비슷한 이미지를 한 번에 볼 수 있습니다.
다음 열이 포함된 판다 데이터 프레임을 반환합니다:
idx
: 데이터 세트의 이미지 인덱스im_file
: 이미지 파일 경로count
: 데이터 세트에서 다음보다 가까운 이미지 수max_dist
를 현재 이미지로sim_im_files
: 경로 목록count
유사한 이미지
팁
주어진 데이터 집합에 대해 모델링합니다, max_dist
& top_k
로 설정하면 한 번 생성된 유사도 인덱스가 재사용됩니다. 데이터 세트가 변경되었거나 단순히 유사도 인덱스를 다시 생성해야 하는 경우, 다음과 같이 전달할 수 있습니다. force=True
.
유사성 지수
유사성 인덱스를 사용하여 사용자 지정 조건을 작성하여 데이터 집합을 필터링할 수 있습니다. 예를 들어 다음 코드를 사용하여 데이터 세트의 다른 이미지와 유사하지 않은 이미지를 필터링할 수 있습니다:
임베딩 공간 시각화
원하는 플로팅 도구를 사용하여 임베딩 공간을 시각화할 수도 있습니다. 예를 들어 다음은 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()
탐색기 API를 사용하여 나만의 이력서 데이터 세트 탐색 보고서를 만들어 보세요. 영감을 얻으려면 VOC 탐색 예시를 확인하세요.
Ultralytics 탐색기를 사용하여 구축한 앱
익스플로러 API 기반 GUI 데모 체험하기
곧 출시 예정
- [ ] 데이터 집합에서 특정 레이블을 병합합니다. 예 - 모두 가져오기
person
라벨과car
도시 풍경의 레이블 - [ ] 지정된 임계값보다 유사도 지수가 높은 이미지를 제거합니다.
- [ ] 항목 병합/제거 후 새 데이터 세트 자동 유지
- [ ] 고급 데이터 집합 시각화
자주 묻는 질문
Ultralytics 익스플로러 API는 어떤 용도로 사용되나요?
Ultralytics Explorer API는 포괄적인 데이터 세트 탐색을 위해 설계되었습니다. 사용자는 SQL 쿼리, 벡터 유사성 검색, 시맨틱 검색을 사용해 데이터 세트를 필터링하고 검색할 수 있습니다. 이 강력한 Python API는 대규모 데이터 세트를 처리할 수 있어 Ultralytics 모델을 사용하는 다양한 컴퓨터 비전 작업에 이상적입니다.
Ultralytics 익스플로러 API는 어떻게 설치하나요?
Ultralytics Explorer API를 종속 요소와 함께 설치하려면 다음 명령을 사용합니다:
이렇게 하면 탐색기 API 기능에 필요한 모든 외부 라이브러리가 자동으로 설치됩니다. 추가 설정에 대한 자세한 내용은 문서의 설치 섹션을 참조하세요.
유사도 검색에 Ultralytics 익스플로러 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와 같은 대규모 데이터 세트에 대해 메모리 부족 없이 임베딩을 생성하고 재사용할 수 있습니다. 이러한 테이블은 한 번만 생성되고 재사용할 수 있으므로 데이터 처리의 효율성이 향상됩니다.
'AI에게 질문' 기능은 Ultralytics 탐색기 API에서 어떻게 작동하나요?
'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에게 질문하기 섹션을 참조하세요.