第 05 期 | 多模态能力解锁:图片理解与视觉问答

更新于 2026/4/7

欢迎来到 Google Gemma 教程系列的第五期!在前几期中,我们深入探讨了 Gemma 模型在文本生成、指令遵循和微调等方面的强大能力。本期,我们将突破纯文本的限制,迈入令人兴奋的多模态世界,解锁 Gemma 3(通过其底层技术,通常在 Vertex AI 上以 Gemini 1.5 Pro 的形式提供)的图片理解与视觉问答能力。

我们将重点演示如何让 Gemma 3 不仅“看懂”图片,还能基于图片内容进行复杂的推理、提取信息,甚至将视觉信息转化为结构化的代码。从简单的图片描述到复杂的图表分析和架构图转代码,本期课程将带你亲身体验多模态大模型的魔力。

🎯 学习目标

  1. 深入理解 Gemma 3(通过 Gemini 1.5 Pro)多模态能力的原理和独特优势。
  2. 掌握在 Google Vertex AI 平台上,利用 Python SDK 进行图像输入和多模态交互的基本方法。
  3. 通过实际案例学习如何实现高质量的图片描述、OCR 文字识别以及复杂的图表数据分析。
  4. 探索并实践将系统架构图转化为可执行代码(如 Docker Compose)的创新应用。

📖 核心概念讲解

5.1 Gemma 3 多模态能力的基石:从文本到多感官理解

传统的语言模型主要处理文本数据,而多模态大模型则能够同时理解和处理多种类型的数据,例如文本、图像、音频和视频。Google DeepMind 推出的 Gemma 家族,特别是其最新版本 Gemma 3(其先进的多模态能力通常通过 Vertex AI 上的 Gemini 1.5 Pro 模型来展现),在这一领域取得了显著突破。它继承了 Gemini 系列模型的核心技术,使其能够无缝地整合和推理来自不同模态的信息。

5.1.1 什么是多模态?

多模态是指模型能够同时处理和理解两种或更多不同类型数据(模态)的能力。对于 Gemma 3 而言,最核心的多模态能力是文本与图像的结合。这意味着你可以向模型输入一张图片和一段文本提示,让模型基于两者的结合进行理解和生成。

5.1.2 Gemma 3 (Gemini 1.5 Pro) 如何实现多模态?

Gemma 3 的多模态能力并非简单地将不同模态的数据拼接在一起,而是通过一个统一的架构实现深度融合:

  • 视觉编码器 (Visual Encoder):当模型接收到图像输入时,一个专门的视觉编码器会将其转换为模型能够理解的数值向量表示。这个编码器经过大量图像数据的训练,能够捕捉图像中的特征、物体、场景以及它们之间的关系。
  • 跨模态注意力 (Cross-modal Attention):在将图像编码为向量后,这些视觉向量会与文本提示的向量表示一起,通过复杂的注意力机制进行融合。这种机制允许模型在生成响应时,同时关注文本中的关键词和图像中的相关区域,从而实现深度的跨模态理解和推理。
  • 统一架构 (Unified Architecture):Gemma 3 (Gemini 1.5 Pro) 的核心是一个统一的 Transformer 架构,它能够处理不同模态的输入,并在同一个模型中生成文本输出。这种端到端的设计使得模型无需针对特定模态进行单独的预训练或微调,即可实现强大的多模态能力。

为什么通过 Gemini 1.5 Pro 演示 Gemma 3 的多模态能力? Gemma 是一个开源模型家族,其技术源自 Google DeepMind 的 Gemini 系列。在 Google Cloud 的 Vertex AI 平台上,Gemini 1.5 Pro 是目前提供最先进、最稳定且具有长上下文窗口(128K tokens)和强大多模态能力的模型。Gemma 3 在其设计和能力上深受 Gemini 影响,因此,通过 Vertex AI 上的 Gemini 1.5 Pro 来演示其多模态能力,是当前最能体现 Gemma 家族前沿技术水平的实践方式。在本地部署的 Gemma 版本中,多模态功能可能仍在开发或需要特定的配置才能完全启用。

5.1.3 多模态输入格式

在实际应用中,向 Gemma 3 (Gemini 1.5 Pro) 提供图像输入通常涉及将图像数据编码为模型可接受的格式。最常见的方式是通过 Python SDK 中的 Image 对象,它可以接受本地文件路径、字节流或 Base64 编码的字符串。模型会自动处理这些图像数据,将其送入视觉编码器。

5.2 多模态交互模式与应用场景

Gemma 3 的多模态能力开启了广泛的应用场景,涵盖了图像理解的多个方面:

5.2.1 图片到文本 (Image-to-Text)

这是最直接的应用模式,模型基于图像内容生成文本。

  • 图片描述 (Image Captioning):生成对图片内容的详细描述。
  • 视觉问答 (Visual Question Answering - VQA):回答关于图片内容的具体问题,例如“图片中有什么物体?”、“人物在做什么?”等。
  • OCR (Optical Character Recognition):识别图片中的文字,并将其提取为可编辑的文本。
  • 图表分析 (Chart Analysis):理解图表(如柱状图、折线图)中的数据和趋势,并进行总结或提取具体数值。

5.2.2 文本与图片到文本 (Text-and-Image-to-Text)

这种模式下,模型不仅看到图片,还能结合用户提供的文本指令或上下文进行更复杂的推理和生成。

  • 基于图像内容的复杂推理:例如,给定一张图片和问题“如果这个人在这个场景中摔倒了,最可能的原因是什么?”,模型需要结合视觉信息和常识进行推理。
  • 指令遵循与图像上下文:例如,给定一张架构图和指令“请根据此图生成一个 Docker Compose 文件”,模型需要理解图中的组件和关系,并生成相应的代码。

5.2.3 提示工程 (Prompt Engineering) for Vision

与纯文本模型类似,多模态模型的提示工程也至关重要。清晰、具体的提示能够显著提升模型理解图像并生成高质量响应的能力:

  • 明确指令:直接告诉模型你希望它做什么,例如“详细描述这张图片”、“识别图片中的所有文字”、“分析图表中的数据和趋势”。
  • 提供上下文:结合文字提示引导模型关注图像的特定区域或信息,例如“这张图片显示的是一个数据中心,请识别其中所有的服务器型号。”
  • 期望的输出格式:如果需要特定格式的输出(如 JSON、Markdown 代码块),在提示中明确说明。
  • 少样本学习 (Few-shot learning):通过提供少量图像-文本对作为示例,可以进一步引导模型在特定任务上的表现。

5.3 图像输入的前处理与最佳实践

为了确保 Gemma 3 能够高效、准确地处理图像,以下是一些前处理和最佳实践建议:

  • 图像尺寸与分辨率:虽然 Gemma 3 (Gemini 1.5 Pro) 能够处理较大尺寸的图像,但过大或过小的图像可能会影响处理效率或细节识别。通常,保持图像内容清晰可见,尺寸适中即可。模型内部会进行适当的缩放和处理。
  • 图像格式:支持常见的图像格式,如 JPEG、PNG、WEBP 等。推荐使用高质量的 JPEG 或 PNG 格式。
  • 内容清晰度:确保图像内容清晰,没有严重的模糊、遮挡或低质量压缩,这对于 OCR 和细节分析尤为重要。
  • 文本可读性:如果图像中包含文本(例如图表标签、文档截图),确保文本清晰可读,字体大小适中,对比度高。

💻 实战演示

本节我们将通过 Google Vertex AI 平台上的 Gemini 1.5 Pro 模型(代表 Gemma 3 的前沿多模态能力)进行实战演示。请确保你已完成以下准备工作:

前提条件:

  1. Google Cloud 项目:你需要一个已启用计费的 Google Cloud 项目。
  2. 启用 Vertex AI API:在 Google Cloud 控制台,导航到 "Vertex AI" 并确保 "Vertex AI API" 已启用。
  3. 认证:在本地环境中,你需要安装 Google Cloud CLI 并进行认证。
    gcloud auth application-default login
    
  4. 安装 Python SDK
    pip install google-cloud-aiplatform pillow
    
    pillow 库用于处理本地图像文件。

我们将使用 gemini-1.5-pro-preview-0409 模型,它提供了 128K 的上下文窗口和强大的多模态能力。

import vertexai
from vertexai.generative_models import GenerativeModel, Part, Image
import base64
from PIL import Image as PILImage
import io
import os

# --- 配置你的 Google Cloud 项目 ---
PROJECT_ID = "your-gcp-project-id" # ❗ 替换为你的 GCP 项目 ID
LOCATION = "us-central1"           # ❗ 替换为你的模型部署区域,通常是 "us-central1" 或 "asia-east1" 等

# 初始化 Vertex AI SDK
vertexai.init(project=PROJECT_ID, location=LOCATION)

# 选择 Gemini 1.5 Pro 模型,它提供了 Gemma 3 级别的多模态能力
model = GenerativeModel("gemini-1.5-pro-preview-0409")

# --- 辅助函数:加载本地图片 ---
def load_image_from_path(image_path):
    """从本地文件路径加载图片,并转换为 Vertex AI 的 Image 对象。"""
    if not os.path.exists(image_path):
        raise FileNotFoundError(f"图片文件未找到: {image_path}")
    with open(image_path, "rb") as f:
        image_bytes = f.read()
    return Image.from_bytes(image_bytes)

# --- 辅助函数:创建虚拟图片 (用于演示,如果你没有准备实际图片) ---
def create_virtual_image(text="Hello Gemma", image_type="text"):
    """