paint-brush
Creación de búsqueda de vídeo avanzada: búsqueda de fotogramas frente a incrustaciones multimodalesby@datastax
278

Creación de búsqueda de vídeo avanzada: búsqueda de fotogramas frente a incrustaciones multimodales

DataStax10m2024/07/10
Read on Terminal Reader

Una inmersión en la incrustación multimodal y la búsqueda de fotogramas, dos técnicas avanzadas de búsqueda de vídeos
featured image - Creación de búsqueda de vídeo avanzada: búsqueda de fotogramas frente a incrustaciones multimodales
DataStax HackerNoon profile picture

Imagine a un científico de datos que estudia el comportamiento de la vida silvestre y analiza cientos de horas de video de cámaras en un bosque remoto. O un entrenador deportivo que necesita identificar jugadas clave de partidos de una temporada completa para desarrollar nuevas estrategias. Alternativamente, considere un cineasta que busca escenas específicas dentro de una enorme galería de videos para armar un documental.


Tradicionalmente, todos estos expertos se enfrentan al desafío abrumador, propenso a errores y que requiere mucho tiempo de clasificar manualmente horas interminables de metraje.


Sin embargo, los avances en inteligencia artificial y aprendizaje automático han transformado drásticamente las aplicaciones de búsqueda de vídeos. Estas tecnologías ahora nos permiten buscar objetos y eventos específicos dentro de extensos conjuntos de datos de video con una sofisticación increíble. Los investigadores y científicos de datos pueden identificar segmentos de vídeo relevantes con una precisión y eficiencia excepcionales.


Orígenes abiertos crea herramientas para determinar la procedencia del contenido de los medios y permitir a los usuarios determinar su autenticidad. Para aumentar su oferta, la empresa con sede en el Reino Unido se propuso desarrollar una plataforma para que los archiveros encuentren de forma rápida y eficiente vídeos relevantes en archivos de medios digitales.


El objetivo era simplificar el proceso de investigación proporcionando capacidades de búsqueda avanzada, permitiendo a los usuarios localizar fácilmente imágenes con contenido o propiedades específicas de conjuntos de datos de vídeo extremadamente grandes.


Mediante el uso de sofisticados algoritmos de búsqueda y una interfaz fácil de usar, OpenOrigins pretendía hacer de la plataforma una herramienta importante para esta comunidad.


OpenOrigins consideró dos enfoques tecnológicos para construir esta oferta de búsqueda de video: búsqueda de fotogramas utilizando incrustaciones de imágenes e incrustaciones multimodales. Echemos un vistazo a cada opción.

Búsqueda semántica sobre contenido de vídeo

Permitir la búsqueda semántica en video para responder preguntas complejas como: "¿Cuántos minutos de contenido de video hay que muestran ciervos en su hábitat natural?" requiere capacidades de búsqueda sofisticadas que puedan comprender e interpretar el contenido de los videos más allá de la coincidencia básica de metadatos de palabras clave. ¿La clave para lograrlo? Incrustaciones multimodales.

Los modelos de integración multimodal y los modelos de lenguaje grande (LLM) multimodales podrían verse como soluciones similares. Modelos como CLIP y las incrustaciones multimodales de Google generan incrustaciones para tipos de datos como texto, imágenes y video, creando vectores de alta dimensión que capturan el significado semántico. Esto permite aplicaciones como búsqueda semántica, recuperación de contenido y detección de similitudes.


Por otro lado, los LLM multimodales como GPT-4 (con capacidades multimodales), Flamingo y Gemini están diseñados para comprender y generar contenido a través de diferentes tipos de datos.


Estos modelos funcionan bien con tareas complejas como la IA conversacional y la generación de contenido mediante el uso de entradas multimodales (texto e imágenes, por ejemplo) y la generación de salidas multimodales, lo que da como resultado respuestas significativas y contextualmente ricas.


Si bien los modelos integrados se centran en la búsqueda y recuperación eficientes, los LLM multimodales son adecuados para generar y comprender contenido diverso, lo que los hace ideales para chatbots, asistentes interactivos e interacciones multimodales.


Modelos de incrustación multimodales

Modelos de lenguaje grande multimodales (LLM)

Propósito principal

Habilite la búsqueda y recuperación en diferentes modalidades de datos, como texto e imagen.

Generar y comprender contenido en múltiples modalidades.

Caso de uso principal

Búsqueda semántica, recuperación de contenidos y similitud.

IA conversacional, generación de contenidos y sistemas de diálogo

Modelos de ejemplo

CLIP, modelo de incrustación multimodal de Google

GPT-4 (con capacidades multimodales), Llava, Gemini, Flamingo, LaMDA

Búsqueda y recuperación

Optimizado para búsqueda y similitud rápidas y precisas

Optimizado para una comprensión y generación integrales de diferentes tipos de datos.

Aplicaciones

Moderación de contenidos, sistemas de recomendación, búsqueda semántica.

Agentes conversacionales, creación de contenidos, interacciones multimodales.

Método 1: búsqueda de cuadros con incrustaciones de imágenes

El primer método que analizó OpenOrigins implicó el análisis cuadro por cuadro de videos utilizando incrustaciones de imágenes. Este enfoque divide el vídeo en fotogramas individuales, cada uno de los cuales se convierte en un vector incrustado mediante el uso ACORTAR modelos de incrustación.



Figura 1: Resumen del diagrama de enfoque (adaptado de “Aprendizaje de modelos visuales transferibles a partir de la supervisión del lenguaje natural”). Mientras que los modelos de imágenes estándar entrenan conjuntamente un extractor de características de imagen y un clasificador lineal para predecir alguna etiqueta, CLIP entrena conjuntamente un codificador de imágenes y un codificador de texto para predecir los emparejamientos correctos de un lote de ejemplos de entrenamiento (imagen, texto). En el momento de la prueba, el codificador de texto aprendido sintetiza un clasificador lineal de disparo cero incorporando los nombres o descripciones de las clases del conjunto de datos de destino.


CLIP, desarrollado por OpenAI , es un modelo de IA que aprende a comprender imágenes a través del lenguaje natural, a diferencia de los modelos tradicionales que se basan en imágenes específicamente etiquetadas.


Al estudiar millones de imágenes web con sus descripciones, CLIP comprende conceptos visuales de una manera similar a cómo los humanos perciben y describen el mundo. Su entrenamiento implica un "aprendizaje contrastante", donde aprende a relacionar imágenes con sus descripciones correctas, lo que le otorga la capacidad única de manejar diversas tareas al comprender el vínculo entre lo que vemos y las palabras que usamos.


Esto hace que CLIP sea altamente adaptable y útil para aplicaciones que requieren una comprensión profunda de las imágenes y el lenguaje en conjunto.


Estas incrustaciones se almacenan en una base de datos vectorial, lo que permite búsquedas rápidas y precisas al hacer coincidir texto con texto, texto con imagen o imagen con imagen en función de la similitud semántica.


La extracción de fotogramas descompone los vídeos en fotogramas a intervalos específicos. Cada cuadro se procesa a través de un modelo de incrustación de imágenes para generar una representación vectorial de alta dimensión. Estos vectores se almacenan en un almacén de vectores como DataStax Astra DB, que permite búsquedas de similitudes eficientes.


Este método ofrece alta precisión en la búsqueda semántica multimodal y es muy adecuado para buscar objetos o escenas específicas. Sin embargo, requiere una gran cantidad de cálculo, especialmente para vídeos largos, y puede pasar por alto el contexto temporal o los cambios entre fotogramas.

Enfoque 2: incrustaciones multimodales con el nodo de incrustación multimodal de Google

El segundo enfoque aprovecha la última tecnología de IA generativa con incorporaciones multimodales, específicamente utilizando Google modelo de incrustación multimodal . Este método innovador permite a los usuarios buscar videos usando imágenes, texto o videos, convirtiendo todas las entradas en un espacio de incrustación común . El modelo genera incrustaciones para varios tipos de entrada y las asigna a un espacio vectorial compartido. Los usuarios pueden buscar utilizando diferentes modalidades convertidas a incrustaciones de las mismas dimensiones.

Modelo de incrustación multimodal de Google: Dimensión 1048*

Incorporaciones multimodales de Google Cloud Vertex AI para vídeo

Vertex AI de Google Cloud ofrece potentes incrustaciones multimodales, incluidas sofisticadas incrustaciones de vídeo que transforman el contenido de vídeo en vectores de alta dimensión. Estas incorporaciones de 1408 dimensiones permiten diversas aplicaciones, como moderación de contenido, búsqueda semántica y clasificación de videos.


Al representar videos numéricamente, estas incrustaciones permiten tareas avanzadas de aprendizaje automático, lo que facilita la búsqueda, el análisis y la categorización de contenido de video.


Integrando estas incrustaciones con DataStax Astra DB garantiza un manejo eficiente de grandes conjuntos de datos y proporciona un sólido soporte de backend para una recuperación efectiva. Este enfoque mejora la relevancia y precisión de la búsqueda al admitir múltiples tipos de entrada para consultas de búsqueda y aplicar capacidades avanzadas de IA. Este método gestiona de manera eficiente grandes conjuntos de datos con contexto temporal, lo que lo convierte en una excelente opción para escenarios de búsqueda complejos.


Las incrustaciones multimodales de Google y el método CLIP incrustan datos multimodales en un espacio de incrustación común. La principal diferencia es que las incrustaciones multimodales de Google admiten vídeo, mientras que CLIP no.

Resumen técnico

Hemos reunido los repositorios a continuación para iluminar y aplicar ejemplos tanto para el análisis de video de búsqueda de cuadros como para las incrustaciones multimodales. Estos ejemplos proporcionan demostraciones prácticas e instrucciones detalladas para ayudar a implementar y evaluar cada enfoque de manera efectiva.

Método 1: búsqueda de cuadros con incrustaciones de imágenes

En este enfoque, introducimos un Cuaderno de colaboración diseñado para demostrar el análisis de vídeo de búsqueda de fotogramas mediante incrustaciones de imágenes. El cuaderno proporciona una guía paso a paso para dividir el contenido de vídeo en fotogramas individuales y analizar cada fotograma utilizando el modelo de incrustación CLIP. Este enfoque permite búsquedas de alta precisión de objetos o escenas específicas dentro de los datos de vídeo.


La función get_single_frame_from_scene calcula el ID del fotograma, establece la captura de vídeo en este fotograma y lo lee:


 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))


La función get_frames_from_video procesa un video, detecta escenas usando AdaptiveDetector y extrae un solo cuadro de cada escena llamando a get_single_frame_from_scene, almacenando estos cuadros en una lista:


 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


La función get_image_embedding utiliza un modelo CLIP para generar una incrustación para una imagen determinada, pasándola a través del modelo y devolviendo el vector de características resultante como una lista de flotantes:


 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))


Este código se conecta a una base de datos Astra DB, crea una colección de objetos JSON con incrustaciones de vectores e inserta estos objetos en la colección de "videos" de la base de datos:


 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)


Busque un texto determinado utilizando incrustaciones de OpenAI Clip:


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


Enfoque 2: incrustaciones multimodales con el modelo de incrustación multimodal de Google

Aquí puede ver cómo crear incrustaciones de vídeo utilizando el modelo de incrustación multimodal de Google y almacenarlos en Astra DB, incluida información de metadatos como start_offset_sec y end_offset_sec (consulte la repositorio de 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)


Aquí configuramos el Interfaz de usuario optimizada , una poderosa herramienta para crear aplicaciones web interactivas basadas en datos con el mínimo esfuerzo, utilizando la simplicidad y el poder de Python. Además, habilitamos la función de búsqueda para texto o imágenes específicas en el siguiente código:


 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)


Así es como se ven los resultados:

Conclusión

Explorar estos dos enfoques resalta el importante potencial de las técnicas modernas de inteligencia artificial en aplicaciones de búsqueda de videos. Si bien la búsqueda de cuadros con incrustaciones de imágenes proporciona una alta precisión para búsquedas visuales específicas, la flexibilidad y el poder de las incrustaciones multimodales las convierten en una opción superior para requisitos de búsqueda multimodales complejos.


Al utilizar Astra DB, una plataforma de búsqueda de videos puede brindar a los usuarios capacidades de búsqueda avanzadas, lo que permite la recuperación precisa y eficiente de contenido de video específico a partir de grandes conjuntos de datos. Esto mejora significativamente la capacidad de analizar e interpretar datos de vídeo, lo que genera información más rápida y precisa.


De cara al futuro, el futuro de la búsqueda de vídeos es brillante gracias a la investigación y el desarrollo continuos. Los avances en inteligencia artificial y aprendizaje automático seguirán mejorando estas técnicas, haciéndolas más accesibles y eficientes. La integración con otras tecnologías emergentes, como la realidad aumentada y el análisis de vídeo en tiempo real, ampliará aún más sus capacidades.


Por Matthew Pendlebury , jefe de ingeniería, OpenOrigins, y Betul O'Reilly , arquitecto de soluciones, DataStax