Voxel51 совместно с сообществом FiftyOne рады сообщить об общедоступности FiftyOne 0.20. Этот выпуск содержит новые функции для индексирования и поиска наборов данных, что позволяет создавать рабочие процессы для совместной разработки наборов данных и моделей машинного обучения. Как? Читай дальше!

Подожди, а что такое FiftyOne?

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

Хорошо, давайте погрузимся в выпуск.

Вкратце: что нового в FiftyOne 0.20?

Этот выпуск включает в себя:

  • Поиск на естественном языке: теперь вы можете выполнять произвольные поисковые запросы по тексту непосредственно в приложении FiftyOne и Python SDK, используя мультимодальные векторные индексы для своих наборов данных.
  • API сходства: значительные обновления API сходства FiftyOne Brain, включая настраиваемые серверные части векторной базы данных и возможность изменять существующие индексы.
  • Интеграция с Qdrant и Pinecone: введена интеграция с Qdrant и Pinecone для поддержки запросов на сходство текста/изображения.
  • Наборы данных только для облаков точек: теперь вы можете создавать наборы данных, состоящие только из образцов облаков точек, и визуализировать их в представлении сетки приложения.

Ознакомьтесь с примечаниями к выпуску для получения полного списка дополнительных улучшений и исправлений в FiftyOne 0.20.

Кстати, FiftyOne Teams 1.2 тоже общедоступна! Ознакомьтесь с публикацией в блоге о выпуске FiftyOne Teams 1.2, чтобы узнать, что нового (оно полностью совместимо с вашими существующими рабочими процессами FiftyOne).

Присоединяйтесь к нам для живой демонстрации и AMA 20 апреля в 10:00 по тихоокеанскому времени.

Вы можете увидеть все новые функции в действии на живом веб-семинаре и AMA 20 апреля в 10:00 по тихоокеанскому времени. Мы продемонстрируем все новые функции FiftyOne 0.20, а затем проведем открытые вопросы и ответы, где вы сможете получить ответы на любые вопросы, которые у вас могут возникнуть. Зарегистрируйтесь здесь.

А теперь краткий обзор некоторых новых функций, которые мы включили в этот выпуск.

Поиск на естественном языке

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

Чтобы включить поиск на естественном языке в ваших наборах данных, просто следуйте этим инструкциям, чтобы добавить мультимодальные вложения в ваш набор данных:

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

dataset = foz.load_zoo_dataset("quickstart")

# Index images
fob.compute_similarity(
    dataset,
    model="clip-vit-base32-torch",
    brain_key="img_sim",
)
session = fo.launch_app(dataset)

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

Вы также можете специально индексировать патчи объектов в поле вашего набора данных:

# Index object patches in `ground_truth` field
fob.compute_similarity(
    dataset,
    patches_field="ground_truth",
    model="clip-vit-base32-torch",
    brain_key="gt_sim",
)

А затем запрашивайте исправления на естественном языке с помощью того же рабочего процесса в приложении всякий раз, когда вы работаете с представлением исправлений:

Как обычно, вы также можете выполнять запросы на естественном языке нативно из Python:

# Text query on entire images
query = "kites high in the air"
view = dataset.sort_by_similarity(query, k=15, brain_key="img_sim")

# Text query on object patches
query = "cute puppies"
patches = dataset.to_patches("ground_truth")

view = patches.sort_by_similarity(query, k=15, brain_key="gt_sim")
# Load view in the App
session.view = view

Ознакомьтесь с документацией для получения дополнительной информации об использовании поиска на естественном языке в ваших наборах данных.

API подобия

FiftyOne 0.20 вносит значительные улучшения в API подобия FiftyOne Brain, который обеспечивает основу для реализации таких функций, как поиск на естественном языке.

Раньше индексы подобия представляли собой статические объекты, которые нельзя было редактировать на месте после их создания. FiftyOne 0.20 представляет новый синтаксис и методы для создания, настройки и редактирования ваших индексов подобия:

  1. Инициализировать пустой индекс (с настраиваемым бэкендом!)
import fiftyone as fo
import fiftyone.brain as fob
import fiftyone.zoo as foz

dataset = foz.load_zoo_dataset("quickstart")

image_index = fob.compute_similarity(
    dataset,
    model="clip-vit-base32-torch",  # custom model
    embeddings=False,               # add embeddings later
    backend="sklearn",              # custom backend
    brain_key="img_sim",
)

2. Добавьте векторы в существующий индекс:

image_index.add_to_index(embeddings, sample_ids)

3. Получить векторы из индекса:

ids = dataset.take(50).values("id")
embeddings, sample_ids, _ = image_index.get_embeddings(sample_ids=ids)

4. Удалить векторы из индекса:

image_index.remove_from_index(sample_ids=ids)

Ознакомьтесь с документацией для получения дополнительной информации о создании, настройке и редактировании индексов подобия в ваших наборах данных.

Интеграция Qdrant и Pinecone

Qdrant и Pinecone — две из самых популярных доступных баз данных векторного поиска, и FiftyOne 0.20 представляет встроенную интеграцию с этими инструментами, которая упрощает использование внешней векторной базы данных для поиска сходства в ваших наборах данных FiftyOne!

После того, как вы настроили свой бэкэнд (Qdrant| Pinecone), подключиться к вашей векторной базе данных так же просто, как указать необязательный параметр backend при создании нового индекса сходства:

import fiftyone.brain as fob

index = fob.compute_similarity(
    dataset,
    ...,
    backend="qdrant|pinecone",
    brain_key="img_sim",
)

После создания индекса вы можете запустить любой из рабочих процессов, которые мы уже рассмотрели, и необходимые запросы ближайших соседей будут автоматически выполняться для внешней службы.

Для получения дополнительной информации о подключении к внешней базе данных векторов ознакомьтесь с документами по интеграции ниже:

И, чтобы глубже погрузиться в пример использования векторного поиска, ознакомьтесь с учебным пособием в блоге: Опыт поиска Google для данных компьютерного зрения: как использовать векторные поисковые системы, NLP и CLIP OpenAI в FiftyOne.

Наборы данных только для облака точек

FiftyOne 0.20 также включает некоторые ключевые усовершенствования для 3D-задач.

В предыдущих версиях FiftyOne единственным способом работы с наборами данных облаков точек в приложении было добавление образцов облаков точек в виде фрагментов сгруппированных наборов данных, которые также содержат другие модальности мультимедиа (изображение, видео и т. д.). Однако в FiftyOne 0.20 теперь вы можете создавать наборы данных, содержащие только образцы облака точек, и работать с ними изначально в сетке и модальных представлениях приложения.

Чтобы визуализировать образцы облаков точек в представлении сетки приложения (автономные или сгруппированные наборы данных), используйте встроенную утилиту compute_orthographic_projection_images() для создания проекций облаков точек:

import fiftyone as fo
import fiftyone.utils.utils3d as fou3d
import fiftyone.zoo as foz

dataset = foz.load_zoo_dataset("quickstart-groups")
fou3d.compute_orthographic_projection_images(dataset, (-1, 512), "/tmp/proj")

session = fo.launch_app(dataset)

При наличии ортогональные проекции автоматически используются приложением для визуализации данных облака точек в сетке. Любые 3D-обнаружения или 3D-полилинии в вашем наборе данных также динамически накладываются на проекции, и вы можете фильтровать/переключать видимость этих полей так же, как вы это делаете с наборами данных изображения/видео:

Другие улучшения 3D-опыта в приложении включают в себя:

  • Поддержка настройки размера облаков точек в 3D-визуализаторе.
  • Поддержка рендеринга сетчатого пола в 3D-визуализаторе.
  • Поддержка отображения/скрытия отдельных разделов сгруппированного вьювера
  • Теперь приложение будет запоминать ваши настройки 3D-визуализатора между сеансами!

Ознакомьтесь с документацией для получения дополнительной информации о добавлении образцов облаков точек и ортогональных проекций в ваши наборы данных FiftyOne и их визуализации в приложении.

Хотите узнать, как данные облака точек используются на практике? Ознакомьтесь с нашим новым руководством в блоге: Лучший способ визуализации 3D-облаков точек и работы с OpenAI Point-E.

Вклад сообщества

Спасибо следующим членам сообщества, которые внесли свой вклад в этот релиз!

Обновления сообщества FiftyOne

Сообщество FiftyOne продолжает расти!

Что дальше?

Первоначально опубликовано на https://voxel51.com 22 марта 2023 г.