paint-brush
Création d'une recherche vidéo avancée : recherche de trames et intégrations multimodalespar@datastax
2,044 lectures
2,044 lectures

Création d'une recherche vidéo avancée : recherche de trames et intégrations multimodales

par DataStax10m2024/07/10
Read on Terminal Reader

Trop long; Pour lire

Une plongée dans l'intégration multimodale et la recherche de trames, deux techniques avancées de recherche vidéo
featured image - Création d'une recherche vidéo avancée : recherche de trames et intégrations multimodales
DataStax HackerNoon profile picture

Imaginez un data scientist étudiant le comportement de la faune et analysant des centaines d’heures de séquences vidéo provenant de caméras dans une forêt isolée. Ou un coach sportif qui a besoin d'identifier les éléments clés des matchs d'une saison entière pour développer de nouvelles stratégies. Alternativement, considérez un cinéaste recherchant des scènes spécifiques dans une immense galerie vidéo pour reconstituer un documentaire.


Traditionnellement, tous ces experts sont confrontés au défi fastidieux, sujet aux erreurs et écrasant de trier manuellement des heures interminables de séquences.


Cependant, les progrès de l’intelligence artificielle et de l’apprentissage automatique ont considérablement transformé les applications de recherche vidéo. Ces technologies nous permettent désormais de rechercher des objets et des événements spécifiques dans de vastes ensembles de données vidéo avec une sophistication incroyable. Les data scientists et les chercheurs peuvent identifier les segments vidéo pertinents avec une précision et une efficacité exceptionnelles.


OuvrirOrigines crée des outils pour provenir du contenu multimédia et pour permettre aux utilisateurs de vérifier son authenticité. Pour augmenter son offre, la société basée au Royaume-Uni a décidé de développer une plate-forme permettant aux archivistes de trouver rapidement et efficacement des vidéos pertinentes dans les archives multimédias numériques.


L'objectif était de simplifier le processus de recherche en fournissant des capacités de recherche avancées, permettant aux utilisateurs de localiser facilement des séquences avec un contenu ou des propriétés spécifiques à partir d'ensembles de données vidéo extrêmement volumineux.


En utilisant des algorithmes de recherche sophistiqués et une interface conviviale, OpenOrigins visait à faire de la plateforme un outil important pour cette communauté.


OpenOrigins a envisagé deux approches technologiques pour créer cette offre de recherche vidéo : la recherche d'images utilisant des intégrations d'images et des intégrations multimodales. Jetons un coup d'œil à chaque option.

Recherche sémantique sur le contenu vidéo

Permettre la recherche sémantique sur vidéo pour répondre à des questions complexes telles que : « Combien de minutes de contenu vidéo existe-t-il qui montrent des cerfs dans leur habitat naturel ? » nécessite des capacités de recherche sophistiquées capables de comprendre et d'interpréter le contenu des vidéos au-delà de la correspondance de base des métadonnées des mots clés. La clé pour y parvenir ? Intégrations multimodales.

Les modèles d'intégration multimodaux et les grands modèles de langage multimodaux (LLM) peuvent être considérés comme des solutions similaires. Des modèles tels que les intégrations multimodales CLIP et Google génèrent des intégrations pour des types de données tels que le texte, les images et la vidéo, créant ainsi des vecteurs de grande dimension qui capturent une signification sémantique. Cela permet des applications telles que la recherche sémantique, la récupération de contenu et la détection de similarités.


D'un autre côté, les LLM multimodaux comme GPT-4 (avec des capacités multimodales), Flamingo et Gemini sont conçus pour comprendre et générer du contenu sur différents types de données.


Ces modèles fonctionnent bien avec des tâches complexes telles que l'IA conversationnelle et la génération de contenu en utilisant des entrées multimodales (texte et images, par exemple) et en générant des sorties multimodales, ce qui donne lieu à des réponses significatives et riches en contexte.


Alors que les modèles d'intégration se concentrent sur une recherche et une récupération efficaces, les LLM multimodaux sont adaptés à la génération et à la compréhension de contenus diversifiés, ce qui les rend idéaux pour les chatbots, les assistants interactifs et les interactions multimodales.


Modèles d'intégration multimodaux

Grands modèles de langage multimodaux (LLM)

Objectif principal

Activer la recherche et la récupération sur différentes modalités de données telles que le texte et l'image

Générer et comprendre du contenu selon plusieurs modalités

Cas d'utilisation principal

Recherche sémantique, récupération de contenu et similarité

IA conversationnelle, génération de contenu et systèmes de dialogue

Exemples de modèles

CLIP, modèle d'intégration multimodale de Google

GPT-4 (avec capacités multimodales), Llava, Gemini, Flamingo, LaMDA

Recherche et récupération

Optimisé pour une recherche et une similarité rapides et précises

Optimisé pour une compréhension et une génération complètes de différents types de données.

Applications

Modération de contenu, systèmes de recommandation, recherche sémantique

Agents conversationnels, création de contenu, interactions multimodales

Approche 1 : recherche de trames avec incorporation d'images

La première méthode examinée par OpenOrigins impliquait une analyse image par image de vidéos à l’aide d’intégrations d’images. Cette approche décompose la vidéo en images individuelles, chacune convertie en intégration vectorielle en utilisant AGRAFE intégration de modèles.



Figure 1 : Résumé du diagramme d'approche (adapté de « Learning Transferable Visual Models From Natural Language Supervision »). Alors que les modèles d'image standard entraînent conjointement un extracteur de caractéristiques d'image et un classificateur linéaire pour prédire certaines étiquettes, CLIP entraîne conjointement un encodeur d'image et un encodeur de texte pour prédire les paires correctes d'un lot d'exemples d'entraînement (image, texte). Au moment du test, l'encodeur de texte appris synthétise un classificateur linéaire sans tir en intégrant les noms ou les descriptions des classes de l'ensemble de données cible.


CLIP, développé par OpenAI , est un modèle d'IA qui apprend à comprendre les images grâce au langage naturel, contrairement aux modèles traditionnels qui s'appuient sur des images spécifiquement étiquetées.


En étudiant des millions d'images Web avec leurs descriptions, CLIP comprend les concepts visuels d'une manière similaire à la façon dont les humains perçoivent et décrivent le monde. Sa formation implique un « apprentissage contrasté », où il apprend à faire correspondre les images avec leurs descriptions correctes, ce qui lui confère la capacité unique de gérer diverses tâches en comprenant le lien entre ce que nous voyons et les mots que nous utilisons.


Cela rend CLIP hautement adaptable et utile pour les applications nécessitant une compréhension approfondie des images et du langage.


Ces intégrations sont stockées dans une base de données vectorielle, qui permet des recherches rapides et précises en faisant correspondre texte à texte, texte à image ou image à image sur la base d'une similarité sémantique.


L'extraction d'images décompose les vidéos en images à des intervalles spécifiés. Chaque image est traitée via un modèle d'intégration d'image pour générer une représentation vectorielle de grande dimension. Ces vecteurs sont stockés dans un magasin de vecteurs comme DataStax Astra DB, ce qui permet des recherches de similarité efficaces.


Cette méthode offre une grande précision dans la recherche sémantique multimodale et convient bien à la recherche d'objets ou de scènes spécifiques. Cependant, cela nécessite beaucoup de calculs, en particulier pour les vidéos longues, et peut manquer le contexte temporel ou les changements entre les images.

Approche 2 : intégrations multimodales avec le nœud d'intégration multimodale de Google

La deuxième approche exploite la dernière technologie d'IA générative avec des intégrations multimodales, en utilisant spécifiquement l'outil de Google. modèle d'intégration multimodal . Cette méthode innovante permet aux utilisateurs de rechercher des vidéos à l'aide d'images, de texte ou de vidéos, en convertissant toutes les entrées dans un espace d'intégration commun . Le modèle génère des intégrations pour différents types d'entrée et les mappe dans un espace vectoriel partagé. Les utilisateurs peuvent effectuer une recherche en utilisant différentes modalités converties en mêmes intégrations dimensionnelles.

Modèle d'intégration multimodal Google : dimension 1 048 *

Intégrations multimodales Google Cloud Vertex AI pour la vidéo

Vertex AI de Google Cloud propose de puissantes intégrations multimodales, y compris des intégrations vidéo sophistiquées qui transforment le contenu vidéo en vecteurs de grande dimension. Ces intégrations à 1 408 dimensions permettent diverses applications telles que la modération de contenu, la recherche sémantique et la classification vidéo.


En représentant les vidéos numériquement, ces intégrations permettent des tâches avancées d'apprentissage automatique, facilitant ainsi la recherche, l'analyse et la catégorisation du contenu vidéo.


Intégrer ces intégrations avec Base de données DataStax Astra garantit une gestion efficace des grands ensembles de données et fournit un support backend robuste pour une récupération efficace. Cette approche améliore la pertinence et la précision de la recherche en prenant en charge plusieurs types d'entrée pour les requêtes de recherche et en appliquant des fonctionnalités d'IA avancées. Cette méthode gère efficacement de grands ensembles de données avec un contexte temporel, ce qui en fait un excellent choix pour les scénarios de recherche complexes.


Les intégrations multimodales de Google et la méthode CLIP intègrent chacune des données multimodales dans un espace d'intégration commun. La principale différence est que les intégrations multimodales de Google prennent en charge la vidéo, contrairement à CLIP.

Aperçu technique

Nous avons rassemblé les référentiels ci-dessous pour éclairer et appliquer des exemples à la fois pour l'analyse vidéo par recherche d'images et pour les intégrations multimodales. Ces exemples fournissent des démonstrations pratiques et des instructions détaillées pour aider à mettre en œuvre et à évaluer efficacement chaque approche.

Approche 1 : Recherche de cadres avec intégrations d'images

Dans cette approche, nous introduisons un Carnet Colab conçu pour démontrer l'analyse vidéo de recherche d'images à l'aide d'intégrations d'images. Le bloc-notes fournit un guide étape par étape pour décomposer le contenu vidéo en images individuelles et analyser chaque image à l'aide du modèle d'intégration CLIP. Cette approche permet des recherches de haute précision d'objets ou de scènes spécifiques dans les données vidéo.


La fonction get_single_frame_from_scene calcule l'ID de l'image, définit la capture vidéo sur cette image et la lit :


 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 fonction get_frames_from_video traite une vidéo, détecte les scènes à l'aide d'AdaptiveDetector, et extrait une seule image de chaque scène en appelant get_single_frame_from_scene, en stockant ces images dans une liste :


 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 fonction get_image_embedding utilise un Modèle CLIP pour générer une intégration pour une image donnée, en la faisant passer à travers le modèle et en renvoyant le vecteur de caractéristiques résultant sous forme de liste de flottants :


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


Ce code se connecte à une base de données Astra DB, crée une collection d'objets JSON avec des intégrations vectorielles et insère ces objets dans la collection « vidéo » de la base de données :


 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)


Recherchez un certain texte à l'aide des intégrations OpenAI Clip :


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


Approche 2 : intégrations multimodales avec le modèle d'intégration multimodale de Google

Ici, vous pouvez voir comment créer des intégrations vidéo à l'aide du modèle d'intégration multimodal de Google et les stocker dans Astra DB, y compris des informations de métadonnées telles que start_offset_sec et end_offset_sec (consultez le Dépôt 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)


Ici, nous avons mis en place le Interface utilisateur simplifiée , un outil puissant permettant de créer des applications Web interactives basées sur les données avec un minimum d'effort, en utilisant la simplicité et la puissance de Python. De plus, nous activons la fonctionnalité de recherche de texte ou d'images spécifiques dans le code ci-dessous :


 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)


Voici à quoi ressemblent les résultats :

Conclusion

L'exploration de ces deux approches met en évidence le potentiel important des techniques modernes d'IA dans les applications de recherche vidéo. Alors que la recherche de trames avec intégration d'images offre une grande précision pour des recherches visuelles spécifiques, la flexibilité et la puissance des intégrations multimodales en font un choix supérieur pour les exigences de recherche multimodales complexes.


En utilisant Astra DB, une plate-forme de recherche vidéo peut fournir aux utilisateurs des capacités de recherche avancées, permettant une récupération précise et efficace de contenus vidéo spécifiques à partir de grands ensembles de données. Cela améliore considérablement la capacité d’analyse et d’interprétation des données vidéo, ce qui permet d’obtenir des informations plus rapides et plus précises.


Pour l’avenir, l’avenir de la recherche vidéo s’annonce prometteur grâce à la recherche et au développement en cours. Les progrès de l’IA et de l’apprentissage automatique continueront d’améliorer ces techniques, les rendant plus accessibles et efficaces. L'intégration avec d'autres technologies émergentes, telles que la réalité augmentée et l'analyse vidéo en temps réel, élargira encore leurs capacités.


Par Matthew Pendlebury , responsable de l'ingénierie, OpenOrigins, et Betul O'Reilly , architecte de solutions, DataStax