paint-brush
Создание расширенного поиска видео: поиск кадров в сравнении с мультимодальными встраиваниямик@datastax
2,044 чтения
2,044 чтения

Создание расширенного поиска видео: поиск кадров в сравнении с мультимодальными встраиваниями

к DataStax10m2024/07/10
Read on Terminal Reader

Слишком долго; Читать

Погружение в мультимодальное встраивание и поиск кадров — два передовых метода поиска видео.
featured image - Создание расширенного поиска видео: поиск кадров в сравнении с мультимодальными встраиваниями
DataStax HackerNoon profile picture

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


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


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


OpenOrigins создает инструменты для проверки происхождения медиаконтента и позволяет пользователям убедиться в его подлинности. Чтобы расширить свои предложения, британская компания решила разработать платформу для архивистов, позволяющую быстро и эффективно находить нужные видео в архивах цифровых медиа.


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


Используя сложные алгоритмы поиска и удобный интерфейс, OpenOrigins стремилась сделать платформу важным инструментом для этого сообщества.


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

Семантический поиск по видеоконтенту

Включение семантического поиска по видео для ответа на сложные вопросы, например: «Сколько минут видеоконтента показывают оленей в их естественной среде обитания?» требуются сложные возможности поиска, которые могут понимать и интерпретировать содержание видео, выходя за рамки базового сопоставления метаданных ключевых слов. Ключ к достижению этого? Мультимодальные вложения.

Мультимодальные модели внедрения и мультимодальные модели большого языка (LLM) можно рассматривать как аналогичные решения. Такие модели, как мультимодальные внедрения CLIP и Google, генерируют внедрения для таких типов данных, как текст, изображения и видео, создавая многомерные векторы, которые улавливают семантическое значение. Это позволяет использовать такие приложения, как семантический поиск, поиск контента и обнаружение сходства.


С другой стороны, мультимодальные LLM, такие как GPT-4 (с мультимодальными возможностями), Flamingo и Gemini, предназначены для понимания и создания контента на основе различных типов данных.


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


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


Мультимодальные модели внедрения

Мультимодальные модели большого языка (LLM)

Главное предложение

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

Генерируйте и анализируйте контент в различных модальностях.

Основной вариант использования

Семантический поиск, извлечение контента и сходство

Диалоговый искусственный интеллект, генерация контента и диалоговые системы

Примеры моделей

CLIP, Мультимодальная модель внедрения Google

GPT-4 (с мультимодальными возможностями), Llava, Gemini, Flamingo, LaMDA

Поиск и извлечение

Оптимизирован для быстрого и точного поиска и сходства.

Оптимизирован для всестороннего понимания и создания различных типов данных.

Приложения

Модерация контента, рекомендательные системы, семантический поиск

Диалоговые агенты, создание контента, мультимодальные взаимодействия

Подход 1. Поиск кадров с помощью встраивания изображений

Первый метод, который рассмотрела OpenOrigins, включал покадровый анализ видео с использованием встраивания изображений. Этот подход разбивает видео на отдельные кадры, каждый из которых преобразуется в векторное внедрение с помощью КЛИП встраивание моделей.



Рисунок 1: Краткое описание диаграммы подхода (адаптировано из «Изучение переносимых визуальных моделей под контролем естественного языка»). В то время как стандартные модели изображений совместно обучают экстрактор признаков изображения и линейный классификатор для прогнозирования некоторой метки, CLIP совместно обучает кодировщик изображений и кодировщик текста для прогнозирования правильных пар из пакета обучающих примеров (изображение, текст). Во время тестирования обученный текстовый кодер синтезирует линейный классификатор с нулевым выстрелом, внедряя имена или описания классов целевого набора данных.


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


Изучая миллионы веб-изображений с их описаниями, CLIP понимает визуальные концепции так же, как люди воспринимают и описывают мир. Его обучение включает в себя «контрастное обучение», когда он учится сопоставлять изображения с их правильными описаниями, что дает ему уникальную способность решать различные задачи, понимая связь между тем, что мы видим, и словами, которые мы используем.


Это делает CLIP легко адаптируемым и полезным для приложений, требующих глубокого понимания изображений и языка одновременно.


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


Извлечение кадров разбивает видео на кадры с заданными интервалами. Каждый кадр обрабатывается с помощью модели внедрения изображения для создания многомерного векторного представления. Эти векторы хранятся в хранилище векторов, таком как DataStax Astra DB, что обеспечивает эффективный поиск по сходству.


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

Подход 2: Мультимодальное внедрение с помощью узла мультимодального внедрения Google

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

Мультимодальная модель внедрения Google: размер 1048*

Мультимодальные встраивания Google Cloud Vertex AI для видео

Vertex AI от Google Cloud предлагает мощные мультимодальные встраивания, в том числе сложные встраивания видео, которые преобразуют видеоконтент в многомерные векторы. Эти 1408-мерные внедрения позволяют использовать различные приложения, такие как модерация контента, семантический поиск и классификация видео.


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


Интеграция этих вложений с DataStax Astra БД обеспечивает эффективную обработку больших наборов данных и обеспечивает надежную серверную поддержку для эффективного поиска. Этот подход повышает релевантность и точность поиска за счет поддержки нескольких типов ввода для поисковых запросов и применения расширенных возможностей искусственного интеллекта. Этот метод эффективно управляет большими наборами данных с временным контекстом, что делает его отличным выбором для сложных сценариев поиска.


Мультимодальные внедрения Google и метод CLIP встраивают мультимодальные данные в общее пространство внедрения. Основное отличие состоит в том, что мультимодальные встраивания Google поддерживают видео, а CLIP — нет.

Технический обзор

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

Подход 1. Поиск кадров с встраиванием изображений.

В этом подходе мы вводим Блокнот Колаб предназначен для демонстрации анализа видео с поиском кадров с использованием встраивания изображений. Блокнот содержит пошаговое руководство по разбиению видеоконтента на отдельные кадры и анализу каждого кадра с использованием модели внедрения CLIP. Такой подход позволяет осуществлять высокоточный поиск конкретных объектов или сцен в видеоданных.


Функция get_single_frame_from_scene вычисляет идентификатор кадра, устанавливает захват видео для этого кадра и считывает его:


 def get_single_frame_from_scene(scene, video_capture): frame_id = (scene[1] - scene[0]).frame_num // 2 + scene[0].frame_num video_capture.set(cv2.CAP_PROP_POS_FRAMES, frame_id) _, frame = video_capture.read() return Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))


Функция get_frames_from_video обрабатывает видео, определяя сцены с помощью AdaptiveDetector, и извлекает один кадр из каждой сцены, вызывая get_single_frame_from_scene, сохраняя эти кадры в списке:


 def get_frames_from_video(video_path): res = [] video_capture = cv2.VideoCapture(video_path) content_list = detect(video_path, AdaptiveDetector()) for scene in content_list: res.append(get_single_frame_from_scene(scene, video_capture)) return res


Функция get_image_embedding использует Модель CLIP для создания внедрения для данного изображения, передачи его через модель и возврата результирующего вектора признаков в виде списка чисел с плавающей запятой:


 def get_image_embedding(image): inputs = clip_processor(images=image, return_tensors="pt") image_embeddings = model.get_image_features(**inputs) return list(image_embeddings[0].detach().numpy().astype(float))


Этот код подключается к базе данных Astra DB, создает коллекцию объектов JSON с векторными вложениями и вставляет эти объекты в коллекцию «видео» в базе данных:


 import json from astrapy import DataAPIClient client = DataAPIClient(ASTRA_DB_TOKEN) database = client.get_database(ASTRA_DB_API_ENDPOINT) collectiondb = database.video json_embedding = [ {"id": f"{i+1}", "$vector": values} for i, values in enumerate(image_embeddings) ] response = collectiondb.insert_many(json_embedding)


Найдите определенный текст с помощью вложений OpenAI Clip:


 query_text = "men with white hair" query_embedding = get_text_embedding(query_text) result = collectiondb.find_one({}, vector=query_embedding)


Подход 2: Мультимодальное внедрение с помощью модели мультимодального внедрения Google.

Здесь вы можете увидеть, как создавать встраивания видео с использованием мультимодальной модели встраивания Google и сохранять их в базе данных Astra, включая информацию метаданных, такую как start_offset_sec и end_offset_sec (см. Репозиторий GitHub ).


 import vertexai from vertexai.vision_models import MultiModalEmbeddingModel, Video from astrapy import DataAPIClient import streamlit as st # Initialize Vertex AI vertexai.init(project=st.secrets['PROJECT'], location=st.secrets['REGION']) # Initialize the client client = DataAPIClient(st.secrets['ASTRA_TOKEN']) database = client.get_database(st.secrets['ASTRA_API_ENDPOINT']) my_collection = database.create_collection( "videosearch", dimension=1408, metric=astrapy.constants.VectorMetric.COSINE, ) collectiondb = database.videosearch # Load the pre-trained model and video model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding") video = Video.load_from_file(st.secrets['PATH']) # Get embeddings with the specified contextual text embeddings = model.get_embeddings( video=video, contextual_text="Mixed Content", dimension=1408, ) # Video Embeddings are segmented based on the video_segment_config. for video_embedding in embeddings.video_embeddings: # Check if embedding is a numpy array or a tensor and convert accordingly if isinstance(video_embedding.embedding, (list, tuple)): embedding_list = video_embedding.embedding else: embedding_list = video_embedding.embedding.tolist() embedding_data = { "metadata": { "start_offset_sec": video_embedding.start_offset_sec, "end_offset_sec": video_embedding.end_offset_sec }, "$vector": embedding_list # Ensure embedding is in list format } response = collectiondb.insert_one(embedding_data)


Здесь мы настроили Потоковый пользовательский интерфейс , мощный инструмент для создания интерактивных веб-приложений, управляемых данными, с минимальными усилиями, используя простоту и мощь Python. Кроме того, мы включаем функцию поиска для определенного текста или изображений в приведенном ниже коде:


 import vertexai from vertexai.vision_models import MultiModalEmbeddingModel, Video from vertexai.vision_models import Image as img from astrapy import DataAPIClient import streamlit as st from PIL import Image st.title("Video Search App") user_input_placeholder = st.empty() user_input = user_input_placeholder.text_input( "Describe the content you're looking for:", key="user_input" ) uploaded_file = st.file_uploader("Choose an image file that is similar you're looking for", type="png") if uploaded_file is not None: image = Image.open(uploaded_file) image_path = st.secrets['IMAGE_PATH'] image.save(image_path) saved_image = Image.open(image_path) st.image(saved_image, caption='', use_column_width=True) # Initialize Vertex AI vertexai.init(project=st.secrets['PROJECT'], location=st.secrets['REGION']) # Initialize the client client = DataAPIClient(st.secrets['ASTRA_TOKEN']) database = client.get_database(st.secrets['ASTRA_API_ENDPOINT']) collectiondb = database.videosearch # Load the pre-trained model and video model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding") video = Video.load_from_file(st.secrets['PATH']) # Search action trigger if st.button("Search"): if user_input: embeddings = model.get_embeddings( contextual_text=user_input ) result = collectiondb.find_one({}, vector=embeddings.text_embedding) start_offset_value = result['metadata']['start_offset_sec'] end_offset_value = result['metadata']['end_offset_sec'] st.write("Text input result found between: " + str(start_offset_value) + "-" + str(end_offset_value)) video_file = open(st.secrets['PATH'], 'rb') video_bytes = video_file.read() st.video(video_bytes, start_time=start_offset_value) if uploaded_file is not None: embimage = img.load_from_file(image_path) embeddingsimg = model.get_embeddings( image=embimage ) imgresult = collectiondb.find_one({}, vector=embeddingsimg.image_embedding) start_offset_value = imgresult['metadata']['start_offset_sec'] end_offset_value = imgresult['metadata']['end_offset_sec'] st.write("Image input result found between: " + str(start_offset_value) + "-" + str(end_offset_value)) video_file = open(st.secrets['PATH'], 'rb') video_bytes = video_file.read() st.video(video_bytes, start_time=start_offset_value)


Вот как выглядят результаты:

Заключение

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


Используя Astra DB, платформа поиска видео может предоставить пользователям расширенные возможности поиска, обеспечивая точный и эффективный поиск конкретного видеоконтента из больших наборов данных. Это значительно улучшает возможности анализа и интерпретации видеоданных, что приводит к более быстрому и точному получению информации.


Заглядывая в будущее, можно сказать, что будущее видеопоиска светлое благодаря постоянным исследованиям и разработкам. Достижения в области искусственного интеллекта и машинного обучения будут продолжать совершенствовать эти методы, делая их более доступными и эффективными. Интеграция с другими новыми технологиями, такими как дополненная реальность и анализ видео в реальном времени, еще больше расширит их возможности.


Мэтью Пендлбери , руководитель технического отдела OpenOrigins, и Бетул О'Рейли , архитектор решений, DataStax