CapÃtulo 6: Aplicaciones multimodales de los transformadores
6.4 Ejercicios Prácticos
Esta sección de ejercicios prácticos proporciona tareas prácticas para profundizar tu comprensión de la IA multimodal. Cada ejercicio explora cómo integrar datos de texto, imágenes y video utilizando modelos de última generación. Se proporcionan soluciones con ejemplos de código detallados para guiarte a través de la implementación.
Ejercicio 1: Emparejamiento de Imagen-Texto con CLIP
Tarea: Usar CLIP para emparejar una consulta de texto con la imagen más relevante de un conjunto de candidatas.
Instrucciones:
- Cargar varias imágenes y una consulta de texto.
- Usar CLIP para calcular puntuaciones de similitud entre el texto y cada imagen.
- Identificar la imagen más relevante.
Solución:
from transformers import CLIPProcessor, CLIPModel
from PIL import Image
# Load CLIP model and processor
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# Load images
images = [Image.open(f"image_{i}.jpg") for i in range(1, 4)] # Replace with actual image paths
text_query = "A beautiful sunset over the ocean."
# Preprocess inputs
inputs = processor(text=[text_query], images=images, return_tensors="pt", padding=True)
# Compute similarity scores
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image # Image-to-text scores
probs = logits_per_image.softmax(dim=1)
# Identify the most relevant image
best_match_index = probs.argmax().item()
print(f"Most relevant image is image_{best_match_index + 1}.jpg")
Ejercicio 2: Clasificación de Videos con VideoMAE
Tarea: Clasificar acciones en un video usando VideoMAE.
Instrucciones:
- Extraer fotogramas de un video.
- Usar VideoMAE para clasificar el contenido del video.
- Mostrar la acción predicha.
Solución:
from transformers import VideoMAEFeatureExtractor, VideoMAEForVideoClassification
import cv2
# Extract frames from video
def extract_frames(video_path, frame_rate=10):
cap = cv2.VideoCapture(video_path)
frames = []
count = 0
success = True
while success:
success, frame = cap.read()
if count % frame_rate == 0 and success:
frames.append(cv2.resize(frame, (224, 224))) # Resize to model input size
count += 1
cap.release()
return frames
video_path = "example_video.mp4" # Replace with your video path
frames = extract_frames(video_path)
# Load VideoMAE model and processor
model = VideoMAEForVideoClassification.from_pretrained("facebook/videomae-base")
processor = VideoMAEFeatureExtractor.from_pretrained("facebook/videomae-base")
# Preprocess frames
inputs = processor(frames, return_tensors="pt")
# Classify video
outputs = model(**inputs)
predicted_class = outputs.logits.argmax(dim=-1).item()
print(f"Predicted class: {predicted_class}")
Ejercicio 3: Generar Subtítulos para Fotogramas de Video
Tarea: Generar subtítulos para cada fotograma de un video utilizando un modelo de visión-lenguaje.
Instrucciones:
- Extraer fotogramas de un video.
- Utilizar un modelo de visión-lenguaje como CLIP para generar subtítulos para cada fotograma.
- Mostrar los subtítulos generados.
Solución:
from transformers import VisionEncoderDecoderModel, AutoTokenizer, AutoImageProcessor
from PIL import Image
# Load vision-language model and processors
model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
processor = AutoImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
tokenizer = AutoTokenizer.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
# Example: Use frames extracted in Exercise 2
captions = []
for frame in frames[:5]: # Limit to first 5 frames for demo
pil_image = Image.fromarray(frame)
inputs = processor(images=pil_image, return_tensors="pt")
pixel_values = inputs.pixel_values
generated_ids = model.generate(pixel_values, max_length=16, num_beams=4)
caption = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
captions.append(caption)
print("Generated Captions:")
for i, caption in enumerate(captions):
print(f"Frame {i + 1}: {caption}")
Ejercicio 4: Recuperación Multimodal
Tarea: Implementar un sistema simple de recuperación de texto a video utilizando un modelo multimodal preentrenado.
Instrucciones:
- Definir una consulta de texto y extraer fotogramas de múltiples videos.
- Calcular puntuaciones de similitud entre la consulta y cada video.
- Clasificar los videos según su relevancia.
Solución:
# Assuming frames are extracted from multiple videos as lists of images
video_frames = [extract_frames(f"video_{i}.mp4") for i in range(1, 4)] # Replace with video paths
text_query = "A person running on the beach."
# Process each video
video_scores = []
for i, frames in enumerate(video_frames):
inputs = processor(text=[text_query], images=frames, return_tensors="pt", padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
avg_score = logits_per_image.softmax(dim=1).mean().item()
video_scores.append((f"video_{i + 1}.mp4", avg_score))
# Rank videos by relevance
ranked_videos = sorted(video_scores, key=lambda x: x[1], reverse=True)
print("Ranked Videos:")
for video, score in ranked_videos:
print(f"{video}: {score:.2f}")
Estos ejercicios demuestran las capacidades de la IA multimodal mediante la integración de datos de texto, imagen y video. Desde emparejar consultas de texto con imágenes hasta generar subtítulos para fotogramas de video y construir sistemas de recuperación, estas tareas proporcionan experiencia práctica en el desarrollo de aplicaciones multimodales potentes e intuitivas. Experimente más con estos modelos y conjuntos de datos para desbloquear todo su potencial en escenarios del mundo real.
6.4 Ejercicios Prácticos
Esta sección de ejercicios prácticos proporciona tareas prácticas para profundizar tu comprensión de la IA multimodal. Cada ejercicio explora cómo integrar datos de texto, imágenes y video utilizando modelos de última generación. Se proporcionan soluciones con ejemplos de código detallados para guiarte a través de la implementación.
Ejercicio 1: Emparejamiento de Imagen-Texto con CLIP
Tarea: Usar CLIP para emparejar una consulta de texto con la imagen más relevante de un conjunto de candidatas.
Instrucciones:
- Cargar varias imágenes y una consulta de texto.
- Usar CLIP para calcular puntuaciones de similitud entre el texto y cada imagen.
- Identificar la imagen más relevante.
Solución:
from transformers import CLIPProcessor, CLIPModel
from PIL import Image
# Load CLIP model and processor
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# Load images
images = [Image.open(f"image_{i}.jpg") for i in range(1, 4)] # Replace with actual image paths
text_query = "A beautiful sunset over the ocean."
# Preprocess inputs
inputs = processor(text=[text_query], images=images, return_tensors="pt", padding=True)
# Compute similarity scores
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image # Image-to-text scores
probs = logits_per_image.softmax(dim=1)
# Identify the most relevant image
best_match_index = probs.argmax().item()
print(f"Most relevant image is image_{best_match_index + 1}.jpg")
Ejercicio 2: Clasificación de Videos con VideoMAE
Tarea: Clasificar acciones en un video usando VideoMAE.
Instrucciones:
- Extraer fotogramas de un video.
- Usar VideoMAE para clasificar el contenido del video.
- Mostrar la acción predicha.
Solución:
from transformers import VideoMAEFeatureExtractor, VideoMAEForVideoClassification
import cv2
# Extract frames from video
def extract_frames(video_path, frame_rate=10):
cap = cv2.VideoCapture(video_path)
frames = []
count = 0
success = True
while success:
success, frame = cap.read()
if count % frame_rate == 0 and success:
frames.append(cv2.resize(frame, (224, 224))) # Resize to model input size
count += 1
cap.release()
return frames
video_path = "example_video.mp4" # Replace with your video path
frames = extract_frames(video_path)
# Load VideoMAE model and processor
model = VideoMAEForVideoClassification.from_pretrained("facebook/videomae-base")
processor = VideoMAEFeatureExtractor.from_pretrained("facebook/videomae-base")
# Preprocess frames
inputs = processor(frames, return_tensors="pt")
# Classify video
outputs = model(**inputs)
predicted_class = outputs.logits.argmax(dim=-1).item()
print(f"Predicted class: {predicted_class}")
Ejercicio 3: Generar Subtítulos para Fotogramas de Video
Tarea: Generar subtítulos para cada fotograma de un video utilizando un modelo de visión-lenguaje.
Instrucciones:
- Extraer fotogramas de un video.
- Utilizar un modelo de visión-lenguaje como CLIP para generar subtítulos para cada fotograma.
- Mostrar los subtítulos generados.
Solución:
from transformers import VisionEncoderDecoderModel, AutoTokenizer, AutoImageProcessor
from PIL import Image
# Load vision-language model and processors
model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
processor = AutoImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
tokenizer = AutoTokenizer.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
# Example: Use frames extracted in Exercise 2
captions = []
for frame in frames[:5]: # Limit to first 5 frames for demo
pil_image = Image.fromarray(frame)
inputs = processor(images=pil_image, return_tensors="pt")
pixel_values = inputs.pixel_values
generated_ids = model.generate(pixel_values, max_length=16, num_beams=4)
caption = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
captions.append(caption)
print("Generated Captions:")
for i, caption in enumerate(captions):
print(f"Frame {i + 1}: {caption}")
Ejercicio 4: Recuperación Multimodal
Tarea: Implementar un sistema simple de recuperación de texto a video utilizando un modelo multimodal preentrenado.
Instrucciones:
- Definir una consulta de texto y extraer fotogramas de múltiples videos.
- Calcular puntuaciones de similitud entre la consulta y cada video.
- Clasificar los videos según su relevancia.
Solución:
# Assuming frames are extracted from multiple videos as lists of images
video_frames = [extract_frames(f"video_{i}.mp4") for i in range(1, 4)] # Replace with video paths
text_query = "A person running on the beach."
# Process each video
video_scores = []
for i, frames in enumerate(video_frames):
inputs = processor(text=[text_query], images=frames, return_tensors="pt", padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
avg_score = logits_per_image.softmax(dim=1).mean().item()
video_scores.append((f"video_{i + 1}.mp4", avg_score))
# Rank videos by relevance
ranked_videos = sorted(video_scores, key=lambda x: x[1], reverse=True)
print("Ranked Videos:")
for video, score in ranked_videos:
print(f"{video}: {score:.2f}")
Estos ejercicios demuestran las capacidades de la IA multimodal mediante la integración de datos de texto, imagen y video. Desde emparejar consultas de texto con imágenes hasta generar subtítulos para fotogramas de video y construir sistemas de recuperación, estas tareas proporcionan experiencia práctica en el desarrollo de aplicaciones multimodales potentes e intuitivas. Experimente más con estos modelos y conjuntos de datos para desbloquear todo su potencial en escenarios del mundo real.
6.4 Ejercicios Prácticos
Esta sección de ejercicios prácticos proporciona tareas prácticas para profundizar tu comprensión de la IA multimodal. Cada ejercicio explora cómo integrar datos de texto, imágenes y video utilizando modelos de última generación. Se proporcionan soluciones con ejemplos de código detallados para guiarte a través de la implementación.
Ejercicio 1: Emparejamiento de Imagen-Texto con CLIP
Tarea: Usar CLIP para emparejar una consulta de texto con la imagen más relevante de un conjunto de candidatas.
Instrucciones:
- Cargar varias imágenes y una consulta de texto.
- Usar CLIP para calcular puntuaciones de similitud entre el texto y cada imagen.
- Identificar la imagen más relevante.
Solución:
from transformers import CLIPProcessor, CLIPModel
from PIL import Image
# Load CLIP model and processor
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# Load images
images = [Image.open(f"image_{i}.jpg") for i in range(1, 4)] # Replace with actual image paths
text_query = "A beautiful sunset over the ocean."
# Preprocess inputs
inputs = processor(text=[text_query], images=images, return_tensors="pt", padding=True)
# Compute similarity scores
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image # Image-to-text scores
probs = logits_per_image.softmax(dim=1)
# Identify the most relevant image
best_match_index = probs.argmax().item()
print(f"Most relevant image is image_{best_match_index + 1}.jpg")
Ejercicio 2: Clasificación de Videos con VideoMAE
Tarea: Clasificar acciones en un video usando VideoMAE.
Instrucciones:
- Extraer fotogramas de un video.
- Usar VideoMAE para clasificar el contenido del video.
- Mostrar la acción predicha.
Solución:
from transformers import VideoMAEFeatureExtractor, VideoMAEForVideoClassification
import cv2
# Extract frames from video
def extract_frames(video_path, frame_rate=10):
cap = cv2.VideoCapture(video_path)
frames = []
count = 0
success = True
while success:
success, frame = cap.read()
if count % frame_rate == 0 and success:
frames.append(cv2.resize(frame, (224, 224))) # Resize to model input size
count += 1
cap.release()
return frames
video_path = "example_video.mp4" # Replace with your video path
frames = extract_frames(video_path)
# Load VideoMAE model and processor
model = VideoMAEForVideoClassification.from_pretrained("facebook/videomae-base")
processor = VideoMAEFeatureExtractor.from_pretrained("facebook/videomae-base")
# Preprocess frames
inputs = processor(frames, return_tensors="pt")
# Classify video
outputs = model(**inputs)
predicted_class = outputs.logits.argmax(dim=-1).item()
print(f"Predicted class: {predicted_class}")
Ejercicio 3: Generar Subtítulos para Fotogramas de Video
Tarea: Generar subtítulos para cada fotograma de un video utilizando un modelo de visión-lenguaje.
Instrucciones:
- Extraer fotogramas de un video.
- Utilizar un modelo de visión-lenguaje como CLIP para generar subtítulos para cada fotograma.
- Mostrar los subtítulos generados.
Solución:
from transformers import VisionEncoderDecoderModel, AutoTokenizer, AutoImageProcessor
from PIL import Image
# Load vision-language model and processors
model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
processor = AutoImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
tokenizer = AutoTokenizer.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
# Example: Use frames extracted in Exercise 2
captions = []
for frame in frames[:5]: # Limit to first 5 frames for demo
pil_image = Image.fromarray(frame)
inputs = processor(images=pil_image, return_tensors="pt")
pixel_values = inputs.pixel_values
generated_ids = model.generate(pixel_values, max_length=16, num_beams=4)
caption = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
captions.append(caption)
print("Generated Captions:")
for i, caption in enumerate(captions):
print(f"Frame {i + 1}: {caption}")
Ejercicio 4: Recuperación Multimodal
Tarea: Implementar un sistema simple de recuperación de texto a video utilizando un modelo multimodal preentrenado.
Instrucciones:
- Definir una consulta de texto y extraer fotogramas de múltiples videos.
- Calcular puntuaciones de similitud entre la consulta y cada video.
- Clasificar los videos según su relevancia.
Solución:
# Assuming frames are extracted from multiple videos as lists of images
video_frames = [extract_frames(f"video_{i}.mp4") for i in range(1, 4)] # Replace with video paths
text_query = "A person running on the beach."
# Process each video
video_scores = []
for i, frames in enumerate(video_frames):
inputs = processor(text=[text_query], images=frames, return_tensors="pt", padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
avg_score = logits_per_image.softmax(dim=1).mean().item()
video_scores.append((f"video_{i + 1}.mp4", avg_score))
# Rank videos by relevance
ranked_videos = sorted(video_scores, key=lambda x: x[1], reverse=True)
print("Ranked Videos:")
for video, score in ranked_videos:
print(f"{video}: {score:.2f}")
Estos ejercicios demuestran las capacidades de la IA multimodal mediante la integración de datos de texto, imagen y video. Desde emparejar consultas de texto con imágenes hasta generar subtítulos para fotogramas de video y construir sistemas de recuperación, estas tareas proporcionan experiencia práctica en el desarrollo de aplicaciones multimodales potentes e intuitivas. Experimente más con estos modelos y conjuntos de datos para desbloquear todo su potencial en escenarios del mundo real.
6.4 Ejercicios Prácticos
Esta sección de ejercicios prácticos proporciona tareas prácticas para profundizar tu comprensión de la IA multimodal. Cada ejercicio explora cómo integrar datos de texto, imágenes y video utilizando modelos de última generación. Se proporcionan soluciones con ejemplos de código detallados para guiarte a través de la implementación.
Ejercicio 1: Emparejamiento de Imagen-Texto con CLIP
Tarea: Usar CLIP para emparejar una consulta de texto con la imagen más relevante de un conjunto de candidatas.
Instrucciones:
- Cargar varias imágenes y una consulta de texto.
- Usar CLIP para calcular puntuaciones de similitud entre el texto y cada imagen.
- Identificar la imagen más relevante.
Solución:
from transformers import CLIPProcessor, CLIPModel
from PIL import Image
# Load CLIP model and processor
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# Load images
images = [Image.open(f"image_{i}.jpg") for i in range(1, 4)] # Replace with actual image paths
text_query = "A beautiful sunset over the ocean."
# Preprocess inputs
inputs = processor(text=[text_query], images=images, return_tensors="pt", padding=True)
# Compute similarity scores
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image # Image-to-text scores
probs = logits_per_image.softmax(dim=1)
# Identify the most relevant image
best_match_index = probs.argmax().item()
print(f"Most relevant image is image_{best_match_index + 1}.jpg")
Ejercicio 2: Clasificación de Videos con VideoMAE
Tarea: Clasificar acciones en un video usando VideoMAE.
Instrucciones:
- Extraer fotogramas de un video.
- Usar VideoMAE para clasificar el contenido del video.
- Mostrar la acción predicha.
Solución:
from transformers import VideoMAEFeatureExtractor, VideoMAEForVideoClassification
import cv2
# Extract frames from video
def extract_frames(video_path, frame_rate=10):
cap = cv2.VideoCapture(video_path)
frames = []
count = 0
success = True
while success:
success, frame = cap.read()
if count % frame_rate == 0 and success:
frames.append(cv2.resize(frame, (224, 224))) # Resize to model input size
count += 1
cap.release()
return frames
video_path = "example_video.mp4" # Replace with your video path
frames = extract_frames(video_path)
# Load VideoMAE model and processor
model = VideoMAEForVideoClassification.from_pretrained("facebook/videomae-base")
processor = VideoMAEFeatureExtractor.from_pretrained("facebook/videomae-base")
# Preprocess frames
inputs = processor(frames, return_tensors="pt")
# Classify video
outputs = model(**inputs)
predicted_class = outputs.logits.argmax(dim=-1).item()
print(f"Predicted class: {predicted_class}")
Ejercicio 3: Generar Subtítulos para Fotogramas de Video
Tarea: Generar subtítulos para cada fotograma de un video utilizando un modelo de visión-lenguaje.
Instrucciones:
- Extraer fotogramas de un video.
- Utilizar un modelo de visión-lenguaje como CLIP para generar subtítulos para cada fotograma.
- Mostrar los subtítulos generados.
Solución:
from transformers import VisionEncoderDecoderModel, AutoTokenizer, AutoImageProcessor
from PIL import Image
# Load vision-language model and processors
model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
processor = AutoImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
tokenizer = AutoTokenizer.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
# Example: Use frames extracted in Exercise 2
captions = []
for frame in frames[:5]: # Limit to first 5 frames for demo
pil_image = Image.fromarray(frame)
inputs = processor(images=pil_image, return_tensors="pt")
pixel_values = inputs.pixel_values
generated_ids = model.generate(pixel_values, max_length=16, num_beams=4)
caption = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
captions.append(caption)
print("Generated Captions:")
for i, caption in enumerate(captions):
print(f"Frame {i + 1}: {caption}")
Ejercicio 4: Recuperación Multimodal
Tarea: Implementar un sistema simple de recuperación de texto a video utilizando un modelo multimodal preentrenado.
Instrucciones:
- Definir una consulta de texto y extraer fotogramas de múltiples videos.
- Calcular puntuaciones de similitud entre la consulta y cada video.
- Clasificar los videos según su relevancia.
Solución:
# Assuming frames are extracted from multiple videos as lists of images
video_frames = [extract_frames(f"video_{i}.mp4") for i in range(1, 4)] # Replace with video paths
text_query = "A person running on the beach."
# Process each video
video_scores = []
for i, frames in enumerate(video_frames):
inputs = processor(text=[text_query], images=frames, return_tensors="pt", padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
avg_score = logits_per_image.softmax(dim=1).mean().item()
video_scores.append((f"video_{i + 1}.mp4", avg_score))
# Rank videos by relevance
ranked_videos = sorted(video_scores, key=lambda x: x[1], reverse=True)
print("Ranked Videos:")
for video, score in ranked_videos:
print(f"{video}: {score:.2f}")
Estos ejercicios demuestran las capacidades de la IA multimodal mediante la integración de datos de texto, imagen y video. Desde emparejar consultas de texto con imágenes hasta generar subtítulos para fotogramas de video y construir sistemas de recuperación, estas tareas proporcionan experiencia práctica en el desarrollo de aplicaciones multimodales potentes e intuitivas. Experimente más con estos modelos y conjuntos de datos para desbloquear todo su potencial en escenarios del mundo real.