🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Интеграции
    • Оценка и наблюдаемость
  • Home
  • Docs
  • Интеграции

  • Оценка и наблюдаемость

  • FiftyOne

Проводите зрительный поиск с помощью Milvus и FiftyOne

FiftyOne - это инструмент с открытым исходным кодом для создания высококачественных наборов данных и моделей компьютерного зрения. Это руководство поможет вам интегрировать возможности поиска по сходству Milvus в FiftyOne, что позволит вам проводить поиск по сходству в ваших собственных наборах данных.

FiftyOne предоставляет API для создания коллекций Milvus, загрузки векторов и выполнения запросов на поиск сходства, как программно на языке Python, так и с помощью "укажи и щелкни" в приложении. Демонстрация на этой странице посвящена программной интеграции.

Предварительные условия

Перед началом работы убедитесь, что у вас есть все необходимое:

Требования к установке

Для этого примера мы будем использовать pymilvus и fiftyone. Вы можете установить их, выполнив следующие команды:

python3 -m pip install pymilvus fiftyone torch torchvision

Основной рецепт

Основная схема работы по использованию Milvus для создания индекса сходства в наборах данных FiftyOne и использования его для запросов к данным выглядит следующим образом:

  1. Загрузите набор данных в FiftyOne.
  2. Вычислите векторные вложения для образцов или патчей в вашем наборе данных или выберите модель для использования генерируемых вложений.
  3. Используйте compute_similarity() чтобы сгенерировать индекс сходства Милвуса для образцов или пятен объектов в наборе данных, задав параметр backend="milvus" и указав brain_key по вашему выбору.
  4. Используйте этот индекс сходства Милвуса для запроса данных с помощью 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() будет использоваться бэкенд sklearn.

Чтобы использовать бэкенд Milvus, просто установите необязательный параметр бэкенда compute_similarity()"milvus" :

import fiftyone.brain as fob

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

Кроме того, вы можете постоянно настраивать FiftyOne на использование бэкенда Milvus, установив следующую переменную окружения:

export FIFTYONE_BRAIN_DEFAULT_SIMILARITY_BACKEND=milvus

или установив параметр default_similarity_backend в конфиге вашего мозга, расположенном по адресу ~/.fiftyone/brain_config.json:

{
    "default_similarity_backend": "milvus"
}

Аутентификация

Если вы используете собственный сервер Milvus, вы можете предоставить свои учетные данные различными способами.

Рекомендуемый способ настройки учетных данных Milvus - хранить их в переменных окружения, показанных ниже, к которым FiftyOne автоматически обращается при каждом подключении к Milvus.

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

Вы также можете хранить свои учетные данные в конфигурации мозга, расположенной по адресу ~/.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 поддерживает множество параметров запроса, которые можно использовать для настройки запросов на сходство. К таким параметрам относятся:

  • имя_коллекции(нет): имя коллекции Milvus, которую нужно использовать или создать. Если имя не указано, будет создана новая коллекция

  • metric ("dotproduct"): метрика расстояния встраивания, которую следует использовать при создании нового индекса. Поддерживаются следующие значения: ("dotproduct", "euclidean")

  • consistency_level ("Session"): используемый уровень согласованности. Поддерживаются следующие значения: ("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()

Для общего рабочего процесса векторного поиска в наборе данных FiftyOne с использованием бэкенда Milvus см. примеры здесь.

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?