跳转至

第10章 · 多模态学习 · 阶段测试题答案


一 · 单选 (8 题)

1.1 B - CLIP 通过对比学习对齐图像-文本。

1.2 A - VLM = Vision Language Model。

1.3 C - ViT 把图像分成 patch。

1.4 B - BLIP-2 用 Q-Former 连接冻结的视觉编码器和 LLM。

1.5 A - VQ-VAE 把图像离散化为 token。

1.6 C - Stable Diffusion 是潜在扩散。

1.7 B - 多模态对齐指不同模态在统一空间。

1.8 A - 跨模态检索是 VLM 典型应用。


二 · 多选 (4 题)

2.1 ABCD - 都是多模态任务。

2.2 ABD - C 错: LLaVA 是 VLM, 不是 ASR。

2.3 ABC - 都是多模态对齐方法。

2.4 ABCD - 4 大模态类型。


三 · 简答 (5 题)

3.1 CLIP 训练

训练: 大规模 (图像, 文本) 对, 对比学习 - 同一对的图像-文本 → 拉近 - 不同对 → 拉远 - 损失: InfoNCE

应用: - 零样本分类 (文本 prompt) - 图像检索 - 作为 VLM 的视觉编码器

3.2 VLM 三种架构

架构 代表 特点
双塔 CLIP / ALIGN 独立编码 + 对比
融合 ViLBERT / LXMERT 跨模态 attention
LLM 中心 LLaVA / BLIP-2 视觉编码器 → 投影 → LLM

LLM 中心是当前主流 (GPT-4V, Claude 3.5 Sonnet 都类似)。

3.3 图像 Token 化

VQ-VAE / VQ-VAE-2: - 编码器: 图像 → 离散 token - Codebook: K 个离散向量 - 解码器: token → 图像

意义: 让图像成为"视觉词汇", 可用 GPT 类模型生成图像

应用: DALL-E 1, Parti, Muse

3.4 视觉问答 (VQA)

任务: 给图像 + 问题, 输出答案 模型: - 早期: CNN + LSTM + 注意力 - 当前: VLM (LLaVA / Qwen-VL / GPT-4V)

评估: VQA accuracy + 推理能力

3.5 跨模态生成

任务: - 文本 → 图像 (Stable Diffusion / DALL-E) - 文本 → 视频 (Sora / Veo / Kling) - 图像 → 文本 (BLIP / LLaVA) - 音频 → 视频

核心技术: Diffusion / VQ-Token / Cross-Attention


四 · 编程 (2 题)

4.1 CLIP 零样本

from transformers import CLIPProcessor, CLIPModel
from PIL import Image

model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

image = Image.open("cat.jpg")
texts = ["a photo of a cat", "a photo of a dog", "a photo of a car"]

inputs = processor(text=texts, images=image, return_tensors="pt", padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)
print(probs)  # cat 概率最高

4.2 LLaVA 推理

from transformers import LlavaNextProcessor, LlavaNextForConditionalGeneration

processor = LlavaNextProcessor.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf")
model = LlavaNextForConditionalGeneration.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf")

conversation = [{"role": "user", "content": [{"type": "image"}, {"type": "text", "text": "描述这张图"}]}]
prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
inputs = processor(images=image, text=prompt, return_tensors="pt").to("cuda")
output = model.generate(**inputs, max_new_tokens=100)
print(processor.decode(output[0], skip_special_tokens=True))