milvus-logo
LFAI
홈페이지
  • 통합

Milvus와 FiftyOne으로 비전 검색 수행하기

FiftyOne은 고품질 데이터 세트와 컴퓨터 비전 모델을 구축하기 위한 오픈 소스 도구입니다. 이 가이드는 Milvus의 유사도 검색 기능을 FiftyOne에 통합하여 자체 데이터 세트에서 비전 검색을 수행할 수 있도록 도와줍니다.

FiftyOne은 Python에서 프로그래밍 방식으로 또는 앱에서 포인트 앤 클릭을 통해 Milvus 컬렉션을 생성하고, 벡터를 업로드하고, 유사도 쿼리를 실행할 수 있는 API를 제공합니다. 이 페이지의 데모는 프로그래밍 방식의 통합에 중점을 두고 있습니다.

전제 조건

시작하기 전에 다음이 준비되어 있는지 확인하세요:

설치 요구 사항

이 예제에서는 pymilvusfiftyone 을 사용하겠습니다. 다음 명령을 실행하여 설치할 수 있습니다:

python3 -m pip install pymilvus fiftyone torch torchvision

기본 레시피

Milvus를 사용하여 FiftyOne 데이터 세트에 유사성 인덱스를 생성하고 이를 사용하여 데이터를 쿼리하는 기본 워크플로는 다음과 같습니다:

  1. 데이터 세트를 FiftyOne에 로드합니다.
  2. 데이터 세트의 샘플 또는 패치에 대한 벡터 임베딩을 계산하거나 임베딩 생성에 사용할 모델을 선택합니다.
  3. 밀버스 임베딩을 생성하려면 compute_similarity() 매개변수 backend="milvus" 를 설정하고 원하는 brain_key 을 지정하여 데이터 세트의 샘플 또는 개체 패치에 대한 Milvus 유사성 지수를 생성합니다.
  4. 이 Milvus 유사성 인덱스를 사용하여 데이터를 쿼리할 때 sort_by_similarity().
  5. 원하는 경우 인덱스를 삭제합니다.

절차

아래 예는 위의 워크플로우를 보여줍니다.

1. FiftyOne에 데이터 세트를 로드하고 샘플에 대한 임베딩을 계산합니다.

다음 코드는 FiftyOne에서 제공하는 샘플 이미지 세트를 사용하여 통합을 시연합니다. 이 문서를 참조하여 자신만의 이미지 세트를 준비할 수 있습니다.

import fiftyone as fo
import fiftyone.brain as fob
import fiftyone.zoo as foz

# Step 1: Load your data into FiftyOne
dataset = foz.load_zoo_dataset("quickstart")

# Steps 2 and 3: Compute embeddings and create a similarity index
milvus_index = fob.compute_similarity(
    dataset,
    brain_key="milvus_index",
    backend="milvus",
)

2. 비전 유사도 검색 수행

이제 Milvus 유사성 지수를 사용하여 데이터 세트에서 비전 유사성 검색을 수행할 수 있습니다.

# Step 4: Query your data
query = dataset.first().id  # query by sample ID
view = dataset.sort_by_similarity(
    query,
    brain_key="milvus_index",
    k=10,  # limit to 10 most similar samples
)

# Step 5 (optional): Cleanup

# Delete the Milvus collection
milvus_index.cleanup()

# Delete run record from FiftyOne
dataset.delete_brain_run("milvus_index")

3. 인덱스 삭제하기

Milvus 유사도 인덱스가 더 이상 필요하지 않은 경우 다음 코드를 사용하여 삭제할 수 있습니다:

# Step 5: Delete the index
milvus_index.delete()

Milvus 백엔드 사용

기본적으로 compute_similarity() 또는 sort_by_similarity() 을 호출하면 스클레인 백엔드가 사용됩니다.

Milvus 백엔드를 사용하려면 선택적 백엔드 매개변수( compute_similarity()"milvus" 로 설정하면 됩니다:

import fiftyone.brain as fob

fob.compute_similarity(..., backend="milvus", ...)

또는 다음 환경 변수를 설정하여 Milvus 백엔드를 사용하도록 FiftyOne을 영구적으로 구성할 수 있습니다:

export FIFTYONE_BRAIN_DEFAULT_SIMILARITY_BACKEND=milvus

또는 ~/.fiftyone/brain_config.json 에 위치한 뇌 구성의 default_similarity_backend 파라미터를 설정하여 설정할 수 있습니다:

{
    "default_similarity_backend": "milvus"
}

인증

사용자 지정 Milvus 서버를 사용하는 경우 다양한 방법으로 자격 증명을 제공할 수 있습니다.

Milvus 자격 증명을 구성하는 권장 방법은 아래 표시된 환경 변수에 저장하는 것이며, 이 변수는 Milvus에 연결될 때마다 FiftyOne에서 자동으로 액세스합니다.

export FIFTYONE_BRAIN_SIMILARITY_MILVUS_URI=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_USER=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_PASSWORD=XXXXXX

# also available if necessary
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SECURE=true
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_TOKEN=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_DB_NAME=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CLIENT_KEY_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CLIENT_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CA_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SERVER_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SERVER_NAME=XXXXXX

피프티원 브레인 설정

~/.fiftyone/brain_config.json 에 위치한 뇌 구성에 자격 증명을 저장할 수도 있습니다:

{
    "similarity_backends": {
        "milvus": {
            "uri": "XXXXXX",
            "user": "XXXXXX",
            "password": "XXXXXX",

            # also available if necessary
            "secure": true,
            "token": "XXXXXX",
            "db_name": "XXXXXX",
            "client_key_path": "XXXXXX",
            "client_pem_path": "XXXXXX",
            "ca_pem_path": "XXXXXX",
            "server_pem_path": "XXXXXX",
            "server_name": "XXXXXX"
        }
    }
}

이 파일은 생성할 때까지 존재하지 않는다는 점에 유의하세요.

키워드 인수

다음과 같은 메서드를 호출할 때마다 Milvus 자격 증명을 키워드 인자로 수동으로 제공할 수 있습니다. compute_similarity() 와 같은 메서드를 호출할 때마다 키워드 인자로 Milvus 자격 증명을 수동으로 제공할 수 있습니다:

import fiftyone.brain as fob

milvus_index = fob.compute_similarity(
    ...
    backend="milvus",
    brain_key="milvus_index",
    uri="XXXXXX",
    user="XXXXXX",
    password="XXXXXX",

    # also available if necessary
    secure=True,
    token="XXXXXX",
    db_name="XXXXXX",
    client_key_path="XXXXXX",
    client_pem_path="XXXXXX",
    ca_pem_path="XXXXXX",
    server_pem_path="XXXXXX",
    server_name="XXXXXX",
)

이 전략을 사용하는 경우 나중에 인덱스를 로드할 때 다음을 통해 자격 증명을 수동으로 제공해야 합니다. load_brain_results():

milvus_index = dataset.load_brain_results(
    "milvus_index",
    uri="XXXXXX",
    user="XXXXXX",
    password="XXXXXX",

    # also available if necessary
    secure=True,
    token="XXXXXX",
    db_name="XXXXXX",
    client_key_path="XXXXXX",
    client_pem_path="XXXXXX",
    ca_pem_path="XXXXXX",
    server_pem_path="XXXXXX",
    server_name="XXXXXX",
)

Milvus 구성 매개변수

Milvus 백엔드는 유사도 쿼리를 사용자 정의하는 데 사용할 수 있는 다양한 쿼리 매개변수를 지원합니다. 이러한 매개변수는 다음과 같습니다:

  • collection_name(없음): 사용하거나 생성할 Milvus 컬렉션의 이름입니다. 아무것도 제공되지 않으면 새 컬렉션이 생성됩니다.

  • metric ("dotproduct"): 새 인덱스를 생성할 때 사용할 임베딩 거리 메트릭입니다. 지원되는 값은 ("dotproduct", "euclidean")

  • 일관성_레벨 ("세션"): 사용할 일관성 수준입니다. 지원되는 값은 ("Strong", "Session", "Bounded", "Eventually")입니다.

이러한 매개변수에 대한 자세한 내용은 Milvus 인증 문서Milvus 일관성 수준 문서를 참조하세요.

이전 섹션에서 설명한 전략 중 하나를 통해 이러한 매개변수를 지정할 수 있습니다. 다음은 사용 가능한 모든 파라미터를 포함하는 브레인 구성의 예입니다:

{
    "similarity_backends": {
        "milvus": {
            "collection_name": "your_collection",
            "metric": "dotproduct",
            "consistency_level": "Strong"
        }
    }
}

그러나 일반적으로 이러한 매개변수는 compute_similarity() 에 직접 전달하여 특정 새 인덱스를 구성합니다:

milvus_index = fob.compute_similarity(
    ...
    backend="milvus",
    brain_key="milvus_index",
    collection_name="your_collection",
    metric="dotproduct",
    consistency_level="Strong",
)

브레인 런 관리

FiftyOne은 브레인 런을 관리하는 데 사용할 수 있는 다양한 방법을 제공합니다.

예를 들어 list_brain_runs() 를 호출하여 데이터 세트에서 사용 가능한 브레인 키를 확인할 수 있습니다:

import fiftyone.brain as fob

# List all brain runs
dataset.list_brain_runs()

# Only list similarity runs
dataset.list_brain_runs(type=fob.Similarity)

# Only list specific similarity runs
dataset.list_brain_runs(
    type=fob.Similarity,
    patches_field="ground_truth",
    supports_prompts=True,
)

또는 get_brain_info() 를 사용하여 브레인 런의 구성에 대한 정보를 검색할 수 있습니다:

info = dataset.get_brain_info(brain_key)
print(info)

사용 load_brain_results() 를 사용하여 SimilarityIndex 인스턴스를 로드할 때 사용합니다.

다음을 사용할 수 있습니다. rename_brain_run() 을 사용하여 기존 유사도 결과 실행과 연결된 브레인 키의 이름을 바꿀 수 있습니다:

dataset.rename_brain_run(brain_key, new_brain_key)

마지막으로 delete_brain_run() 을 사용하여 브레인 런을 삭제할 수 있습니다:

dataset.delete_brain_run(brain_key)

호출 delete_brain_run() 을 호출하면 FiftyOne 데이터 세트에서 브레인 런의 레코드만 삭제되며, 연결된 Milvus 컬렉션은 삭제되지 않으며, 다음과 같이 할 수 있습니다:

# Delete the Milvus collection
milvus_index = dataset.load_brain_results(brain_key)
milvus_index.cleanup()

Milvus 백엔드를 사용하는 FiftyOne 데이터 세트의 일반적인 벡터 검색 워크플로에 대해서는 여기에서 예제를 참조하세요.

번역DeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
피드백

이 페이지가 도움이 되었나요?