Skip to content

图像描述生成

图像描述生成(Image Captioning)是给定一张图片,自动生成一段描述其内容的自然语言文本的任务。它是视觉和语言的交叉任务,既要求模型”看懂”图像中的物体、动作、场景,又要求”写得出”流畅准确的描述文字。本页聚焦描述生成的技术演进,与视觉问答的关系见视觉问答与图像描述。前置阅读:CNN 主线、RNN 循环神经网络、Transformer 架构、注意力机制。

图像描述就像”看图说话”:

  • 编码器 = 眼睛和视觉皮层:看照片,提取出”有只猫、在沙发上、阳光照进来”这样的视觉概念。
  • 解码器 = 作文老师:把视觉概念组织成通顺的句子——“一只橘色的猫正趴在米色的沙发上,阳光从窗外洒进来”。
  • 训练 = 大量看图配文练习:给模型看几百万张已经配好描述的图片,让它学会从”看到的像素”到”该用的词”的映射。

从编码器-解码器(Encoder-Decoder,先将输入编码为特征表示、再从特征解码出输出的经典框架)的角度看,所有图像描述模型都在回答同一个问题:如何最有效地把视觉信息”翻译”成语言?

第一代:CNN 编码器 + RNN 解码器(Show and Tell)

Section titled “第一代:CNN 编码器 + RNN 解码器(Show and Tell)”

Show and Tell(Vinyals et al., 2015)是深度学习图像描述的开山之作。架构极其直观:

  1. CNN 提取图像特征:用预训练的 CNN(如 Inception-V3、ResNet-101)处理输入图像。CNN 的卷积层逐层提取特征——浅层捕捉边缘和纹理,深层捕捉物体部件和整体语义。最终在全局平均池化(Global Average Pooling,对整个特征图取平均,把 H×W×C 的特征压缩成 C 维向量)后,得到一个固定维度的全局特征向量(如 Inception-V3 输出 2048 维,ResNet-101 输出 2048 维)。
  2. 特征注入解码器:将特征向量经过一个线性变换(W_init · v + b_init)映射到与 RNN 隐状态相同的维度(如 512 维),然后作为 LSTM 的初始隐状态和初始细胞状态(cell state)。这相当于把”图像信息”作为解码器的”启动信号”。
  3. RNN 自回归生成:LSTM(Long Short-Term Memory,一种能记忆长距离依赖的 RNN 变体,通过遗忘门、输入门、输出门三个门控单元控制信息流动)自回归(Autoregressive,即”根据已生成内容预测下一个词”)地逐词生成描述。每一步,LSTM 根据当前隐状态和上一个词的嵌入向量,输出下一个词在词表上的概率分布。
  4. 教师强制训练:训练时用教师强制(Teacher Forcing,即每步喂入真实词而非模型预测的词作为下一步输入),使训练信号稳定、收敛快。推理时则用模型自己上一步预测的词作为输入。

LSTM 的门控机制细节:在每个时间步 t,LSTM 接收当前输入 x_t 和上一时刻的隐状态 h_{t-1}、细胞状态 c_{t-1},通过三个门更新状态:

遗忘门: ft=σ(Wf⋅[ht−1,xt]+bf)输入门: it=σ(Wi⋅[ht−1,xt]+bi)候选值: gt=tanh⁡(Wg⋅[ht−1,xt]+bg)细胞更新: ct=ft⊙ct−1+it⊙gt输出门: ot=σ(Wo⋅[ht−1,xt]+bo)隐状态: ht=ot⊙tanh⁡(ct)\text{遗忘门: } f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) \\ \text{输入门: } i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) \\ \text{候选值: } g_t = \tanh(W_g \cdot [h_{t-1}, x_t] + b_g) \\ \text{细胞更新: } c_t = f_t \odot c_{t-1} + i_t \odot g_t \\ \text{输出门: } o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) \\ \text{隐状态: } h_t = o_t \odot \tanh(c_t)

其中 ⊙\odot 表示逐元素乘法,[ht−1,xt][h_{t-1}, x_t] 表示向量拼接。这套门控机制让 LSTM 能选择性地保留或遗忘信息,从而在长序列中保持有效记忆。

这是标准的编码器-解码器范式,相当于把图像特征视为一种”翻译源”,把描述视为”翻译目标”。训练目标是最大化真实描述的对数似然,等价于最小化交叉熵损失:

L=−1T∑t=1Tlog⁡P(yt∣y<t,v)L = -\frac{1}{T} \sum_{t=1}^{T} \log P(y_t \mid y_{<t}, v)

其中 yty_t 是第 tt 个真实词,y<ty_{<t} 是前缀,vv 是图像特征向量,TT 是描述长度。

注意力机制的引入(Show, Attend and Tell)

Section titled “注意力机制的引入(Show, Attend and Tell)”

全局特征向量丢失了空间细节——一个 2048 维的向量把”猫在沙发上”和”沙发上有只猫”压成了同一种表示,无法区分空间关系。Show, Attend and Tell(Xu et al., 2015)引入注意力机制(Attention Mechanism,让模型动态决定”看哪里、各看多少”的加权聚合机制):解码器在生成每个词时,动态地”关注”图像中与该词最相关的区域。例如生成”猫”时注意力集中在猫的位置,生成”沙发”时移到沙发上。

注意力权重的计算:设 CNN 最后一个卷积层输出 L 个空间位置的特征,每个位置是 D 维向量,组成特征矩阵 A = {a_1, a_2, …, a_L},其中 a_i ∈ R^D(如 7×7=49 个位置,每个 2048 维)。在生成第 t 个词时:

eti=waT⋅tanh⁡(Wh⋅ht−1+Wv⋅ai+b)e_{ti} = w_a^T \cdot \tanh(W_h \cdot h_{t-1} + W_v \cdot a_i + b) eti=(Wq⋅ht−1)T⋅(Wk⋅ai)de_{ti} = \frac{(W_q \cdot h_{t-1})^T \cdot (W_k \cdot a_i)}{\sqrt{d}} αti=exp⁡(eti)∑j=1Lexp⁡(etj),zt=∑i=1Lαti⋅ai\alpha_{ti} = \frac{\exp(e_{ti})}{\sum_{j=1}^{L} \exp(e_{tj})}, \quad z_t = \sum_{i=1}^{L} \alpha_{ti} \cdot a_i ht=LSTM([xt,zt],ht−1)h_t = \text{LSTM}([x_t, z_t], h_{t-1})

其中 ht−1h_{t-1} 是上一步隐状态,aia_i 是第 ii 个图像区域特征,WhW_h、WvW_v、waw_a 是可学习参数;αti≥0\alpha_{ti} \geq 0 且 ∑iαti=1\sum_{i} \alpha_{ti} = 1。上下文向量 ztz_t 编码了”当前该看哪里”。

这是空间注意力在图像描述中的首次成功应用。论文还展示了”硬注意力”(hard attention,按概率随机选取一个位置)和”软注意力”(soft attention,如上式对所有位置加权平均)两种变体,实践中软注意力更易训练。详见注意力机制。

自底向上注意力(Bottom-Up Attention)

Section titled “自底向上注意力(Bottom-Up Attention)”

BUTD(Anderson et al., 2018)改变了视觉特征的粒度:先用 Faster R-CNN 检测图像中的物体(如人、猫、车),取每个检测框的区域特征作为视觉 token。具体来说,Faster R-CNN 的 Region Proposal Network 生成候选框,对每个框用 RoI Pooling 提取固定大小的特征(通常 2048 维),保留置信度最高的 10-36 个区域。这样注意力是在”物体级别”而非”网格像素级别”上进行的,更符合人类描述图像的方式(我们说”猫在沙发上”而不是”左上角的像素”)。

BUTD 的”自底向上”(Bottom-Up)指用目标检测模型自底向上地提取物体级特征,“自顶向下”(Top-Down)指用任务驱动的注意力机制自顶向下地选择相关特征。BUTD 特征在多年内是图像描述和 VQA 的标准视觉表示,直到 ViT 和 CLIP 的出现。

Transformer 替代 RNN 后,图像描述模型变为”ViT/CLIP 视觉编码器 + Transformer 文本解码器”。编码器输出图像 patch token 序列(如 ViT 把 224×224 的图像切成 14×14=196 个 patch,每个 patch 编码为 D 维向量),解码器通过跨注意力(Cross-Attention,让一种模态的 token——这里是文本——去查询另一种模态的 token——这里是图像——的注意力机制)在生成每个词时查询图像 token。

Transformer 相比 RNN 的优势在于:能完全并行训练(所有位置同时计算,而非逐时间步迭代)、能直接建模任意长距离依赖(不依赖逐步传递的隐状态)、且堆叠深层后梯度传播更稳定(得益于残差连接)。残差连接(Residual Connection)的核心思想是:让输入直接跳过某些层,与该层输出相加(output = Sublayer(x) + x),使梯度可以”绕过”深层结构直接回传,有效缓解深层网络梯度消失问题。

代表模型:

  • Meshed-Memory Transformer(M2, Cornia et al., 2020):在编码器中引入”记忆”机制(一组可学习的先验 token),在解码器的跨注意力中让不同层关注不同粒度的视觉信息。
  • Oscar(Li et al., 2020):利用图像标签作为”锚点”(anchor)桥接视觉和语言模态,在大规模图文对上预训练。
  • BLIP 系列:见下节。

BLIP 系列:统一的视觉语言预训练

Section titled “BLIP 系列:统一的视觉语言预训练”

BLIP(Li et al., 2022)提出了统一的视觉语言预训练框架,同时学习三个任务:

  1. 图文对比学习(ITC, Image-Text Contrastive):对齐图像和文本的全局表示。通过 InfoNCE 损失拉近匹配的图文对、推远不匹配的图文对,使编码器学到跨模态对齐能力。
  2. 图文匹配(ITM, Image-Text Matching):二分类判断图文是否匹配,用跨注意力进行细粒度的图文交互。训练时使用难负样本挖掘(hard negative mining,刻意挑选”相似但不匹配”的图文对作为负样本),提升判别能力。
  3. 图像描述生成(LM, Language Modeling):自回归生成描述文本。

BLIP 引入 Captioner 和 Filter 机制:用模型生成描述并过滤噪声,自动扩充训练数据(Bootstrapping)。具体做法是用 Captioner(仅用高质量图文对训练的描述模型)为网络爬取的无标注图片生成伪描述,再用 Filter(图文匹配模型)过滤掉与图片不匹配的低质量伪描述,最终得到干净的大规模训练集。这一数据自举策略有效解决了高质量图文对数据稀缺的问题。

BLIP-2 与 Q-Former:BLIP-2(Li et al., 2023)进一步引入 Q-Former(Querying Transformer)桥接冻结的 ViT 和冻结的 LLM。Q-Former 的结构细节如下:

  • Q-Former 是一个轻量级 Transformer,包含一组可学习的 query token(通常 32 个)。
  • 它通过自注意力让 query token 之间互相交互,同时通过跨注意力从冻结的 ViT 中提取与语言最相关的视觉信息。
  • 训练分两阶段:第一阶段在冻结的 ViT 上学习”视觉-语言表示”(图文对比、图文匹配、图文生成三个任务);第二阶段把 Q-Former 输出的 32 个视觉 token 经线性层投影到冻结的 LLM 的词嵌入空间,驱动 LLM 生成文本。
  • 这种”两阶段冻结 + 轻量桥接”策略大幅降低了训练成本——只需训练 Q-Former 和投影层,两个最大的组件(ViT 和 LLM)参数全部冻结。

详见视觉问答与图像描述。

图像描述的评估借鉴机器翻译的指标:

  • BLEU-N:计算生成描述与参考描述的 N-gram 精确率(N=1 到 4)。BLEU-4 是最常用的版本。计算公式为:
BLEU-N=BP×exp⁡(∑n=1Nwn×log⁡pn)\text{BLEU-N} = \text{BP} \times \exp\left(\sum_{n=1}^{N} w_n \times \log p_n\right)

其中 pnp_n 是修正后的 n-gram 精确率,BP 是长度惩罚因子(防止过短的描述获得高分):

BP={1若 c>rexp⁡(1−r/c)若 c≤r\text{BP} = \begin{cases} 1 & \text{若 } c > r \\ \exp(1 - r/c) & \text{若 } c \leq r \end{cases}

其中 cc 为生成长度,rr 为参考长度。

  • CIDEr-D:专门为图像描述设计的指标,用 TF-IDF 加权 N-gram,奖励与参考描述一致的视觉内容描述,惩罚在所有图片中频繁出现的”万能词”(如 “a photo of”)。计算过程:

    1. 对候选描述 cc 和参考描述 SjS_j,计算 n-gram(n=1,2,3,4n=1,2,3,4)的 TF-IDF 权重: gk(s)=TF×IDFg_k(s) = \text{TF} \times \text{IDF},其中 TF 是 n-gram 频率,IDF=log⁡(N/dfk)\text{IDF} = \log(N / d f_k),NN 是图片总数,dfkd f_k 是包含该 n-gram 的图片数
    2. 计算候选与参考之间的余弦相似度,对每个 nn 单独计算再加权求和:
    CIDEr(c,S)=1M∑j∑n=14wn⋅cos⁡(gn(c),gn(Sj))\text{CIDEr}(c, S) = \frac{1}{M} \sum_j \sum_{n=1}^{4} w_n \cdot \cos(g^n(c), g^n(S_j))
    1. CIDEr-D 加入长度惩罚和基于概率分布的截断,使其更鲁棒。
  • METEOR:考虑同义词和词序的匹配指标,引入 WordNet 同义词集和词干提取,对匹配的连续词组给予额外奖励。

  • ROUGE-L:基于最长公共子序列(LCS)的指标,衡量候选描述覆盖了参考描述中的多少关键内容。

  • SPICE:基于场景图(Scene Graph,由物体、属性、关系三元组构成的图结构)的语义匹配指标。它先从描述中解析出场景图,再计算候选场景图和参考场景图的 F1 分数。SPICE 更关注语义而非表面词匹配,与人类判断相关性最高。

现代评估还使用 CLIPScore(用 CLIP 计算图文相似度,不需要参考描述)和基于 LLM 的评估(让 GPT-4 等大模型从准确性、完整性、流畅度等维度评分描述的质量)。

注意力在图像描述中的工作方式

Section titled “注意力在图像描述中的工作方式”

图像描述模型通常采用学习率预热策略:训练开始时用一个很小的学习率(如 1e-7),在前 N 步(如 10000 步)线性增长到峰值学习率(如 2e-4),之后按余弦曲线(cosine decay)或步阶衰减逐步降低。预热的目的是:在训练初期模型参数随机初始化、梯度方向噪声很大,大学习率会导致训练发散;用小学习率先让参数”稳定下来”,再加速收敛。Transformer 类模型对预热尤其敏感,缺少预热容易导致训练早期 loss 突然飙升。

视觉端的数据增强能有效提升泛化能力,常用方法包括:

  • RandomResizedCrop:随机裁剪图像的一个区域并缩放到目标尺寸,让模型学习不同尺度和位置的物体。
  • ColorJitter:随机调整亮度、对比度、饱和度、色调,增强对颜色变化的鲁棒性。
  • RandomHorizontalFlip:随机水平翻转(注意垂直翻转会改变语义,如”向上飞”变成”向下坠”)。
  • RandAugment / AutoAugment:从一组增强操作中自动组合,搜索最优增强策略。

文本端可使用回译(back-translation,将描述翻译成另一种语言再翻回来)或同义词替换来扩充训练数据,但需注意保持语义一致性。

标签平滑(Label Smoothing)是一种正则化手段:训练时不把正确词的概率目标设为 1.0,而是设为 1-ε(如 0.9),其余词共享 ε/(V-1) 的概率(V 是词表大小)。这能防止模型对训练数据中的某一个词过度自信——图像描述本质上有多个正确答案(“一只猫坐在沙发上”和”沙发上有只猫”都正确),标签平滑让模型学到更平滑的概率分布,通常提升 0.5-1 个 CIDEr 点。损失函数变为:

Lsmooth=−(1−ε)⋅log⁡P(yt)−εV−1∑j≠tlog⁡P(yj)L_{\text{smooth}} = -(1-\varepsilon) \cdot \log P(y_t) - \frac{\varepsilon}{V-1} \sum_{j \neq t} \log P(y_j)

其中 ε\varepsilon 通常取 0.1,VV 是词表大小。

生成描述时的解码策略直接影响输出质量:

策略原理优点缺点
Beam Search每步保留得分最高的 k 个候选序列(束宽 beam width 通常 3-5),最终选总对数概率最高的描述准确、安全、与参考描述风格一致,CIDEr/BLEU 分数高容易生成”平淡”描述,缺乏多样性和创造性;束宽太大时计算量增加
Nucleus Sampling(Top-p)从概率累积前 p(如 0.9)的候选词中随机采样描述多样、有创意,能生成更生动丰富的描述个别描述可能偏离图像内容;CIDEr/BLEU 分数通常低于 beam search
Top-k Sampling从概率最高的 k 个候选词中随机采样控制采样范围,介于 beam search 和自由采样之间k 是固定值,无法自适应不同分布形状

实践中:正式评测(刷分)用 beam search(束宽 3-5);实际应用(如无障碍描述、内容管理)可根据需要选择——要求准确选 beam search,要求生动多样选 nucleus sampling。

交叉熵损失只优化”逐词预测准确率”,而 CIDEr/BLEU 等评估指标是非线性的(逐词对了不代表整句描述好)。SCST(Self-Critical Sequence Training, Rennie et al., 2017)用 REINFORCE 算法直接优化 CIDEr 分数:

算法流程:

  1. 用当前模型(自回归采样)生成一条描述 csc^s
  2. 用 beam search 生成基准描述 cgc^g(作为 baseline,不更新梯度)
  3. 计算 reward 差异作为梯度信号:
reward=CIDEr(cs)−CIDEr(cg)\text{reward} = \text{CIDEr}(c^s) - \text{CIDEr}(c^g)
  1. 梯度更新(REINFORCE):
∇L=−(reward)⋅∇log⁡P(cs∣I)\nabla L = -(\text{reward}) \cdot \nabla \log P(c^s \mid I)

如果采样描述比 beam search 基准好(reward > 0),增加采样描述的概率;如果更差(reward < 0),降低其概率。

SCST 通常能提升 2-5 个 CIDEr 点,是描述生成训练的重要里程碑。但 SCST 训练不稳定,需要较小的学习率和谨慎的超参调节。

在大模型时代,直接偏好优化(Direct Preference Optimization, DPO)和基于人类反馈的强化学习(RLHF)也被用于图像描述质量优化。思路是:收集人类对描述对的偏好标注(描述 A 比描述 B 好),然后用 DPO 损失直接微调模型,使其生成更符合人类偏好的描述。与 SCST 相比,RLHF/DPO 使用人类偏好信号(而非自动指标)作为优化目标,能捕捉更主观的质量维度(如描述的生动性、信息量)。

import torch # pip install transformers
from transformers import BlipProcessor, BlipForConditionalGeneration
from PIL import Image
# 加载 BLIP 模型(同时支持描述生成和 VQA)
processor = BlipProcessor.from_pretrained(
"Salesforce/blip-image-captioning-base"
)
model = BlipForConditionalGeneration.from_pretrained(
"Salesforce/blip-image-captioning-base"
)
image = Image.open("beach.jpg").convert("RGB")
# 无条件描述生成(不需要提示文本)
inputs = processor(image, return_tensors="pt")
with torch.no_grad():
out = model.generate(**inputs, max_new_tokens=50)
caption = processor.decode(out[0], skip_special_tokens=True)
print(caption)
# 如 "a woman and child on a beach with an umbrella"
# 用文本提示引导描述风格
image = Image.open("sunset.jpg").convert("RGB")
for prefix in ["a photo of", "a drawing of", "the image shows"]:
inputs = processor(image, text=prefix, return_tensors="pt")
with torch.no_grad():
out = model.generate(**inputs, max_new_tokens=30)
caption = processor.decode(out[0], skip_special_tokens=True)
print(f"[{prefix}] {caption}")
# [a photo of] a photo of a sunset over the ocean
# [a drawing of] a drawing of a colorful sky at dusk
# [the image shows] the image shows a beach at sunset

Python:Beam Search vs Nucleus Sampling 对比

Section titled “Python:Beam Search vs Nucleus Sampling 对比”
# 同一张图,对比不同解码策略的输出差异
image = Image.open("park.jpg").convert("RGB")
inputs = processor(image, return_tensors="pt")
with torch.no_grad():
# Beam Search:准确但可能平淡
beam_out = model.generate(
**inputs, max_new_tokens=50, num_beams=5, early_stopping=True
)
beam_cap = processor.decode(beam_out[0], skip_special_tokens=True)
# Nucleus Sampling:多样且更有创意
sample_out = model.generate(
**inputs, max_new_tokens=50, do_sample=True, top_p=0.9,
temperature=0.7
)
sample_cap = processor.decode(sample_out[0], skip_special_tokens=True)
print(f"[Beam] {beam_cap}")
print(f"[Sample] {sample_cap}")
  • 视觉编码器选型:CLIP 视觉编码器是最通用的选择,因为它天然与语言对齐。EVA-CLIP、SigLIP 等新版本效果更好。详见视觉Transformer ViT。
  • Beam Search vs Nucleus Sampling:生成描述时,beam search(束宽 3-5)通常给出更准确、更安全的描述;nucleus sampling(top-p 0.9)给出更多样、更有创意的描述。正式评测通常用 beam search。
  • CIDEr 优化训练:SCST 用 CIDEr 分数作为奖励做 REINFORCE 微调,能直接优化评估指标,通常提升 2-5 个 CIDEr 点。注意训练不稳定,需要小学习率。
  • 多模态预训练先于任务微调:先在大规模图文数据上预训练,再在特定领域微调。BLIP 系列已提供强基线,直接微调即可获得不错效果。
  • 多样性与准确性权衡:单一参考描述会限制模型表达多样性。使用多个参考描述(COCO 每张图 5 个)或 GPT-4 改写扩充参考集,能让模型学到更丰富的表达。
  • 数据质量是关键:BLIP 的 Bootstrapping 策略证明,自动生成并过滤的描述也能有效扩充训练数据。但低质量描述(如重复、不准确)会严重拖累模型,务必做好数据清洗。
  • 批量归一化(Batch Normalization)的影响:CNN 视觉编码器中的批量归一化层(对每个 mini-batch 的特征做标准化,减均值除标准差,缓解内部协变量偏移)在推理时依赖训练时的统计量。微调视觉编码器时需要小心处理 BN 层的运行统计量更新。
  • 无障碍辅助:Apple 的 VoiceOver、Be My Eyes 等自动描述图片内容,帮助视障用户”看到”图片。
  • 社交媒体与内容管理:Facebook、Instagram 自动为图片生成 alt 文本,用于无障碍和 SEO。
  • 电商商品描述:自动为商品图片生成描述文本,降低人工标注成本。
  • 新闻图说生成:为新闻配图自动生成简要图说(caption),辅助编辑工作流。
  • 视频内容理解:对视频关键帧生成描述,用于视频检索、摘要、推荐。详见光流与视频理解。
  • 医学影像报告:为 X 光、CT 等医学影像自动生成初步报告文本(需专业数据训练)。
  • 智能相册管理:Google Photos 等自动为照片生成描述并建立搜索索引(搜索”海边”即可找到相关照片)。

大模型时代:多模态大模型(MLLM)重塑图像描述

Section titled “大模型时代:多模态大模型(MLLM)重塑图像描述”

2023 年以来,多模态大模型(Multimodal Large Language Model, MLLM)将图像描述能力推向了前所未有的高度。这类模型用预训练的视觉编码器提取图像特征,经投影层或 Q-Former 注入大语言模型(LLM),使 LLM 能够”看到”图像并用自然语言描述。

  • LLaVA 系列(Liu et al., 2023-2024):用简单的 MLP 投影将 CLIP ViT 特征映射到 LLM(如 LLaMA、Vicuna)的词嵌入空间,配合 GPT-4 生成的图文指令数据微调。LLaVA 的成功证明”简单投影 + 高质量指令数据”足以获得强大的多模态能力。LLaVA-1.5/1.6 在多个描述和 VQA 基准上接近或超过闭源模型。详见视觉问答与图像描述。
  • Qwen-VL / Qwen2-VL(阿里巴巴,2023-2024):支持任意分辨率图像输入的视觉语言模型,在图像描述、文档理解、OCR 等任务上表现优异。Qwen2-VL 引入动态分辨率机制,能处理高分辨率图像中的细粒度细节。
  • InternVL 系列(上海 AI 实验室,2024):用超大规模视觉编码器(InternViT-6B)搭配大语言模型,在多项多模态基准上达到开源模型最优水平。
  • GPT-4o / GPT-4V(OpenAI):具有强大的图像理解和描述能力,能生成详细、准确、上下文感知的图像描述,甚至理解图像中的文字、表格、图表和幽默。
  • Gemini 系列(Google):原生多模态架构,支持图像、视频、文本的统一理解。Gemini 1.5 Pro 支持 100 万 token 的超长上下文,能对长视频逐帧描述。
  • Claude 3.5 Sonnet(Anthropic):强大的视觉理解能力,擅长分析图表、截图、文档等复杂图像。

Florence-2(Microsoft, 2024)提出用单一架构统一多种视觉任务:图像描述(caption)、目标检测(detection)、图像分割(segmentation)、OCR、指称表达(grounding)等。它使用序列到序列(seq2seq)框架,把所有视觉任务的输出统一表示为结构化文本(如检测框坐标用 <box> token 表示),用一个模型同时完成。这种”大一统”设计让 Florence-2 在参数量较小(0.2B-0.7B)的情况下,在多项视觉语言任务上媲美甚至超越更大的专用模型。

Molmo(Allen AI, 2024)专注于构建高质量的全开源多模态模型,强调数据质量和透明度。它使用了精心策划的 PixMo 数据集(包含详细描述、问答、指向标注),在图像描述和视觉问答任务上表现优异。Molmo 的贡献在于证明了”高质量数据 + 简洁架构”可以与更大规模的模型竞争。

大模型时代,RLHF(基于人类反馈的强化学习)和 DPO(直接偏好优化)被广泛用于优化图像描述的主观质量。通过收集人类对描述的偏好数据(“描述 A 比描述 B 更好,因为 A 更详细/更准确/更生动”),用 DPO 或 PPO 算法微调模型。这使模型生成的描述不仅在自动指标上表现好,更符合人类对”好描述”的主观感受。

  • 长描述(Dense Captioning):传统 COCO 描述只有一句话,而现代模型能生成多句详细描述,涵盖图像中的主要物体、场景、动作、空间关系、氛围等。LLaVA-Next、GPT-4o 等能生成数百字的详尽图像描述。
  • 细粒度描述:结合 OCR(光学字符识别)能力,模型能描述图像中的文字内容(如路标、商品标签、文档标题)。对于图表和表格,模型能解析数据并生成结构化描述。详见OCR 文字识别。
  • 区域描述(Region Captioning / Dense Captioning):对图像中每个区域或物体生成独立描述,如”左侧穿红衣的人在跑步""右下角有一只黄色的狗”。这是 SOLO、GLIP、Florence-2 等模型擅长的任务。

传统指标(BLEU、CIDEr)依赖人工标注的参考描述,而参考描述本身具有多样性局限。2024-2026 年的评估趋势:

  • CLIPScore:不需要参考描述,直接用 CLIP 计算生成描述与图像的语义相似度,适合零参考场景。
  • 基于 LLM 的评估(LLM-as-a-Judge):用 GPT-4 或 Claude 作为评判,从准确性、完整性、简洁性、流畅度等维度给描述打分。这种评估方式与人类判断的一致性远高于传统 n-gram 指标。
  • Pollinations / VQA-based 评估:用生成描述做 VQA,检验描述中是否包含了图像的关键信息。
  • 知识蒸馏(Knowledge Distillation)辅助评估:用大模型的评分作为”教师信号”蒸馏到小模型,形成高效自动评估器。知识蒸馏指让小模型(学生)学习大模型(教师)的输出分布,从而在参数更少的情况下接近大模型的能力。
类库语言说明
transformersPythonHuggingFace 库,支持 BLIP、BLIP-2、Git、OFA 等主流描述生成模型
LLaVAPython开源多模态模型,支持基于图像的自由文本生成(含描述)
pycocoevalcapPythonCOCO 官方评估工具,提供 BLEU/CIDEr/METEOR/SPICE 等指标
Google Cloud Vision APIREST云服务,提供预训练的图像标注和描述生成
Azure Computer VisionREST微软云服务,提供图像描述(Image Captioning)功能
Florence-2Python微软统一视觉基础模型,一个模型支持描述、检测、分割、OCR 等任务
Qwen-VL / InternVLPython开源多模态大模型,支持高质量图像描述和对话
术语英文解释
图像描述生成Image Captioning给定图片自动生成描述性文本的任务
编码器-解码器Encoder-Decoder先将图像编码为特征、再解码为文本的经典框架
教师强制Teacher Forcing训练时每步喂入真实词(而非模型预测词)的策略
自回归Autoregressive根据已生成内容逐步预测下一个词的生成方式
束搜索Beam Search每步保留 top-k 候选序列的解码策略,平衡质量和效率
核采样Nucleus Sampling / Top-p Sampling从概率累积前 p 的候选词中随机采样的解码策略
自底向上注意力Bottom-Up Attention用检测结果(区域特征)作为视觉 token 的注意力方法
跨注意力Cross-Attention让一种模态的 token(如文本)查询另一种模态 token(如图像)的注意力机制
残差连接Residual Connection让输入跳过某些层直接与输出相加,缓解深层网络梯度消失
位置编码Positional Encoding给序列中每个位置添加固定或可学习的位置信号向量,让模型感知顺序
批量归一化Batch Normalization对每个 mini-batch 的特征做标准化,缓解内部协变量偏移
知识蒸馏Knowledge Distillation让小模型学习大模型的输出分布,以更少参数接近大模型能力
图文对比学习Image-Text Contrastive, ITC对齐图像和文本全局表示的预训练任务
图文匹配Image-Text Matching, ITM判断图文是否匹配的二分类预训练任务
CIDErConsensus-based Image Description Evaluation专为图像描述设计的评估指标,用 TF-IDF 加权 N-gram
SPICESemantic Propositional Image Caption Evaluation基于场景图的语义匹配指标,与人类判断相关性最高
自评判序列训练Self-Critical Sequence Training, SCST用评估指标(如 CIDEr)作为奖励做强化学习微调
直接偏好优化Direct Preference Optimization, DPO用人类偏好数据直接微调模型的算法,简化 RLHF 流程
多模态大模型Multimodal Large Language Model, MLLM能同时理解和生成多种模态(图像、文本等)的大型语言模型
场景图Scene Graph由物体、属性、关系三元组构成的图结构表示
密集描述Dense Captioning对图像中每个区域或物体分别生成描述的任务
  • Vinyals et al.,「Show and Tell: A Neural Image Caption Generator」(CVPR 2015):Show and Tell 论文,CNN+LSTM 的图像描述开山之作,证明深度学习能端到端学习图像描述。
  • Xu et al.,「Show, Attend and Tell: Neural Image Caption Generation with Visual Attention」(ICML 2015):注意力机制引入图像描述的经典论文,可视化注意力学习到了直观的物体定位。
  • Anderson et al.,「Bottom-Up and Top-Down Attention for Image Captioning and VQA」(CVPR 2018):BUTD 论文,物体级视觉特征成为标准,影响深远。
  • Cornia et al.,「Meshed-Memory Transformer for Image Captioning」(CVPR 2020):M2 Transformer,将记忆机制引入图像描述的 Transformer 编码器。
  • Li et al.,「BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation」(ICML 2022):BLIP 论文,统一的三任务预训练框架 + 数据自举机制。
  • Li et al.,「BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models」(ICML 2023):BLIP-2 论文,Q-Former 桥接冻结视觉编码器和冻结 LLM 的高效设计。
  • Rennie et al.,「Self-Critical Sequence Training for Image Captioning」(CVPR 2017):SCST 论文,用 CIDEr 做强化学习微调,是描述生成训练的重要里程碑。
  • Liu et al.,「Visual Instruction Tuning」(NeurIPS 2023):LLaVA 论文,简单 MLP 投影 + 指令微调,开创了开源多模态对话模型的范式。
  • Xiao et al.,「Florence-2: Advancing a Unified Representation for a Variety of Vision Tasks」(2024):微软统一视觉基础模型,用单一 seq2seq 架构统一多种视觉语言任务。
  • 注意力机制的深入解析见注意力机制;Transformer 的完整讲解见Transformer 架构;多模态模型的综述见多模态模型。